+ Msp::Time::TimeStamp last_entry_time;
+ float travel_dist;
+ unsigned travel_speed;
+ bool pure_speed;
+ std::vector<RealSpeed> real_speed;
+
+ Track *cur_track;
+ unsigned cur_track_ep;
+ float offset;
+ Point pos;
+
+public:
+ Train(Layout &, const LocoType &, unsigned);
+ ~Train();
+
+ const LocoType &get_locomotive_type() const { return loco_type; }
+ unsigned get_address() const { return address; }
+ void set_name(const std::string &);
+ const std::string &get_name() const { return name; }
+
+ void set_speed(unsigned);
+ void set_reverse(bool);
+ void set_function(unsigned, bool);
+ unsigned get_target_speed() const { return target_speed; }
+ unsigned get_speed() const { return current_speed; }
+ bool get_reverse() const { return reverse; }
+ bool get_function(unsigned) const;
+ unsigned get_functions() const { return functions; }
+
+ void set_route(const Route *);
+ void go_to(const Track &);
+ const Route *get_route() const { return route; }
+ void place(Block &, unsigned);
+ bool is_placed() const { return !cur_blocks.empty(); }
+ bool free_block(Block &);
+ int get_entry_to_block(Block &) const;
+
+ const std::string &get_status() const { return status; }
+ const Point &get_position() const { return pos; }
+
+ void tick(const Msp::Time::TimeStamp &, const Msp::Time::TimeDelta &);
+
+ void save(std::list<Msp::DataFile::Statement> &) const;
+private:
+ void loco_speed_event(unsigned, unsigned, bool);
+ void loco_func_event(unsigned, unsigned, bool);