type(t),
next(0),
prev(0),
- direction(0)
+ direction(0),
+ bogie_dirs(type.get_bogies().size())
{
layout.add_vehicle(*this);
}
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;
const vector<VehicleType::Axle> &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<VehicleType::Axle> &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();