]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/timetable.h
Simplify some interfaces by using track and block iterators
[r2c2.git] / source / libr2c2 / timetable.h
index 9cfda68df5df05a2876e920169efafe6debf85fd..84a39cd9c92d04de396638baa84c0f9bc999fe07 100644 (file)
@@ -1,10 +1,3 @@
-/* $Id$
-
-This file is part of R²C²
-Copyright © 2010  Mikkosoft Productions, Mikko Rasa
-Distributed under the GPL
-*/
-
 #ifndef LIBR2C2_TIMETABLE_H_
 #define LIBR2C2_TIMETABLE_H_
 
@@ -12,14 +5,16 @@ Distributed under the GPL
 #include <vector>
 #include <sigc++/trackable.h>
 #include <msp/datafile/objectloader.h>
-#include <msp/time/timestamp.h>
+#include "block.h"
+#include "trainai.h"
 
 namespace R2C2 {
 
-class Block;
+class Track;
 class Train;
+class Zone;
 
-class Timetable: public sigc::trackable
+class Timetable: public TrainAI, public sigc::trackable
 {
 public:
        class Loader: public Msp::DataFile::ObjectLoader<Timetable>
@@ -28,20 +23,27 @@ public:
                Loader(Timetable &);
        private:
                void arrive();
-               void go_to(const std::string &);
+               void goto_sensor(unsigned);
+               void goto_sensor_str(const std::string &);
+               void goto_zone(const std::string &);
                void route(const std::string &);
                void reverse();
                void speed(unsigned);
-               void travel(const std::string &);
+               void travel_to(unsigned);
+               void travel_past(unsigned);
                void wait(unsigned);
-               void wait_train(unsigned, const std::string &);
+               void wait_train(unsigned, unsigned);
+               void wait_until(unsigned, unsigned);
        };
 
        enum RowType
        {
-               GOTO,
-               TRAVEL,
+               GOTO_SENSOR,
+               GOTO_ZONE,
+               TRAVEL_TO,
+               TRAVEL_PAST,
                WAIT_TIME,
+               WAIT_UNTIL,
                WAIT_TRAIN,
                ARRIVE,
                SPEED,
@@ -70,7 +72,6 @@ public:
        };
 
 private:
-       Train &train;
        bool enabled;
        std::vector<Row> rows;
        unsigned current_row;
@@ -78,6 +79,7 @@ private:
        Block *pending_block;
        Train *pending_train;
        Msp::Time::TimeStamp wait_timeout;
+       bool arrived;
 
 public:
        Timetable(Train &);
@@ -92,12 +94,16 @@ public:
        unsigned get_n_rows() const { return rows.size(); }
        const Row &get_row(unsigned) const;
 
-       void tick(const Msp::Time::TimeStamp &);
+       void tick(const Msp::Time::TimeStamp &, const Msp::Time::TimeDelta &);
        void save(std::list<Msp::DataFile::Statement> &) const;
 private:
-       Block &parse_location(const std::string &);
-       void sensor_event(unsigned, bool);
-       void train_arrived();
+       Block &get_sensor(unsigned);
+       Track &get_turnout(unsigned);
+       Zone &get_zone(const std::string &);
+       void block_state_changed(Block &, Block::State);
+       void block_reserved(Block &, Train *);
+       void train_advanced(Block &);
+       void event(TrainAI &, const Message &);
 };
 
 } // namespace R2C2