X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Ftrainrouteplanner.cpp;h=99700699c452a21a81ef51bdad8dd25b5cab8e5e;hb=e8d2abb48b5236cc3455a035628292ae7908240e;hp=30d9f5e482ee054aa4a5dee7df770abbddd743a7;hpb=997e14793d8e58d3cb14a495970b36b1e0cad39b;p=r2c2.git diff --git a/source/libr2c2/trainrouteplanner.cpp b/source/libr2c2/trainrouteplanner.cpp index 30d9f5e..9970069 100644 --- a/source/libr2c2/trainrouteplanner.cpp +++ b/source/libr2c2/trainrouteplanner.cpp @@ -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)