]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/trainrouter.h
Add a distance metric to turn the routing into an A* search
[r2c2.git] / source / libr2c2 / trainrouter.h
index 4f620764fd8c1a679205f59bb49662ad0fc0d20a..c69d28c9389057c3ea37cb14fd5ed3ed5ad0a52a 100644 (file)
@@ -11,6 +11,7 @@ class Block;
 class Layout;
 class Track;
 class TrackChain;
+class TrainRouteMetric;
 
 class TrainRouter: public TrainAI
 {
@@ -43,6 +44,7 @@ private:
        unsigned arriving;
        const TrackChain *destination;
        std::vector<const TrackChain *> waypoints;
+       std::vector<TrainRouteMetric *> metrics;
        std::list<Wait> waits;
        Msp::Time::TimeDelta delay;
 
@@ -50,6 +52,7 @@ private:
 
 public:
        TrainRouter(Train &);
+       ~TrainRouter();
 
        void set_priority(int);
        int get_priority() const { return priority; }
@@ -64,6 +67,7 @@ public:
        void add_waypoint(const TrackChain &);
        unsigned get_n_waypoints() const { return waypoints.size(); }
        bool is_waypoint(unsigned, Track &) const;
+       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; }
 
@@ -77,6 +81,7 @@ private:
        void train_advanced(Block &);
        const Route *get_route_for_block(const Block &) const;
 
+       void create_metrics();
        Route *create_lead_route(Route *, const Route *);
        bool advance_route(RouteList::iterator &, const Block &);
        bool is_on_route(const Block &);