]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/trainrouter.cpp
Also check if the clock is stopped
[r2c2.git] / source / libr2c2 / trainrouter.cpp
index a5a63b4f7754f18f7f688616696a3a4a924359ae..5a8d9f7e16cfde6f2654c5f23a696f70bd0e4bc4 100644 (file)
@@ -1,3 +1,4 @@
+#include "driver.h"
 #include "layout.h"
 #include "route.h"
 #include "trackiter.h"
@@ -225,24 +226,28 @@ void TrainRouter::message(const Message &msg)
 
 void TrainRouter::tick(const Time::TimeDelta &dt)
 {
-       if(delay)
-       {
-               delay -= dt;
-               if(delay<Time::zero)
-               {
-                       duration = max(duration+delay, Time::zero);
-                       delay = Time::zero;
-               }
-       }
-       else if(duration)
-               duration = max(duration-dt, Time::zero);
-
        if(waypoints_changed && !planner)
                start_planning(train.get_layout());
 
        if(planner && planner->check()!=TrainRoutePlanner::PENDING)
                apply_plan(train.get_layout(), *planner);
 
+       Layout &layout = train.get_layout();
+       if(!layout.get_driver().is_halted() && !layout.get_clock().is_stopped())
+       {
+               if(delay)
+               {
+                       delay -= dt;
+                       if(delay<Time::zero)
+                       {
+                               duration = max(duration+delay, Time::zero);
+                               delay = Time::zero;
+                       }
+               }
+               else if(duration)
+                       duration = max(duration-dt, Time::zero);
+       }
+
        if(sequence_check_pending)
        {
                if(sequence_points.front().is_cleared())