X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Ftrainrouteplanner.cpp;h=ad97cf79f77c0255f23b9c1be7ed5cf0cfe58e69;hb=5b71cb905051d654c150cb0e098cade0cb502105;hp=d9eedd2d4daccd0d33224548325c594859c7777a;hpb=cac4176a9685e8b39147d1e18d969b3bee052b03;p=r2c2.git diff --git a/source/libr2c2/trainrouteplanner.cpp b/source/libr2c2/trainrouteplanner.cpp index d9eedd2..ad97cf7 100644 --- a/source/libr2c2/trainrouteplanner.cpp +++ b/source/libr2c2/trainrouteplanner.cpp @@ -363,7 +363,7 @@ TrainRoutePlanner::TrainRoutingState::~TrainRoutingState() Time::TimeDelta TrainRoutePlanner::TrainRoutingState::get_time_to_next_track() const { - return ((track->get_type().get_path_length(path)-offset)/info->speed)*Time::sec+delay; + return ((occupied_tracks->path_length-offset)/info->speed)*Time::sec+delay; } Time::TimeDelta TrainRoutePlanner::TrainRoutingState::get_time_to_pass(Track &trk) const @@ -505,12 +505,22 @@ void TrainRoutePlanner::TrainRoutingState::advance_track(unsigned next_path) offset = 0; } +void TrainRoutePlanner::TrainRoutingState::set_path(unsigned p) +{ + path = p; + OccupiedTrack *next_occ = occupied_tracks->next; + if(!--occupied_tracks->refcount) + delete occupied_tracks; + occupied_tracks = new OccupiedTrack(*track, path, next_occ); + update_estimate(); +} + void TrainRoutePlanner::TrainRoutingState::update_estimate() { TrackIter iter = track.reverse(path); 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; + remaining_estimate += occupied_tracks->path_length-offset; } bool TrainRoutePlanner::TrainRoutingState::is_viable() const @@ -604,8 +614,7 @@ void TrainRoutePlanner::RoutingStep::create_successor(RoutingStep &next, unsigne { TrainRoutingState &train = next.trains[train_index]; - train.path = path; - train.update_estimate(); + train.set_path(path); next.update_estimate(); if(next.is_viable()) new_steps.push_back(next);