]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/trainrouter.h
Unoccupy destination during planning when the train has departed again
[r2c2.git] / source / libr2c2 / trainrouter.h
index 27307e7849a885569b358d8bb8f2bcff49f4ac80..91b7bac1a4e0730afb2e7b278911f4d74b4c5334 100644 (file)
@@ -40,6 +40,13 @@ public:
 private:
        typedef std::list<const Route *> RouteList;
 
+       enum ArrivalState
+       {
+               ON_THE_WAY,
+               RESERVED_TO_END,
+               ARRIVED
+       };
+
 public:
        sigc::signal<void, const Route *> signal_route_changed;
        sigc::signal<void, const TrackChain *> signal_arrived;
@@ -49,7 +56,7 @@ private:
        int priority;
        RouteList routes;
        RouteList::iterator reserving_route;
-       unsigned arriving;
+       ArrivalState arrival;
        const TrackChain *destination;
        std::vector<const TrackChain *> waypoints;
        bool destination_changed;
@@ -59,6 +66,7 @@ private:
        unsigned current_sequence;
        bool sequence_check_pending;
        Msp::Time::TimeDelta delay;
+       Msp::Time::TimeDelta duration;
        Msp::RefPtr<TrainRoutePlanner> planner;
 
 public:
@@ -84,6 +92,8 @@ public:
        const TrainRouteMetric &get_metric(int = -1) const;
        void set_departure_delay(const Msp::Time::TimeDelta &);
        const Msp::Time::TimeDelta &get_departure_delay() const { return delay; }
+       void set_trip_duration(const Msp::Time::TimeDelta &);
+       const Msp::Time::TimeDelta &get_trip_duration() const { return duration; }
 
        virtual void message(const Message &);
        virtual void tick(const Msp::Time::TimeDelta &);
@@ -93,6 +103,7 @@ public:
 private:
        void block_reserved(Block &, Train *);
        void train_advanced(Block &);
+       void train_rear_advanced(Block &);
 
        void create_metrics();
        Route *create_lead_route(Route *, const Route *);