]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/trainrouter.cpp
Rename is_occupied to is_occupying
[r2c2.git] / source / libr2c2 / trainrouter.cpp
index da3b7d515fe253b79db3412ea0e98d2bd062d6ea..b388bb2be9bc1a1062f49ce6d41f7b3e8ee86382 100644 (file)
@@ -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;
+                       }
                }
        }