]> git.tdb.fi Git - r2c2.git/blobdiff - source/libmarklin/trafficmanager.cpp
Add state loading and saving to engineer
[r2c2.git] / source / libmarklin / trafficmanager.cpp
index 6de46a2673b904b691d0e14f358a7aac2c46f4c3..4075415ac95fdbe703a3287ad0e1f8d6e586d2d0 100644 (file)
@@ -6,9 +6,12 @@ Distributed under the GPL
 */
 
 #include <algorithm>
+#include <msp/datafile/writer.h>
 #include <msp/time/utils.h>
+#include "catalogue.h"
 #include "control.h"
 #include "layout.h"
+#include "locotype.h"
 #include "tracktype.h"
 #include "trafficmanager.h"
 #include "turnout.h"
@@ -84,8 +87,37 @@ void TrafficManager::tick()
                (*i)->tick(t, dt);
 }
 
+void TrafficManager::save(const string &fn) const
+{
+       IO::BufferedFile out(fn, IO::M_WRITE);
+       DataFile::Writer writer(out);
+       for(list<Train *>::const_iterator i=trains.begin(); i!=trains.end(); ++i)
+       {
+               const Locomotive &loco=(*i)->get_locomotive();
+               DataFile::Statement st("train");
+               st.append(loco.get_type().get_article_number());
+               st.append(loco.get_address());
+               (*i)->save(st.sub);
+               writer.write(st);
+       }
+}
+
 void TrafficManager::turnout_route_changed(unsigned, Turnout *)
 {
 }
 
+
+TrafficManager::Loader::Loader(TrafficManager &tm):
+       DataFile::BasicLoader<TrafficManager>(tm)
+{
+       add("train", &Loader::train);
+}
+
+void TrafficManager::Loader::train(unsigned art_nr, unsigned addr)
+{
+       Locomotive *loco=new Locomotive(obj.layout.get_catalogue().get_locomotive(art_nr), obj.control, addr);
+       Train *trn=new Train(obj, *loco);
+       load_sub(*trn);
+}
+
 } // namespace Marklin