]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/timetable.cpp
Remove status from Train and turn it into a TrainAI
[r2c2.git] / source / libr2c2 / timetable.cpp
index 670114cdd4454fab36d1be60355a8b22bab2631e..c2a86a6e23db26d4da3dda44de08d79e715b7a2c 100644 (file)
@@ -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
 */
 
@@ -20,7 +20,7 @@ using namespace Msp;
 namespace R2C2 {
 
 Timetable::Timetable(Train &t):
-       train(t),
+       TrainAI(t),
        enabled(false),
        current_row(0),
        executing(true),
@@ -76,7 +76,7 @@ const Timetable::Row &Timetable::get_row(unsigned i) const
        return rows[i];
 }
 
-void Timetable::tick(const Time::TimeStamp &t)
+void Timetable::tick(const Time::TimeStamp &t, const Time::TimeDelta &)
 {
        if(rows.empty() || !enabled)
                return;
@@ -138,10 +138,13 @@ void Timetable::tick(const Time::TimeStamp &t)
                        break;
                case SPEED:
                        if(!arrived)
-                               train.set_control("speed", row.get_param<unsigned>(0)/3.6*train.get_layout().get_catalogue().get_scale());
+                       {
+                               float speed = row.get_param<unsigned>(0)/3.6*train.get_layout().get_catalogue().get_scale();
+                               train.ai_message(Message("set-target-speed", speed));
+                       }
                        break;
                case REVERSE:
-                       train.set_control("reverse", !train.get_control("reverse"));
+                       train.ai_message(Message("toggle-reverse"));
                        break;
                case ROUTE:
                        if(!train.set_route(&train.get_layout().get_route(row.get_param<string>(0))))
@@ -156,6 +159,8 @@ void Timetable::tick(const Time::TimeStamp &t)
 
 void Timetable::save(list<DataFile::Statement> &st) const
 {
+       if(!tag.empty())
+               st.push_back((DataFile::Statement("tag"), tag));
        for(vector<Row>::const_iterator i=rows.begin(); i!=rows.end(); ++i)
                st.push_back(i->save());
 }
@@ -249,7 +254,7 @@ string Timetable::Row::str() const
        switch(type)
        {
        case GOTO_SENSOR:
-               return "set route to sensor "+get_param<unsigned>(0);
+               return format("set route to sensor %d", get_param<unsigned>(0));
        case GOTO_ZONE:
                return "set route to "+get_param<string>(0);
        case TRAVEL_TO:
@@ -392,6 +397,7 @@ Timetable::Loader::Loader(Timetable &tt):
        add("route",       &Loader::route);
        add("speed",       &Loader::speed);
        add("reverse",     &Loader::reverse);
+       add("tag",         &Loader::tag);
        add("travel_to",   &Loader::travel_to);
        add("travel_past", &Loader::travel_past);
        add("wait",        &Loader::wait);
@@ -439,6 +445,11 @@ void Timetable::Loader::speed(unsigned s)
        obj.rows.push_back(Row(SPEED, s));
 }
 
+void Timetable::Loader::tag(const string &t)
+{
+       obj.tag = t;
+}
+
 void Timetable::Loader::travel_to(unsigned s)
 {
        obj.rows.push_back(Row(TRAVEL_TO, s));