X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Ftrainrouter.h;h=3c23496710a7b8e3b8df004ca40f1a988faf5e26;hb=d4c2cc962dc4c7b11c2db360fef7a80de3334c11;hp=6f697f997b6349ba686b409022ce9e1d6fd79e86;hpb=5eeb8f5749586b9aae2996d2143e300388d15611;p=r2c2.git diff --git a/source/libr2c2/trainrouter.h b/source/libr2c2/trainrouter.h index 6f697f9..3c23496 100644 --- a/source/libr2c2/trainrouter.h +++ b/source/libr2c2/trainrouter.h @@ -12,6 +12,7 @@ class Layout; class Track; class TrackChain; class TrainRouteMetric; +class TrainRoutePlanner; class TrainRouter: public TrainAI { @@ -28,7 +29,6 @@ public: sigc::signal signal_arrived; sigc::signal signal_waypoint_reached; -private: struct SequencePoint { Block *block; @@ -37,22 +37,27 @@ private: unsigned sequence_out; SequencePoint(Block &, unsigned); + + bool is_cleared() const; }; +private: typedef std::list RouteList; int priority; RouteList routes; + RouteList::iterator reserving_route; unsigned arriving; const TrackChain *destination; std::vector waypoints; + bool destination_changed; std::vector metrics; + bool metrics_stale; std::list sequence_points; - std::list pending_sequence_checks; unsigned current_sequence; + bool sequence_check_pending; Msp::Time::TimeDelta delay; - - bool update_pending; + Msp::RefPtr planner; public: TrainRouter(Train &); @@ -62,12 +67,12 @@ public: int get_priority() const { return priority; } bool set_route(const Route *); - bool add_route(const Route &); const Route *get_route() const; - void add_sequence_point(Block &, unsigned); - void add_sequence_point(Block &, Train &, unsigned, unsigned); unsigned get_current_sequence() const { return current_sequence; } +private: + void route_changed(); +public: void set_destination(const TrackChain &); const TrackChain *get_destination() const { return destination; } bool is_destination(Track &) const; @@ -86,14 +91,13 @@ public: private: void block_reserved(Block &, Train *); 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 &); + bool is_valid_for_track(const Route &, Track &) const; + bool advance_to_track(RouteList::iterator &, Track &); - static void create_plans(Layout &); + static void start_planning(Layout &); }; } // namespace R2C2