]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/train.h
Get rid of the TrainAI tagging system
[r2c2.git] / source / libr2c2 / train.h
index 709140c9a6102e3dcb61a94ffc130894dfb10baf..461a27e583146bde1080e64acbb6384b0c33a3e6 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,12 @@ 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 +69,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 +87,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; }
 
@@ -121,18 +109,25 @@ public:
 
        void add_ai(TrainAI &);
        void remove_ai(TrainAI &);
-       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;
+       template<typename T>
+       T *get_ai_of_type() const
+       {
+               for(std::list<TrainAI *>::const_iterator i=ais.begin(); i!=ais.end(); ++i)
+                       if(T *ai = dynamic_cast<T *>(*i))
+                               return ai;
+               return 0;
+       }
+
        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 +142,13 @@ private:
        void turnout_path_changed(Track &);
        void halt_event(bool);
        void block_reserved(const Block &, const Train *);
+public:
        void reserve_more();
-       void check_turnout_paths(bool);
+private:
        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