class Timetable;
class Vehicle;
class VehicleType;
+class Zone;
class Train: public sigc::trackable
{
sigc::signal<void, const std::string &, float> signal_control_changed;
sigc::signal<void, unsigned, bool> signal_function_changed;
sigc::signal<void, const Route *> signal_route_changed;
+ sigc::signal<void, Block &> signal_advanced;
sigc::signal<void> signal_arrived;
sigc::signal<void, const std::string &> signal_status_changed;
std::string name;
int priority;
const Train *yielding_to;
+ const Train *preceding_train;
std::vector<Vehicle *> vehicles;
BlockList blocks;
BlockList::iterator cur_blocks_end;
void set_priority(int);
void yield_to(const Train &);
int get_priority() const { return priority; }
+ const Train *get_preceding_train() const { return preceding_train; }
Controller &get_controller() const { return *controller; }
void add_vehicle(const VehicleType &);
bool set_route(const Route *);
bool go_to(Track &);
+ bool go_to(const Zone &);
bool divert(Track &);
const Route *get_route() const;
void place(Block &, unsigned);