-
-Vehicle::TrackPosition::TrackPosition():
- offs(0)
-{ }
-
-Vehicle::TrackPosition::TrackPosition(const TrackIter &t, float o):
- track(t),
- offs(o)
-{ }
-
-void Vehicle::TrackPosition::advance(float d)
-{
- if(!track)
- return;
-
- offs += d;
- while(track)
- {
- float path_len = track->get_type().get_path_length(track->get_active_path());
-
- if(offs>path_len)
- {
- offs -= path_len;
- track = track.next();
- }
- else
- break;
- }
-
- while(track && offs<0)
- {
- track = track.flip().reverse();
-
- if(track)
- {
- float path_len = track->get_type().get_path_length(track->get_active_path());
- offs += path_len;
- }
- }
-
- if(!track)
- offs = 0;
-}
-
-TrackPoint Vehicle::TrackPosition::get_point() const
-{
- if(track)
- return track->get_point(track.entry(), offs);
- else
- return TrackPoint();
-}
-