void Vehicle::update_position()
{
- TrackPoint tp;
+ OrientedPoint p;
if(axles.size()>=2)
{
float wheelbase = axles.front().type->position-axles.back().type->position;
- tp = get_point(track, wheelbase, -axles.back().type->position/wheelbase);
+ p = get_point(track, wheelbase, -axles.back().type->position/wheelbase);
}
else if(bogies.size()>=2)
{
const vector<Axle> &front_axles = bogies.front().axles;
float wheelbase = front_axles.front().type->position-front_axles.back().type->position;
- TrackPoint front_point = get_point(front, wheelbase, -front_axles.back().type->position/wheelbase);
+ OrientedPoint front_point = get_point(front, wheelbase, -front_axles.back().type->position/wheelbase);
const vector<Axle> &back_axles = bogies.back().axles;
wheelbase = back_axles.front().type->position-back_axles.back().type->position;
- TrackPoint back_point = get_point(back, wheelbase, -back_axles.back().type->position/wheelbase);
+ OrientedPoint back_point = get_point(back, wheelbase, -back_axles.back().type->position/wheelbase);
- tp = get_point(front_point.pos, back_point.pos, -bogies.back().type->position/bogie_spacing);
+ p = get_point(front_point.position, back_point.position, -bogies.back().type->position/bogie_spacing);
- bogies.front().direction = front_point.dir-tp.dir;
- bogies.back().direction = back_point.dir-tp.dir;
+ bogies.front().direction = front_point.rotation-p.rotation;
+ bogies.back().direction = back_point.rotation-p.rotation;
}
else
- tp = track.point();
+ p = track.point();
if(!prev)
check_sensor(type.get_front_axle_offset(), front_sensor);
if(!next)
check_sensor(type.get_back_axle_offset(), back_sensor);
- position = tp.pos;
+ position = p.position;
position.z += layout.get_catalogue().get_rail_elevation();
- rotation = tp.dir;
+ rotation = p.rotation;
signal_moved.emit();
}
int adjust_dir = 0;
while(1)
{
- Vector front_point = front.point().pos;
- Vector back_point = back.point().pos;
+ Vector front_point = front.point().position;
+ Vector back_point = back.point().position;
float dist = distance(front_point, back_point);
}
}
-TrackPoint Vehicle::get_point(const Vector &front, const Vector &back, float ratio) const
+OrientedPoint Vehicle::get_point(const Vector &front, const Vector &back, float ratio) const
{
Vector span = front-back;
- TrackPoint tp;
- tp.pos = back+span*ratio;
- tp.dir = Geometry::atan2(span.y, span.x);
+ OrientedPoint p;
+ p.position = back+span*ratio;
+ p.rotation = Geometry::atan2(span.y, span.x);
- return tp;
+ return p;
}
-TrackPoint Vehicle::get_point(const TrackOffsetIter &iter, float tdist, float ratio) const
+OrientedPoint Vehicle::get_point(const TrackOffsetIter &iter, float tdist, float ratio) const
{
TrackOffsetIter front = iter.advance(tdist*(1-ratio));
TrackOffsetIter back = iter.advance(-tdist*ratio);
adjust_for_distance(front, back, tdist, ratio);
- return get_point(front.point().pos, back.point().pos, ratio);
+ return get_point(front.point().position, back.point().position, ratio);
}
unsigned Vehicle::get_n_link_slots() const