X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fengineer%2Fengineer.cpp;h=8c1738eb0603d4e152a20afe7344d5f4e1ba814d;hb=cb4dfc37dd2cd9e02de7f022fd7f8a1fc8e5ee3c;hp=61dd49a1c72d86136baa9fd462e05b2458b398e5;hpb=b261812f040caed52bc3de783e8bcb86b222a9ed;p=r2c2.git diff --git a/source/engineer/engineer.cpp b/source/engineer/engineer.cpp index 61dd49a..8c1738e 100644 --- a/source/engineer/engineer.cpp +++ b/source/engineer/engineer.cpp @@ -74,7 +74,8 @@ Engineer::Engineer(int argc, char **argv): layout.signal_emergency.connect(sigc::mem_fun(this, &Engineer::set_status)); const set &blocks = layout.get_all(); for(set::const_iterator i=blocks.begin(); i!=blocks.end(); ++i) - (*i)->get_sensor().signal_state_changed.connect(sigc::hide(sigc::bind(sigc::mem_fun(this, &Engineer::reset_block_color), sigc::ref(**i)))); + if(Sensor *sensor = (*i)->get_sensor()) + sensor->signal_state_changed.connect(sigc::hide(sigc::bind(sigc::mem_fun(this, &Engineer::reset_block_color), sigc::ref(**i)))); if(FS::exists(options.state_fn)) DataFile::load(layout, options.state_fn); @@ -206,7 +207,7 @@ void Engineer::tick() picking_entry = 0; delete picking_path; - picking_path = new Path3D(layout_3d.get_track(*track)); + picking_path = new Path3D(layout_3d.get(*track)); if(picking_entry>=0) picking_path->set_mask(picking_track->get_type().get_endpoint(picking_entry).paths); else @@ -304,7 +305,7 @@ void Engineer::axis_motion(unsigned axis, float value, float) void Engineer::view_all() { - const Layout3D::TrackMap &tracks = layout_3d.get_tracks(); + const Layout3D::ObjectMap &objects = layout_3d.get_all(); float view_aspect = float(window.get_width())/window.get_height(); float view_height = tan(camera.get_field_of_view()/2.0f)*2.0f; @@ -315,8 +316,8 @@ void Engineer::view_all() { Transform trans = Transform::rotation(-angle, Vector(0, 0, 1)); BoundingBox bbox; - for(Layout3D::TrackMap::const_iterator i=tracks.begin(); i!=tracks.end(); ++i) - bbox = bbox|trans.transform(i->second->get_track().get_bounding_box()); + for(Layout3D::ObjectMap::const_iterator i=objects.begin(); i!=objects.end(); ++i) + bbox = bbox|trans.transform(i->second->get_object().get_bounding_box()); const Vector &minp = bbox.get_minimum_point(); const Vector &maxp = bbox.get_maximum_point(); @@ -353,12 +354,14 @@ void Engineer::set_block_color(const Block &block, const GL::Color &color) { const set &tracks = block.get_tracks(); for(set::const_iterator i=tracks.begin(); i!=tracks.end(); ++i) - layout_3d.get_track(**i).get_path().set_color(color); + layout_3d.get(**i).get_path().set_color(color); } void Engineer::reset_block_color(const Block &block) { - bool active = block.get_sensor().get_state()>Sensor::INACTIVE; + bool active = false; + if(Sensor *sensor = block.get_sensor()) + active = sensor->get_state()>Sensor::INACTIVE; if(block.get_train()) { @@ -391,7 +394,7 @@ Object *Engineer::pick_object(const Vector &p) void Engineer::process_new_train(Train &train) { - Vehicle3D &loco3d = layout_3d.get_vehicle(train.get_vehicle(0)); + Vehicle3D &loco3d = layout_3d.get(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))); }