]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/trainrouter.cpp
Unoccupy destination during planning when the train has departed again
[r2c2.git] / source / libr2c2 / trainrouter.cpp
index 1c05f829906ee7933432a80709927acf864751b1..9245774f605309d597591fa01e95eb60f8b20c38 100644 (file)
@@ -181,6 +181,11 @@ void TrainRouter::set_departure_delay(const Time::TimeDelta &d)
        destination_changed = true;
 }
 
+void TrainRouter::set_trip_duration(const Time::TimeDelta &d)
+{
+       duration = d;
+}
+
 void TrainRouter::message(const Message &msg)
 {
        if(msg.type=="set-route")
@@ -208,6 +213,8 @@ void TrainRouter::message(const Message &msg)
        }
        else if(msg.type=="set-departure-delay")
                set_departure_delay(msg.value.value<Time::TimeDelta>());
+       else if(msg.type=="set-trip-duration")
+               set_trip_duration(msg.value.value<Time::TimeDelta>());
 }
 
 void TrainRouter::tick(const Time::TimeDelta &dt)
@@ -215,14 +222,19 @@ void TrainRouter::tick(const Time::TimeDelta &dt)
        if(delay)
        {
                delay -= dt;
-               if(delay<=Time::zero)
+               if(delay<Time::zero)
+               {
+                       duration = max(duration+delay, Time::zero);
                        delay = Time::zero;
+               }
        }
+       else if(duration)
+               duration = max(duration-dt, Time::zero);
 
        if(destination_changed && !planner)
                start_planning(train.get_layout());
 
-       if(planner && planner->get_result()!=TrainRoutePlanner::PENDING)
+       if(planner && planner->check()!=TrainRoutePlanner::PENDING)
        {
                destination_changed = false;
                if(planner->get_result()==TrainRoutePlanner::COMPLETE)
@@ -494,7 +506,7 @@ void TrainRouter::start_planning(Layout &layout)
                        router->planner = planner;
                }
 
-       planner->plan();
+       planner->plan_async();
 }