From: Mikko Rasa Date: Tue, 22 Dec 2009 18:54:28 +0000 (+0000) Subject: Don't advance the estimated train position outside current blocks X-Git-Url: http://git.tdb.fi/?a=commitdiff_plain;h=61e10c1c177aa8867aa6e7c412899e917400ac2d;p=r2c2.git Don't advance the estimated train position outside current blocks --- diff --git a/source/libmarklin/train.cpp b/source/libmarklin/train.cpp index 4beda97..5524a5d 100644 --- a/source/libmarklin/train.cpp +++ b/source/libmarklin/train.cpp @@ -154,14 +154,25 @@ void Train::tick(const Time::TimeStamp &t, const Time::TimeDelta &dt) path = trfc_mgr.get_control().get_turnout(cur_track->get_turnout_id()).get_path(); offset += get_real_speed(loco.get_speed())*(dt/Time::sec); - if(offset>cur_track->get_type().get_path_length(path)) + float path_len = cur_track->get_type().get_path_length(path); + if(offset>path_len) { unsigned out = cur_track->traverse(cur_track_ep, path); Track *next = cur_track->get_link(out); - if(next) - cur_track_ep = next->get_endpoint_by_link(*cur_track); - cur_track = next; - offset = 0; + + bool ok = false; + for(list::const_iterator i=cur_blocks.begin(); (!ok && i!=cur_blocks.end()); ++i) + ok = i->block->get_tracks().count(next); + + if(ok) + { + if(next) + cur_track_ep = next->get_endpoint_by_link(*cur_track); + cur_track = next; + offset = 0; + } + else + offset = path_len-0.001; } if(cur_track)