]> git.tdb.fi Git - r2c2.git/blobdiff - source/libmarklin/vehicle.cpp
Emit signal for control changes initiated by the control model itself
[r2c2.git] / source / libmarklin / vehicle.cpp
index 7c299c78bd4311f6bb3b41506529a75fb99f4cce..6011537d02b3205a4996a89a80edad272cfe2a2e 100644 (file)
@@ -35,6 +35,7 @@ Vehicle::~Vehicle()
 void Vehicle::place(Track *t, unsigned e, float o, PlaceMode m)
 {
        track_pos = TrackPosition(t, e, o);
+
        if(m==FRONT_AXLE)
        {
                float front = type.get_length()/2;
@@ -47,6 +48,23 @@ void Vehicle::place(Track *t, unsigned e, float o, PlaceMode m)
                }
                track_pos.advance(-front);
        }
+       else if(m==FRONT_BUFFER)
+               track_pos.advance(-type.get_length()/2);
+       else if(m==BACK_AXLE)
+       {
+               float back = type.get_length()/2;
+               if(!type.get_axles().empty())
+                       back = type.get_axles().back().position;
+               if(!type.get_bogies().empty())
+               {
+                       const VehicleType::Bogie &bogie = type.get_bogies().back();
+                       back = min(back, bogie.position+bogie.axles.back().position);
+               }
+               track_pos.advance(-back);
+       }
+       else if(m==BACK_BUFFER)
+               track_pos.advance(type.get_length()/2);
+
        update_position();
 }