X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Ftrainrouter.cpp;h=2be3c8814fd14727d7ff3a5ffdbb8fc8458ffc0e;hb=f2092c352667a3178bfea9c2bc90882e4b7fb3aa;hp=da3b7d515fe253b79db3412ea0e98d2bd062d6ea;hpb=29878263d8faf9b7e5845e8b1c3d52b139a255cf;p=r2c2.git diff --git a/source/libr2c2/trainrouter.cpp b/source/libr2c2/trainrouter.cpp index da3b7d5..2be3c88 100644 --- a/source/libr2c2/trainrouter.cpp +++ b/source/libr2c2/trainrouter.cpp @@ -165,8 +165,8 @@ void TrainRouter::tick(const Time::TimeDelta &dt) if(arriving==1 && !train.get_speed()) { - signal_arrived.emit(); - signal_event.emit(Message("arrived")); + signal_arrived.emit(destination); + signal_event.emit(Message("arrived", destination)); arriving = 2; } else if(arriving==2 && !train.get_block_allocator().is_active()) @@ -237,8 +237,29 @@ void TrainRouter::train_advanced(Block &block) if(route.has_track(*b_iter.endpoint().track)) { routes.pop_front(); + const Route *r = get_route(); // XXX Exceptions? - signal_event.emit(Message("route-changed", get_route())); + signal_route_changed.emit(r); + signal_event.emit(Message("route-changed", r)); + } + } + + if(!waypoints.empty()) + { + const TrackChain &wp = *waypoints.front(); + TrackIter t_iter = b_iter.track_iter(); + if(wp.has_track(*t_iter)) + { + for(; t_iter; t_iter=t_iter.next()) + { + if(!wp.has_track(*t_iter)) + { + waypoints.erase(waypoints.begin()); + break; + } + else if(!block.has_track(*t_iter)) + break; + } } }