]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/trainrouteplanner.h
Consider train length when calculating wait time estimate
[r2c2.git] / source / libr2c2 / trainrouteplanner.h
index c7572c0df41cb48c548fa2c4b0cb40f6afdd4453..79a6036e6d1fbe5b8c7a6c23a70f616a8d6c6216 100644 (file)
@@ -31,10 +31,11 @@ private:
        struct TrainRoutingInfo
        {
                Train *train;
+               float length;
                float speed;
                Block *first_noncritical;
                TrainRouter *router;
-               std::vector<const TrackChain *> waypoints;
+               std::vector<TrainRouter::Waypoint> waypoints;
                std::vector<const TrainRouteMetric *> metrics;
                bool has_duration;
                std::list<Route *> routes;
@@ -81,6 +82,7 @@ private:
                float distance_traveled;
                float remaining_estimate;
                Msp::Time::TimeDelta wait_time;
+               Msp::Time::TimeDelta estimated_wait;
                int blocked_by;
 
                TrainRoutingState(TrainRoutingInfo &);
@@ -88,6 +90,7 @@ private:
                ~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);
@@ -109,6 +112,7 @@ private:
                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;