]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/train.h
Separate train routing logic to a class derived from TrainAI
[r2c2.git] / source / libr2c2 / train.h
index 709140c9a6102e3dcb61a94ffc130894dfb10baf..7c388ad7087801fe5928f69cfa9915da43b05d6b 100644 (file)
 namespace R2C2 {
 
 class ArticleNumber;
-class Route;
 class SpeedQuantizer;
 class Vehicle;
 class VehicleType;
-class Zone;
 
 class Train: public sigc::trackable
 {
@@ -36,7 +34,7 @@ public:
                void block_hint(unsigned);
                void name(const std::string &);
                void quantized_speed();
-               void route(const std::string &);
+               void router();
                void timetable();
                void vehicle(ArticleNumber);
        };
@@ -45,10 +43,7 @@ public:
        sigc::signal<void, const std::string &, float> signal_control_changed;
        sigc::signal<void, unsigned, bool> signal_function_changed;
        sigc::signal<void, TrainAI &, const TrainAI::Message &> signal_ai_event;
-       sigc::signal<void, const Route *> signal_route_changed;
        sigc::signal<void, Block &> signal_advanced;
-       sigc::signal<void> signal_arrived;
-       sigc::signal<void, const std::string &> signal_status_changed;
 
 private:
        typedef std::list<BlockIter> BlockList;
@@ -58,14 +53,13 @@ private:
        unsigned address;
        std::string protocol;
        std::string name;
-       int priority;
-       const Train *yielding_to;
        const Train *preceding_train;
        std::vector<Vehicle *> vehicles;
        BlockList blocks;
        BlockList::iterator cur_blocks_end;
        BlockList::iterator clear_blocks_end;
        Block *pending_block;
+       Block *stop_at_block;
        bool reserving;
        bool advancing;
        Controller *controller;
@@ -76,8 +70,6 @@ private:
        bool reverse;
        Msp::Time::TimeStamp stop_timeout;
        unsigned functions;
-       std::list<const Route *> routes;
-       bool end_of_route;
 
        Msp::Time::TimeStamp last_entry_time;
        float travel_dist;
@@ -96,9 +88,6 @@ public:
        const std::string &get_protocol() const { return protocol; }
        void set_name(const std::string &);
        const std::string &get_name() const { return name; }
-       void set_priority(int);
-       void yield_to(const Train &);
-       int get_priority() const { return priority; }
        const Train *get_preceding_train() const { return preceding_train; }
        Controller &get_controller() const { return *controller; }
 
@@ -124,15 +113,14 @@ public:
        TrainAI *get_tagged_ai(const std::string &) const;
        void ai_message(const TrainAI::Message &);
 
-       bool set_route(const Route *);
-       bool go_to(Track &);
-       bool go_to(const Zone &);
-       const Route *get_route() const;
        void place(Block &, unsigned);
        void unplace();
        bool is_placed() const { return !blocks.empty(); }
+       void stop_at(Block *);
        bool free_block(Block &);
        void free_noncritical_blocks();
+       const BlockIter &get_head_block() const;
+       const BlockIter &get_tail_block() const;
        int get_entry_to_block(const Block &) const;
        float get_reserved_distance() const;
 
@@ -147,14 +135,14 @@ private:
        void turnout_path_changed(Track &);
        void halt_event(bool);
        void block_reserved(const Block &, const Train *);
+public:
        void reserve_more();
+private:
        void check_turnout_paths(bool);
        float get_reserved_distance_until(const Block *, bool) const;
        void release_blocks();
        void release_blocks(BlockList::iterator, BlockList::iterator);
        void reverse_blocks(BlockList &) const;
-       bool advance_route(std::list<const Route *>::iterator &, Track &);
-       Route *create_lead_route(Route *, const Route *);
 };
 
 } // namespace R2C2