]> git.mxchange.org Git - flightgear.git/commitdiff
Reapply canvas placements upon aircraft-model reinit
authorThomas Geymayer <tomgey@gmail.com>
Wed, 6 Feb 2013 00:22:44 +0000 (01:22 +0100)
committerThomas Geymayer <tomgey@gmail.com>
Wed, 6 Feb 2013 00:23:06 +0000 (01:23 +0100)
src/Canvas/canvas_mgr.cxx
src/Canvas/canvas_mgr.hxx
src/Model/acmodel.cxx

index ca4515e9a09d949323e58c53dead2d761e73ed29..8da7a5a85494fbf2f0adff8e4b583dad9e3e39df 100644 (file)
 
 #include <simgear/canvas/Canvas.hxx>
 
+using simgear::canvas::Canvas;
+
 //------------------------------------------------------------------------------
 CanvasMgr::CanvasMgr():
   simgear::canvas::CanvasMgr
   (
    fgGetNode("/canvas/by-index", true),
    simgear::canvas::SystemAdapterPtr( new canvas::FGCanvasSystemAdapter )
+  ),
+  _cb_model_reinit
+  (
+    this,
+    &CanvasMgr::handleModelReinit,
+    fgGetNode("/sim/signals/model-reinit", true)
   )
 {
-  using simgear::canvas::Canvas;
   Canvas::addPlacementFactory
   (
     "object",
@@ -75,3 +82,11 @@ CanvasMgr::getCanvasTexId(const simgear::canvas::CanvasPtr& canvas) const
 
   return tobj->_id;
 }
+
+//----------------------------------------------------------------------------
+void CanvasMgr::handleModelReinit(SGPropertyNode*)
+{
+  for(size_t i = 0; i < _elements.size(); ++i)
+    boost::static_pointer_cast<Canvas>(_elements[i])
+      ->reloadPlacements("object");
+}
index fd4768c34d526d25ef2833f0b160358f27c2a4a9..c1bf7e7858f1639615513ac0f1a6d78725211693 100644 (file)
@@ -38,6 +38,12 @@ class CanvasMgr:
      * @return OpenGL texture name
      */
     unsigned int getCanvasTexId(const simgear::canvas::CanvasPtr& canvas) const;
+
+  protected:
+
+    SGPropertyChangeCallback<CanvasMgr> _cb_model_reinit;
+
+    void handleModelReinit(SGPropertyNode*);
 };
 
 #endif /* CANVAS_MGR_H_ */
index b585df0600a1f6454f6bb505980dc117d7ea2614..c25802f4ff115611a3a5b8bdbed0541135ae8d86 100644 (file)
@@ -102,6 +102,8 @@ FGAircraftModel::reinit()
   deinit();
   _fx->reinit();
   init();
+  // TODO globally create signals for all subsystems (re)initialized
+  fgSetBool("/sim/signals/model-reinit", true);
 }
 
 void