]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/trainrouteplanner.cpp
Ensure that remaining estimate is negative if the waypoint is unreachable
[r2c2.git] / source / libr2c2 / trainrouteplanner.cpp
index 9bed406f102576c893a6f3b890ad031d36329840..ca85ac74084dace04e65d24d48cec278b9c67350 100644 (file)
@@ -214,7 +214,7 @@ void TrainRoutePlanner::finalize_plan()
 TrainRoutePlanner::TrainRoutingInfo::TrainRoutingInfo(Train &t):
        train(&t),
        speed(train->get_maximum_speed()),
-       first_noncritical(train->get_first_noncritical_block().block()),
+       first_noncritical(train->get_last_critical_block().next().block()),
        router(train->get_ai_of_type<TrainRouter>()),
        waypoints(router ? router->get_n_waypoints() : 0),
        has_duration(false)
@@ -443,9 +443,9 @@ void TrainRoutePlanner::TrainRoutingState::advance_track(unsigned next_path)
 void TrainRoutePlanner::TrainRoutingState::update_estimate()
 {
        TrackIter iter = track.reverse(path);
-       float distance = info->metrics[waypoint]->get_distance_from(*iter.track(), iter.entry());
-       distance += track->get_type().get_path_length(path)-offset;
-       remaining_estimate = distance;
+       remaining_estimate = info->metrics[waypoint]->get_distance_from(*iter.track(), iter.entry());
+       if(remaining_estimate>=0)
+               remaining_estimate += track->get_type().get_path_length(path)-offset;
 }
 
 bool TrainRoutePlanner::TrainRoutingState::is_viable() const