]> git.mxchange.org Git - flightgear.git/commitdiff
Update tile loader options whenever its config properties change
authorThorstenB <brehmt@gmail.com>
Sun, 13 Feb 2011 17:56:46 +0000 (18:56 +0100)
committerThorstenB <brehmt@gmail.com>
Sun, 13 Feb 2011 18:26:44 +0000 (19:26 +0100)
New listener for tile-loader properties.

src/Scenery/tilemgr.cxx
src/Scenery/tilemgr.hxx

index 81e84bfe6af86b45f63c8f37170f5d90c40c8311..adc200b86e8d44d7b4ed6d9cbb2a13baf9db58d9 100644 (file)
@@ -52,10 +52,33 @@ using simgear::SGModelLib;
 using simgear::TileEntry;
 using simgear::TileCache;
 
+
+// helper: listen to property changes affecting tile loading
+class LoaderPropertyWatcher : public SGPropertyChangeListener
+{
+public:
+    LoaderPropertyWatcher(FGTileMgr* pTileMgr) :
+        _pTileMgr(pTileMgr)
+    {
+    }
+
+    virtual void valueChanged(SGPropertyNode*)
+    {
+        _pTileMgr->configChanged();
+    }
+
+private:
+    FGTileMgr* _pTileMgr;
+};
+
+
 FGTileMgr::FGTileMgr():
     state( Start ),
-    vis( 16000 )
+    vis( 16000 ),
+    _propListener(new LoaderPropertyWatcher(this))
 {
+    _randomObjects = fgGetNode("/sim/rendering/random-objects", true);
+    _randomVegetation = fgGetNode("/sim/rendering/random-vegetation", true);
 }
 
 
@@ -63,6 +86,8 @@ FGTileMgr::~FGTileMgr() {
     // remove all nodes we might have left behind
     osg::Group* group = globals->get_scenery()->get_terrain_branch();
     group->removeChildren(0, group->getNumChildren());
+    delete _propListener;
+    _propListener = NULL;
 }
 
 
@@ -72,8 +97,11 @@ void FGTileMgr::init() {
 
     _options = new SGReaderWriterBTGOptions;
     _options->setMatlib(globals->get_matlib());
-    _options->setUseRandomObjects(fgGetBool("/sim/rendering/random-objects", true));
-    _options->setUseRandomVegetation(fgGetBool("/sim/rendering/random-vegetation", true));
+
+    _randomObjects.get()->addChangeListener(_propListener, false);
+    _randomVegetation.get()->addChangeListener(_propListener, false);
+    configChanged();
+
     osgDB::FilePathList &fp = _options->getDatabasePathList();
     const string_list &sc = globals->get_fg_scenery();
     fp.clear();
@@ -101,6 +129,11 @@ void FGTileMgr::reinit()
     update(0.0);
 }
 
+void FGTileMgr::configChanged()
+{
+    _options->setUseRandomObjects(_randomObjects.get()->getBoolValue());
+    _options->setUseRandomVegetation(_randomVegetation.get()->getBoolValue());
+}
 
 /* schedule a tile for loading, keep request for given amount of time.
  * Returns true if tile is already loaded. */
index 048fe7692320b3a462eb86f7d8beaa9508659233..6b4a4e7ef5bfbae3357a83365466c371ce34c764 100644 (file)
@@ -81,6 +81,9 @@ private:
     void update_queues();
     
     SGPropertyNode* _visibilityMeters;
+    SGPropertyChangeListener* _propListener;
+    SGPropertyNode_ptr _randomObjects;
+    SGPropertyNode_ptr _randomVegetation;
     
 public:
     FGTileMgr();
@@ -93,6 +96,9 @@ public:
 
     virtual void update(double dt);
 
+    // update loader configuration options
+    void configChanged();
+
     int schedule_tiles_at(const SGGeod& location, double rangeM);