]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/trainrouteplanner.h
Further fix delay handling
[r2c2.git] / source / libr2c2 / trainrouteplanner.h
index d24c3dc6a2ae54903bd4f6dd731861f9e000e110..33e6ef5f1b4c5c7f22e23432eb3ed87932191e0c 100644 (file)
@@ -24,7 +24,8 @@ private:
                Train *train;
                float speed;
                TrainRouter *router;
-               Route *route;
+               std::list<Route *> routes;
+               Track *track_history[3];
                std::list<const TrainRoutingState *> waits;
 
                TrainRoutingInfo(Train &);
@@ -62,6 +63,7 @@ private:
                TrainState state;
                Msp::Time::TimeDelta delay;
                int waypoint;
+               float remaining_estimate;
                int blocked_by;
 
                TrainRoutingState(TrainRoutingInfo &);
@@ -69,15 +71,18 @@ private:
                ~TrainRoutingState();
 
                Msp::Time::TimeDelta get_time_to_next_track() const;
-               bool is_occupied(Track &) const;
+               bool is_occupying(Track &) const;
                bool check_arrival();
                void advance(float);
+               void advance(const Msp::Time::TimeDelta &);
                void advance_track(unsigned);
+               void update_estimate();
        };
 
        struct RoutingStep
        {
                Msp::Time::TimeDelta time;
+               Msp::Time::TimeDelta total_estimate;
                std::vector<TrainRoutingState> trains;
                const RoutingStep *prev;
 
@@ -90,6 +95,7 @@ private:
                int get_occupant(Track &) const;
                int find_next_train() const;
                void advance(const Msp::Time::TimeDelta &);
+               void update_estimate();
                bool is_viable() const;
                bool is_goal() const;
 
@@ -98,12 +104,14 @@ private:
 
        std::vector<TrainRoutingInfo> routed_trains;
        std::list<RoutingStep> steps;
+       std::list<RoutingStep> queue;
 
 public:
        TrainRoutePlanner(Layout &);
 
        void plan();
 private:
+       const RoutingStep &get_step();
        void add_steps(const RoutingStep &);
        void create_routes(const RoutingStep &);
 };