]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/trainrouteplanner.cpp
Unoccupy destination during planning when the train has departed again
[r2c2.git] / source / libr2c2 / trainrouteplanner.cpp
index 30d9f5e482ee054aa4a5dee7df770abbddd743a7..99700699c452a21a81ef51bdad8dd25b5cab8e5e 100644 (file)
@@ -248,6 +248,7 @@ TrainRoutePlanner::TrainRoutingState::TrainRoutingState(TrainRoutingInfo &inf):
        occupied_tracks(0),
        state(MOVING),
        delay(info->router->get_departure_delay()),
+       duration(info->router->get_trip_duration()),
        waypoint(info->router->get_n_waypoints() ? 0 : -1),
        blocked_by(-1)
 {
@@ -284,6 +285,7 @@ TrainRoutePlanner::TrainRoutingState::TrainRoutingState(const TrainRoutingState
        back_offset(other.back_offset),
        state(other.state),
        delay(other.delay),
+       duration(other.duration),
        waypoint(other.waypoint),
        distance_traveled(other.distance_traveled),
        remaining_estimate(other.remaining_estimate),
@@ -306,6 +308,9 @@ Time::TimeDelta TrainRoutePlanner::TrainRoutingState::get_time_to_next_track() c
 
 bool TrainRoutePlanner::TrainRoutingState::is_occupying(Track &trk) const
 {
+       if(state==ARRIVED && !duration && info->router->get_trip_duration())
+               return false;
+
        OccupiedTrack *occ = occupied_tracks;
        for(unsigned n=occ->n_tracks; n>0; --n, occ=occ->next)
                if(occ->track==&trk)
@@ -373,6 +378,9 @@ void TrainRoutePlanner::TrainRoutingState::advance(const Time::TimeDelta &dt)
                delay = Time::zero;
        }
 
+       if(duration)
+               duration = max(duration-secs*Time::sec, Time::zero);
+
        if(state==MOVING)
                advance(info->speed*secs);
        else if(state!=ARRIVED)