From 61e10c1c177aa8867aa6e7c412899e917400ac2d Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Tue, 22 Dec 2009 18:54:28 +0000 Subject: [PATCH] Don't advance the estimated train position outside current blocks --- source/libmarklin/train.cpp | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) 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) -- 2.45.2