]> 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 ea5139d5b2e9d9e94cc7ebbdd2455bf72f959c2d..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"
@@ -74,6 +76,7 @@ Engineer::Engineer(int argc, char **argv):
 
        layout.signal_train_added.connect(sigc::mem_fun(this, &Engineer::train_added));
        layout.signal_block_reserved.connect(sigc::mem_fun(this, &Engineer::block_reserved));
+       layout.get_driver().signal_sensor.connect(sigc::mem_fun(this, &Engineer::sensor_event));
        if(FS::exists("engineer.state"))
                DataFile::load(layout, "engineer.state");
 
@@ -83,8 +86,6 @@ Engineer::Engineer(int argc, char **argv):
                server->use_event_dispatcher(event_disp);
        }
 
-       layout.get_driver().signal_sensor.connect(sigc::mem_fun(this, &Engineer::sensor_event));
-
        // Setup 3D view
        DataFile::load(arrow_mesh, "arrow.mesh");
 
@@ -113,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)
@@ -241,14 +242,11 @@ void Engineer::button_press(int x, int y, unsigned btn, unsigned)
                                        track.set_active_path(i);
                                }
                        }
-                       /*else if(simulate)
+                       else if(options.simulate)
                        {
-                               if(unsigned sid=track->get_track().get_sensor_id())
-                               {
-                                       Sensor &sensor = control.get_sensor(sid);
-                                       control.signal_sensor_event.emit(sid, !sensor.get_state());
-                               }
-                       }*/
+                               if(unsigned sid=track.get_sensor_id())
+                                       layout.get_driver().set_sensor(sid, !layout.get_driver().get_sensor(sid));
+                       }
                }
        }
 }
@@ -395,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;
@@ -435,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);
        }