X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Ftimetable.h;h=84a39cd9c92d04de396638baa84c0f9bc999fe07;hb=54392d65e2053d1eacb4cfcc435f1013993f2973;hp=9cfda68df5df05a2876e920169efafe6debf85fd;hpb=1ff06c5bc46a677fa389ef86c6b26664368f1653;p=r2c2.git diff --git a/source/libr2c2/timetable.h b/source/libr2c2/timetable.h index 9cfda68..84a39cd 100644 --- a/source/libr2c2/timetable.h +++ b/source/libr2c2/timetable.h @@ -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 #include #include -#include +#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 @@ -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 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 &) 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