X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Ftrainrouteplanner.cpp;h=43c61282edaca406241d338a2260d532f31bd14e;hb=98e09b97b8147134421a7103a34ca1cf86611d46;hp=95b981cb2e7965f650034f773361ef2920107aa8;hpb=7bb91be43af2af92cc1cc16035b8fe97f9e14384;p=r2c2.git diff --git a/source/libr2c2/trainrouteplanner.cpp b/source/libr2c2/trainrouteplanner.cpp index 95b981c..43c6128 100644 --- a/source/libr2c2/trainrouteplanner.cpp +++ b/source/libr2c2/trainrouteplanner.cpp @@ -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); @@ -569,7 +570,7 @@ void TrainRoutePlanner::RoutingStep::create_successors(list &new_st if(next.update_states() && next.check_deadlocks()) return; - int train_index = find_next_train(); + int train_index = next.find_next_train(); if(train_index<0) return; @@ -726,10 +727,13 @@ int TrainRoutePlanner::RoutingStep::get_occupant(Track &track) const int TrainRoutePlanner::RoutingStep::find_next_train() const { + /* Pick a moving train with the lowest time to next track. A train that + just became blocked can still travel until the end of its current track, + so consider those too. */ Time::TimeDelta min_dt; int next_train = -1; for(unsigned i=0; itrains[i].state==MOVING)) { Time::TimeDelta dt = trains[i].get_time_to_next_track(); if(dt