namespace Marklin {
SimplePhysics::SimplePhysics():
- target_speed(TrainControl::continuous("speed", -1000, 1000)),
+ target_speed(TrainControl::continuous("speed", 0, 1000)),
+ reverse(TrainControl::binary("reverse")),
accel(0.07),
speed(0)
{
void SimplePhysics::set_control(const string &name, float v)
{
if(name=="speed")
+ {
target_speed.set(v);
+ signal_control_changed.emit(target_speed);
+ }
+ else if(name=="reverse")
+ {
+ if(target_speed.value || speed)
+ throw InvalidState("Must be stopped to change reverse");
+ reverse.set(v);
+ signal_control_changed.emit(reverse);
+ }
}
const TrainControl &SimplePhysics::get_control(const string &name) const
{
if(name=="speed")
return target_speed;
+ else if(name=="reverse")
+ return reverse;
else
throw KeyError("Unknown control", name);
}