]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/trainrouteplanner.cpp
Create another track iterator class that holds an offset as well
[r2c2.git] / source / libr2c2 / trainrouteplanner.cpp
index 0de707b16d21c167a88b9f153ac4945c719c647a..e75cec9cc6f9921f248dd76f89ecc8af80dc6067 100644 (file)
@@ -226,34 +226,19 @@ TrainRoutePlanner::TrainRoutingState::TrainRoutingState(TrainRoutingInfo &inf):
        state(MOVING)
 {
        const Vehicle *veh = &info->train->get_vehicle(0);
-       track = veh->get_track_iter();
        // TODO margins
-       offset = veh->get_offset()+veh->get_type().get_length()/2;
+       float half_length = veh->get_type().get_length()/2;
+       TrackOffsetIter track_and_offs = veh->get_track_iter().advance(half_length);
+       track = track_and_offs.track_iter();
+       offset = track_and_offs.offset();
        path = track->get_active_path();
 
-       float path_length = track->get_type().get_path_length(path);
-       while(offset>path_length)
-       {
-               offset -= path_length;
-               track = track.next();
-               path = track->get_active_path();
-               path_length = track->get_type().get_path_length(path);
-       }
-
        while(Vehicle *next = veh->get_link(1))
                veh = next;
-       back_offset = veh->get_offset()-veh->get_type().get_length()/2;
-
-       TrackIter iter = veh->get_track_iter();
-       while(back_offset<0)
-       {
-               TrackIter prev = iter.flip().reverse();
-               if(!prev)
-                       break;
-               iter = prev;
-               back_offset += iter->get_type().get_path_length(iter->get_active_path());
-       }
+       track_and_offs = veh->get_track_iter().advance(-half_length);
+       back_offset = track_and_offs.offset();
 
+       TrackIter iter = track_and_offs.track_iter();
        while(1)
        {
                occupied_tracks = new OccupiedTrack(*iter, iter->get_active_path(), occupied_tracks);