struct TrainRoutingInfo
{
Train *train;
+ float length;
float speed;
Block *first_noncritical;
TrainRouter *router;
- const TrackChain *destination;
- std::vector<const TrackChain *> waypoints;
+ std::vector<TrainRouter::Waypoint> waypoints;
std::vector<const TrainRouteMetric *> metrics;
bool has_duration;
std::list<Route *> routes;
TrainState state;
Msp::Time::TimeDelta delay;
Msp::Time::TimeDelta duration;
- int waypoint;
+ unsigned waypoint;
+ float travel_multiplier;
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);
void advance(const Msp::Time::TimeDelta &);
void advance_track(unsigned);
+ void set_path(unsigned);
void update_estimate();
+ bool is_viable() const;
};
struct RoutingStep
{
Msp::Time::TimeDelta time;
- Msp::Time::TimeDelta penalty;
Msp::Time::TimeDelta cost_estimate;
+ bool preferred;
std::vector<TrainRoutingState> trains;
const RoutingStep *prev;
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;
std::list<RoutingStep> steps;
std::list<RoutingStep> queue;
const RoutingStep *goal;
+ Msp::Time::TimeDelta path_switch_bias;
+ Msp::Time::TimeDelta timeout;
Result result;
PlanningThread *thread;
TrainRoutePlanner(Layout &);
~TrainRoutePlanner();
+ void set_timeout(const Msp::Time::TimeDelta &);
Result plan();
void plan_async();
Result check();
- Result get_result() { return result; }
+ Result get_result() const { return result; }
const std::list<Route *> &get_routes_for(const Train &) const;
const std::list<TrainRouter::SequencePoint> &get_sequence_for(const Train &) const;
private: