X-Git-Url: http://git.tdb.fi/?p=r2c2.git;a=blobdiff_plain;f=source%2Flibr2c2%2Ftrainrouteplanner.cpp;h=b9bbfbcf1760c494d39c62464a1fdb4a5271333b;hp=7e179f39fa41b4f2c3390e55e4a5e02fbbd3bb55;hb=5d40b436554081e785d213d2e03da7aa0d6631f0;hpb=5ec71ac8d091bb70e70528138bba9edaccc7f55d diff --git a/source/libr2c2/trainrouteplanner.cpp b/source/libr2c2/trainrouteplanner.cpp index 7e179f3..b9bbfbc 100644 --- a/source/libr2c2/trainrouteplanner.cpp +++ b/source/libr2c2/trainrouteplanner.cpp @@ -331,6 +331,8 @@ TrainRoutePlanner::TrainRoutingState::TrainRoutingState(TrainRoutingInfo &inf): iter = iter.next(); } + travel_multiplier = info->metrics[waypoint]->get_travel_multiplier(*track, track.reverse(path).entry()); + update_estimate(); } @@ -346,6 +348,7 @@ TrainRoutePlanner::TrainRoutingState::TrainRoutingState(const TrainRoutingState delay(other.delay), duration(other.duration), waypoint(other.waypoint), + travel_multiplier(other.travel_multiplier), distance_traveled(other.distance_traveled), remaining_estimate(other.remaining_estimate), wait_time(other.wait_time), @@ -463,8 +466,8 @@ void TrainRoutePlanner::TrainRoutingState::advance(float distance) occupied_tracks->n_tracks -= count_to_free; } - distance_traveled += distance; - remaining_estimate -= distance; + distance_traveled += distance*travel_multiplier; + remaining_estimate -= distance*travel_multiplier; } void TrainRoutePlanner::TrainRoutingState::advance(const Time::TimeDelta &dt) @@ -505,6 +508,7 @@ void TrainRoutePlanner::TrainRoutingState::advance_track(unsigned next_path) advance(distance); offset = 0; + travel_multiplier = info->metrics[waypoint]->get_travel_multiplier(*track, track.reverse(path).entry()); } void TrainRoutePlanner::TrainRoutingState::set_path(unsigned p) @@ -520,9 +524,11 @@ void TrainRoutePlanner::TrainRoutingState::set_path(unsigned p) void TrainRoutePlanner::TrainRoutingState::update_estimate() { TrackIter iter = track.reverse(path); - remaining_estimate = info->metrics[waypoint]->get_distance_from(*iter.track(), iter.entry()); + const TrainRouteMetric *metric = info->metrics[waypoint]; + remaining_estimate = metric->get_distance_from(*iter, iter.entry()); + travel_multiplier = metric->get_travel_multiplier(*iter, iter.entry()); if(remaining_estimate>=0) - remaining_estimate += occupied_tracks->path_length-offset; + remaining_estimate += (occupied_tracks->path_length-offset)*travel_multiplier; } bool TrainRoutePlanner::TrainRoutingState::is_viable() const