]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/simplecontroller.cpp
Remove a queued block reservation if the block is released
[r2c2.git] / source / libr2c2 / simplecontroller.cpp
index e7d9352ca048bd8377570476662860d1662d5fd3..df828d5498832bf480cea9767518dae92dc6014a 100644 (file)
@@ -1,11 +1,4 @@
-/* $Id$
-
-This file is part of R²C²
-Copyright © 2010  Mikkosoft Productions, Mikko Rasa
-Distributed under the GPL
-*/
-
-#include <msp/core/except.h>
+#include <msp/core/maputils.h>
 #include <msp/time/units.h>
 #include "simplecontroller.h"
 
@@ -43,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);
        }
@@ -56,7 +49,7 @@ const Controller::Control &SimpleController::get_control(const string &name) con
        else if(name==reverse.name)
                return reverse;
        else
-               throw KeyError("Unknown control", name);
+               throw key_error(name);
 }
 
 float SimpleController::get_braking_distance() const
@@ -68,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