]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/trainrouteplanner.cpp
Avoid negative values of wait_time
[r2c2.git] / source / libr2c2 / trainrouteplanner.cpp
index c07f9e8c188aeeb70fef0fe8be1b29dff155eaef..476d102617ff1045658d80391f73cf1f4ccedfee 100644 (file)
@@ -308,6 +308,7 @@ TrainRoutePlanner::TrainRoutingState::TrainRoutingState(TrainRoutingInfo &inf):
        delay(info->router->get_departure_delay()),
        duration(info->router->get_trip_duration()),
        waypoint(0),
+       distance_traveled(0),
        blocked_by(-1)
 {
        const Vehicle *veh = &info->train->get_vehicle(0);
@@ -492,15 +493,16 @@ void TrainRoutePlanner::TrainRoutingState::advance(const Time::TimeDelta &dt)
        if(estimated_wait)
                estimated_wait = max(estimated_wait-secs*Time::sec, Time::zero);
 
-       if(state==MOVING)
+       float distance = info->speed*secs;
+       float remaining_on_track = occupied_tracks->path_length-offset;
+       if(state==MOVING || distance<remaining_on_track)
                advance(info->speed*secs);
        else if(state!=ARRIVED)
        {
-               float remaining_distance = occupied_tracks->path_length-offset;
-               if(remaining_distance>0)
+               if(remaining_on_track>0)
                {
-                       advance(remaining_distance);
-                       wait_time += (secs-remaining_distance/info->speed)*Time::sec;
+                       advance(remaining_on_track);
+                       wait_time += (secs-remaining_on_track/info->speed)*Time::sec;
                }
                else
                        wait_time += secs*Time::sec;