]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/train.h
TrainAI framework
[r2c2.git] / source / libr2c2 / train.h
index 99575bf541912fe679bd2c0a6bd66265f5eb4f48..59aa9dc022365be78823885a210f0431872dc48b 100644 (file)
@@ -1,7 +1,7 @@
 /* $Id$
 
 This file is part of R²C²
-Copyright © 2006-2010  Mikkosoft Productions, Mikko Rasa
+Copyright © 2006-2011  Mikkosoft Productions, Mikko Rasa
 Distributed under the GPL
 */
 
@@ -14,14 +14,16 @@ Distributed under the GPL
 #include "block.h"
 #include "blockiter.h"
 #include "controller.h"
+#include "trainai.h"
 
 namespace R2C2 {
 
 class ArticleNumber;
 class Route;
-class Timetable;
+class SpeedQuantizer;
 class Vehicle;
 class VehicleType;
+class Zone;
 
 class Train: public sigc::trackable
 {
@@ -39,7 +41,7 @@ public:
                void block(unsigned);
                void block_hint(unsigned);
                void name(const std::string &);
-               void real_speed(unsigned, float, float);
+               void quantized_speed();
                void route(const std::string &);
                void timetable();
                void vehicle(ArticleNumber);
@@ -48,7 +50,9 @@ public:
        sigc::signal<void, const std::string &> signal_name_changed;
        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;
 
@@ -61,15 +65,6 @@ private:
                RouteRef(const Route *, unsigned = 0);
        };
 
-       struct RealSpeed
-       {
-               float speed;
-               float weight;
-
-               RealSpeed();
-               void add(float, float);
-       };
-
        typedef std::list<BlockIter> BlockList;
 
        Layout &layout;
@@ -79,6 +74,7 @@ private:
        std::string name;
        int priority;
        const Train *yielding_to;
+       const Train *preceding_train;
        std::vector<Vehicle *> vehicles;
        BlockList blocks;
        BlockList::iterator cur_blocks_end;
@@ -87,7 +83,7 @@ private:
        bool reserving;
        bool advancing;
        Controller *controller;
-       Timetable *timetable;
+       std::list<TrainAI *> ais;
        bool active;
        unsigned current_speed_step;
        bool speed_changing;
@@ -101,7 +97,7 @@ private:
        Msp::Time::TimeStamp last_entry_time;
        float travel_dist;
        bool pure_speed;
-       std::vector<RealSpeed> real_speed;
+       SpeedQuantizer *speed_quantizer;
        bool accurate_position;
        float overshoot_dist;
 
@@ -118,6 +114,7 @@ public:
        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; }
 
        void add_vehicle(const VehicleType &);
@@ -135,11 +132,14 @@ public:
        bool get_function(unsigned) const;
        unsigned get_functions() const { return functions; }
 
-       void set_timetable(Timetable *);
-       Timetable *get_timetable() { return timetable; }
+       void add_ai(TrainAI &);
+       void remove_ai(TrainAI &);
+       TrainAI *get_tagged_ai(const std::string &);
+       void ai_message(const TrainAI::Message &);
 
        bool set_route(const Route *);
        bool go_to(Track &);
+       bool go_to(const Zone &);
        bool divert(Track &);
        const Route *get_route() const;
        void place(Block &, unsigned);