struct TrainRoutingInfo
{
Train *train;
+ float length;
float speed;
Block *first_noncritical;
TrainRouter *router;
float distance_traveled;
float remaining_estimate;
Msp::Time::TimeDelta wait_time;
+ Msp::Time::TimeDelta estimated_wait;
int blocked_by;
TrainRoutingState(TrainRoutingInfo &);
~TrainRoutingState();
Msp::Time::TimeDelta get_time_to_next_track() const;
+ Msp::Time::TimeDelta get_time_to_pass(Track &) const;
bool is_occupying(Track &) const;
bool check_arrival();
void advance(float);
RoutingStep(const RoutingStep *);
void create_successors(std::list<RoutingStep> &) const;
+ static void create_successor(RoutingStep &, unsigned, unsigned, std::list<RoutingStep> &);
bool update_states();
bool check_deadlocks() const;
int get_occupant(Track &) const;