]> git.tdb.fi Git - r2c2.git/blobdiff - source/libmarklin/trafficmanager.cpp
Take z coordinate into account when computing points on tracks
[r2c2.git] / source / libmarklin / trafficmanager.cpp
index 069731e060ae3a80e741a754fa83519af0b6da59..b652d04cc5eeddb483ae9eb6792b9725f9240ca6 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)
                {
@@ -69,10 +70,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 +115,7 @@ void TrafficManager::save(const string &fn) const
        }
 }
 
-void TrafficManager::turnout_route_changed(unsigned, Turnout *)
+void TrafficManager::turnout_path_changed(unsigned, Turnout *)
 {
 }