]> git.tdb.fi Git - r2c2.git/blobdiff - source/libmarklin/trafficmanager.cpp
Forgot to add the new files
[r2c2.git] / source / libmarklin / trafficmanager.cpp
index 069731e060ae3a80e741a754fa83519af0b6da59..49dda42954d05ccdcb8b58f067899743111c4dbf 100644 (file)
@@ -31,9 +31,10 @@ TrafficManager::TrafficManager(Control &c, Layout &l):
        for(set<Track *>::const_iterator i=tracks.begin(); i!=tracks.end(); ++i)
        {
                if(unsigned tid=(*i)->get_turnout_id())
-                       new Turnout(control, tid, (*i)->get_type().get_n_routes()>=3);
+                       new Turnout(control, tid, (*i)->get_type().get_n_paths()>=3);
                if(unsigned sid=(*i)->get_sensor_id())
-                       new Sensor(control, sid);
+                       if(!control.get_sensors().count(sid))
+                               new Sensor(control, sid);
 
                if(used_tracks.count(*i)==0)
                {
@@ -57,6 +58,15 @@ TrafficManager::~TrafficManager()
                delete *i;
 }
 
+Block &TrafficManager::get_block(unsigned id) const
+{
+       for(list<Block *>::const_iterator i=blocks.begin(); i!=blocks.end(); ++i)
+               if((*i)->get_id()==id)
+                       return **i;
+
+       throw KeyError("Unknown block", lexical_cast(id));
+}
+
 Block &TrafficManager::get_block_by_track(const Track &t) const
 {
        for(list<Block *>::const_iterator i=blocks.begin(); i!=blocks.end(); ++i)
@@ -69,10 +79,22 @@ Block &TrafficManager::get_block_by_track(const Track &t) const
        throw InvalidParameterValue("Unknown track");
 }
 
+Train &TrafficManager::get_train_by_locomotive(const Locomotive &loco) const
+{
+       for(list<Train *>::const_iterator i=trains.begin(); i!=trains.end(); ++i)
+               if(&(*i)->get_locomotive()==&loco)
+                       return **i;
+
+       throw InvalidParameterValue("Unknown locomotive");
+}
+
 void TrafficManager::add_train(Train *t)
 {
        if(find(trains.begin(), trains.end(), t)==trains.end())
+       {
                trains.push_back(t);
+               signal_train_added.emit(*t);
+       }
 }
 
 void TrafficManager::tick()
@@ -102,7 +124,7 @@ void TrafficManager::save(const string &fn) const
        }
 }
 
-void TrafficManager::turnout_route_changed(unsigned, Turnout *)
+void TrafficManager::turnout_path_changed(unsigned, Turnout *)
 {
 }