X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Ftrainrouteplanner.cpp;h=b4d4afd64c23bd0b43ee0361d410d86ef9245f1f;hb=7d6f95321585b41bb5a6f11ff148486612bbc19e;hp=fc62faaa48ab25d6478e42dc55205cc3f5c92f46;hpb=f305e582aef0dceafd3b7b00bf9374bb69bdf8b0;p=r2c2.git diff --git a/source/libr2c2/trainrouteplanner.cpp b/source/libr2c2/trainrouteplanner.cpp index fc62faa..b4d4afd 100644 --- a/source/libr2c2/trainrouteplanner.cpp +++ b/source/libr2c2/trainrouteplanner.cpp @@ -273,6 +273,25 @@ void TrainRoutePlanner::TrainRoutingState::advance(float distance) remaining_estimate -= distance; } +void TrainRoutePlanner::TrainRoutingState::advance(const Time::TimeDelta &dt) +{ + if(delay>=dt) + { + delay -= dt; + return; + } + + float secs = dt/Time::sec; + if(delay) + { + secs -= delay/Time::sec; + delay = Time::zero; + } + + if(state==MOVING) + advance(info->speed*secs); +} + void TrainRoutePlanner::TrainRoutingState::advance_track(unsigned next_path) { float distance = occupied_tracks->path_length-offset; @@ -439,17 +458,7 @@ void TrainRoutePlanner::RoutingStep::advance(const Time::TimeDelta &dt) { time += dt; for(vector::iterator i=trains.begin(); i!=trains.end(); ++i) - { - if(i->delay) - { - i->delay -= dt; - if(i->delay>Time::zero) - continue; - i->delay = Time::zero; - } - else if(i->state==MOVING) - i->advance(i->info->speed*(dt/Time::sec)); - } + i->advance(dt); } void TrainRoutePlanner::RoutingStep::update_estimate()