#include "locotype.h"
#include "route.h"
#include "simplephysics.h"
+#include "timetable.h"
#include "tracktype.h"
#include "train.h"
#include "vehicle.h"
address(a),
pending_block(0),
control(new AIControl(*this, new SimplePhysics)),
+ timetable(0),
active(false),
current_speed(0),
speed_changing(false),
layout.signal_block_reserved.connect(sigc::mem_fun(this, &Train::block_reserved));
layout.get_driver().signal_sensor.connect(sigc::mem_fun(this, &Train::sensor_event));
layout.get_driver().signal_turnout.connect(sigc::mem_fun(this, &Train::turnout_event));
+
+ control->signal_control_changed.connect(signal_control_changed);
}
Train::~Train()
void Train::set_control(const string &n, float v)
{
control->set_control(n, v);
- signal_control_changed.emit(n, control->get_control(n).value);
}
void Train::set_active(bool a)
stop_timeout = Time::TimeStamp();
}
+ if(timetable)
+ timetable->tick(t);
control->tick(dt);
float speed = control->get_speed();
unsigned speed_notch = find_speed(abs(speed));
if(route)
st.push_back((DataFile::Statement("route"), route->get_name()));
+
+ if(timetable)
+ {
+ DataFile::Statement ss("timetable");
+ timetable->save(ss.sub);
+ st.push_back(ss);
+ }
}
void Train::loco_speed_event(unsigned addr, unsigned speed, bool)
add("name", &Loader::name);
add("real_speed", &Loader::real_speed);
add("route", &Loader::route);
+ add("timetable", &Loader::timetable);
}
void Train::Loader::block(unsigned id)
obj.set_route(&obj.layout.get_route(n));
}
+void Train::Loader::timetable()
+{
+ if(obj.timetable)
+ throw InvalidState("A timetable has already been loaded");
+
+ obj.timetable = new Timetable(obj);
+ load_sub(*obj.timetable);
+}
+
} // namespace Marklin