X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibmarklin%2Fvehicle.cpp;h=6011537d02b3205a4996a89a80edad272cfe2a2e;hb=d88bc162df8b34f2ca966524222880033132da0f;hp=7c299c78bd4311f6bb3b41506529a75fb99f4cce;hpb=e5cd9e4fbc577036a0385c985b6b65df8218d0a2;p=r2c2.git diff --git a/source/libmarklin/vehicle.cpp b/source/libmarklin/vehicle.cpp index 7c299c7..6011537 100644 --- a/source/libmarklin/vehicle.cpp +++ b/source/libmarklin/vehicle.cpp @@ -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(); }