X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Ftrainrouter.cpp;h=b388bb2be9bc1a1062f49ce6d41f7b3e8ee86382;hb=ab92a81163a62348b0f3708ac642e6cfcf64d8d5;hp=da3b7d515fe253b79db3412ea0e98d2bd062d6ea;hpb=29878263d8faf9b7e5845e8b1c3d52b139a255cf;p=r2c2.git diff --git a/source/libr2c2/trainrouter.cpp b/source/libr2c2/trainrouter.cpp index da3b7d5..b388bb2 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,31 @@ 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()); + signal_waypoint_reached.emit(&wp); + signal_event.emit(Message("waypoint-reached", &wp)); + break; + } + else if(!block.has_track(*t_iter)) + break; + } } }