]> git.tdb.fi Git - r2c2.git/blobdiff - source/libmarklin/trafficmanager.cpp
Convert engineer to use mspgbase instead of SDL
[r2c2.git] / source / libmarklin / trafficmanager.cpp
index cc2089b32780fdcc210bea450265ef606b69ee55..096d675e8432aafbba37902cefa5200ecdcc7187 100644 (file)
@@ -1,9 +1,11 @@
+#include <msp/time/utils.h>
 #include "control.h"
 #include "layout.h"
 #include "trafficmanager.h"
 #include "turnout.h"
 
 using namespace std;
+using namespace Msp;
 
 namespace Marklin {
 
@@ -46,16 +48,16 @@ TrafficManager::~TrafficManager()
                delete *i;
 }
 
-Block *TrafficManager::get_block_by_track(const Track *t) const
+Block &TrafficManager::get_block_by_track(const Track &t) const
 {
        for(BlockSeq::const_iterator i=blocks.begin(); i!=blocks.end(); ++i)
        {
                const set<Track *> &tracks=(*i)->get_tracks();
-               if(tracks.count(const_cast<Track *>(t)))
-                       return *i;
+               if(tracks.count(const_cast<Track *>(&t)))
+                       return **i;
        }
 
-       return 0;
+       throw InvalidParameterValue("Unknown track");
 }
 
 void TrafficManager::add_train(Train *t)
@@ -64,6 +66,14 @@ void TrafficManager::add_train(Train *t)
                trains.push_back(t);
 }
 
+void TrafficManager::tick()
+{
+       Time::TimeStamp t=Time::now();
+
+       for(list<Train *>::iterator i=trains.begin(); i!=trains.end(); ++i)
+               (*i)->tick(t);
+}
+
 void TrafficManager::turnout_route_changed(unsigned, Turnout *)
 {
 }