]> git.tdb.fi Git - r2c2.git/blobdiff - source/libr2c2/train.cpp
Avoid nested block reservations completely
[r2c2.git] / source / libr2c2 / train.cpp
index b1fbc6a76ebb1bf4ad02f85d981f465fef1a1759..889f21e70fa0940a4ddbfb4075660616cc03153a 100644 (file)
@@ -327,6 +327,8 @@ void Train::tick(const Time::TimeDelta &dt)
 
        Driver &driver = layout.get_driver();
 
+       allocator.tick();
+
        bool intent_to_move = false;
        for(list<TrainAI *>::iterator i=ais.begin(); i!=ais.end(); ++i)
        {
@@ -417,6 +419,10 @@ void Train::save(list<DataFile::Statement> &st) const
                st.push_back(ss);
        }
 
+       const VehicleType::FunctionMap &func_map = loco_type.get_functions();
+       for(VehicleType::FunctionMap::const_iterator i=func_map.begin(); i!=func_map.end(); ++i)
+               st.push_back((DataFile::Statement("function"), i->first, static_cast<bool>(functions&(1<<i->first))));
+
        // XXX Need more generic way of saving AI state
        for(list<TrainAI *>::const_iterator i=ais.begin(); i!=ais.end(); ++i)
        {
@@ -593,6 +599,7 @@ Train::Loader::Loader(Train &t):
        blocks_valid(true)
 {
        add("blocks",      &Loader::blocks);
+       add("function",    &Loader::function);
        add("name",        &Loader::name);
        add("quantized_speed",  &Loader::quantized_speed);
        add("router",      &Loader::router);
@@ -615,6 +622,11 @@ void Train::Loader::blocks()
        load_sub(obj.allocator);
 }
 
+void Train::Loader::function(unsigned f, bool s)
+{
+       obj.set_function(f, s);
+}
+
 void Train::Loader::name(const string &n)
 {
        obj.set_name(n);