X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibmarklin%2Fvehicle.cpp;h=1f3d3ec178e56a771987264a495b5c20982d80b9;hb=a4566a4a23ff676f11a90615e8e468ef50107946;hp=8d52a7f07816121d071b5d1e6aaf4adc42f23dcd;hpb=6968273080fa2a1cbcfc506610d5f249299611e9;p=r2c2.git diff --git a/source/libmarklin/vehicle.cpp b/source/libmarklin/vehicle.cpp index 8d52a7f..1f3d3ec 100644 --- a/source/libmarklin/vehicle.cpp +++ b/source/libmarklin/vehicle.cpp @@ -23,7 +23,8 @@ Vehicle::Vehicle(Layout &l, const VehicleType &t): type(t), next(0), prev(0), - direction(0) + direction(0), + bogie_dirs(type.get_bogies().size()) { layout.add_vehicle(*this); } @@ -113,6 +114,13 @@ void Vehicle::advance(float d) propagate_position(); } +float Vehicle::get_bogie_direction(unsigned i) const +{ + if(i>=bogie_dirs.size()) + throw InvalidParameterValue("Bogie index out of range"); + return bogie_dirs[i]; +} + void Vehicle::update_position() { TrackPoint tp; @@ -137,13 +145,16 @@ void Vehicle::update_position() const vector &front_axles = bogies.front().axles; float wheelbase = front_axles.front().position-front_axles.back().position; - Point front_point = get_point(front, wheelbase, -front_axles.back().position/wheelbase).pos; + TrackPoint front_point = get_point(front, wheelbase, -front_axles.back().position/wheelbase); const vector &back_axles = bogies.back().axles; wheelbase = back_axles.front().position-back_axles.back().position; - Point back_point = get_point(back, wheelbase, -back_axles.back().position/wheelbase).pos; + TrackPoint back_point = get_point(back, wheelbase, -back_axles.back().position/wheelbase); + + tp = get_point(front_point.pos, back_point.pos, -bogies.back().position/bogie_spacing); - tp = get_point(front_point, back_point, -bogies.back().position/bogie_spacing); + bogie_dirs.front() = front_point.dir-tp.dir; + bogie_dirs.back() = back_point.dir-tp.dir; } else tp = track_pos.get_point();