X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Ftimetable.h;h=1bf8f4fe6c0b000db6823edb1f699dc369010682;hb=34f8bf04e4bdffefeceea59b186386b51c542b9d;hp=ea3ff0b45e78aa79fd91bced272ec0498d73cbe6;hpb=9a4aeac8f8278eea6cbd67addfb76ace8c937e3c;p=r2c2.git diff --git a/source/libr2c2/timetable.h b/source/libr2c2/timetable.h index ea3ff0b..1bf8f4f 100644 --- a/source/libr2c2/timetable.h +++ b/source/libr2c2/timetable.h @@ -1,7 +1,7 @@ /* $Id$ This file is part of R²C² -Copyright © 2010 Mikkosoft Productions, Mikko Rasa +Copyright © 2010-2011 Mikkosoft Productions, Mikko Rasa Distributed under the GPL */ @@ -12,7 +12,7 @@ Distributed under the GPL #include #include #include -#include +#include "trainai.h" namespace R2C2 { @@ -21,7 +21,7 @@ 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 @@ -31,12 +31,14 @@ public: private: void arrive(); void goto_sensor(unsigned); - void goto_sensor(const std::string &); + 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 tag(const std::string &); + void travel_to(unsigned); + void travel_past(unsigned); void wait(unsigned); void wait_train(unsigned, unsigned); void wait_until(unsigned, unsigned); @@ -46,7 +48,8 @@ public: { GOTO_SENSOR, GOTO_ZONE, - TRAVEL, + TRAVEL_TO, + TRAVEL_PAST, WAIT_TIME, WAIT_UNTIL, WAIT_TRAIN, @@ -77,7 +80,6 @@ public: }; private: - Train &train; bool enabled; std::vector rows; unsigned current_row; @@ -85,6 +87,7 @@ private: Block *pending_block; Train *pending_train; Msp::Time::TimeStamp wait_timeout; + bool arrived; public: Timetable(Train &); @@ -99,12 +102,15 @@ 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 &) const; private: Track &get_sensor(unsigned); + Track &get_turnout(unsigned); Zone &get_zone(const std::string &); void sensor_event(unsigned, bool); + void block_reserved(Block &, Train *); + void train_advanced(Block &); void train_arrived(); };