+public:
+ sigc::signal<void, const std::string &> signal_name_changed;
+ sigc::signal<void, const std::string &> signal_status_changed;
+
+ Train(TrafficManager &, Locomotive &);
+
+ void set_name(const std::string &);
+ void set_speed(unsigned);
+ const std::string &get_name() const { return name; }
+ Locomotive &get_locomotive() const { return loco; }
+ const std::string &get_status() const { return status; }
+ void place(Block *, unsigned);
+ bool free_block(Block *);
+ void tick(const Msp::Time::TimeStamp &);
+private:
+ void sensor_event(bool, Sensor *);
+ unsigned reserve_more();
+ void set_status(const std::string &);