]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/train.h
TrainAI framework
[r2c2.git] / source / libr2c2 / train.h
index 48ee867a597c7c22e56045dc88df27a7b29bf88c..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,12 +14,13 @@ 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;
@@ -40,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);
@@ -49,6 +50,7 @@ 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;
@@ -63,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;
@@ -90,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;
@@ -104,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;
 
@@ -139,8 +132,10 @@ 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 &);