]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/simplecontroller.cpp
Instantly set turnout paths when loading state
[r2c2.git] / source / libr2c2 / simplecontroller.cpp
index d88ade005929309e38d15f04714e7fa08278cad0..df828d5498832bf480cea9767518dae92dc6014a 100644 (file)
@@ -1,4 +1,3 @@
-#include <msp/core/except.h>
 #include <msp/core/maputils.h>
 #include <msp/time/units.h>
 #include "simplecontroller.h"
@@ -37,7 +36,7 @@ void SimpleController::set_control(const string &name, float v)
        else if(name==reverse.name)
        {
                if(target_speed.value || speed)
-                       throw InvalidState("Must be stopped to change reverse");
+                       throw logic_error("Must be stopped to change reverse");
                reverse.set(v);
                signal_control_changed.emit(reverse);
        }
@@ -62,17 +61,9 @@ void SimpleController::tick(const Time::TimeDelta &dt)
 {
        float secs = dt/Time::sec;
        if(speed<target_speed.value)
-       {
-               speed += secs*accel;
-               if(speed>target_speed.value)
-                       speed = target_speed.value;
-       }
+               speed = min(speed+secs*accel, target_speed.value);
        else if(speed>target_speed.value)
-       {
-               speed -= secs*accel;
-               if(speed<target_speed.value)
-                       speed = target_speed.value;
-       }
+               speed = max(speed-secs*accel, target_speed.value);
 }
 
 } // namespace R2C2