]> git.tdb.fi Git - r2c2.git/blobdiff - source/engineer/engineer.cpp
Foundations of using physics simulation for trains
[r2c2.git] / source / engineer / engineer.cpp
index 4a35c8e0cd381bc6307f24e828c8352d68152239..92f0f0f419e451c98676597f9954b216c0717b42 100644 (file)
@@ -27,6 +27,8 @@ Distributed under the GPL
 #include "libmarklin/driver.h"
 #include "libmarklin/tracktype.h"
 #include "3d/path.h"
+#include "3d/track.h"
+#include "3d/vehicle.h"
 #include "engineer.h"
 #include "mainpanel.h"
 #include "trainpanel.h"
@@ -112,7 +114,7 @@ Engineer::~Engineer()
 {
        const map<unsigned, Train *> &trains = layout.get_trains();
        for(map<unsigned, Train *>::const_iterator i=trains.begin(); i!=trains.end(); ++i)
-               i->second->set_speed(0);
+               layout.get_driver().set_loco_speed(i->first, 0);
        layout.get_driver().flush();
 
        if(!options.simulate)
@@ -391,9 +393,9 @@ void Engineer::train_added(Train &train)
        train_panels.push_back(tpanel);
        tpanel->set_visible(true);
 
-       Train3D &t3d = layout_3d.get_train(train);
-       overlay->set_label(t3d, train.get_name());
-       train.signal_name_changed.connect(sigc::bind<0>(sigc::mem_fun(overlay, &Overlay3D::set_label), sigc::ref(t3d)));
+       Vehicle3D &loco3d = layout_3d.get_vehicle(train.get_vehicle(0));
+       overlay->set_label(loco3d, train.get_name());
+       train.signal_name_changed.connect(sigc::bind<0>(sigc::mem_fun(overlay, &Overlay3D::set_label), sigc::ref(loco3d)));
 
        GL::Color best_color;
        float best_d_sq = 0;
@@ -431,7 +433,7 @@ void Engineer::sighandler(int sig)
                IO::print(IO::cerr, "Fatal signal received, terminating\n");
                const map<unsigned, Train *> &trains = layout.get_trains();
                for(map<unsigned, Train *>::const_iterator i=trains.begin(); i!=trains.end(); ++i)
-                       i->second->set_speed(0);
+                       layout.get_driver().set_loco_speed(i->first, 0);
                layout.get_driver().flush();
                raise(sig);
        }