]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/timetable.cpp
TrainAI framework
[r2c2.git] / source / libr2c2 / timetable.cpp
index 4a78bcafadab289f5e2f88a4004d449b4e32fe06..c2a86a6e23db26d4da3dda44de08d79e715b7a2c 100644 (file)
@@ -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());
 }
@@ -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));