Update tile loader options whenever its config properties change
New listener for tile-loader properties.
This commit is contained in:
parent
45f526aca5
commit
4a351fdd8b
2 changed files with 42 additions and 3 deletions
|
@ -52,10 +52,33 @@ using simgear::SGModelLib;
|
||||||
using simgear::TileEntry;
|
using simgear::TileEntry;
|
||||||
using simgear::TileCache;
|
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():
|
FGTileMgr::FGTileMgr():
|
||||||
state( Start ),
|
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
|
// remove all nodes we might have left behind
|
||||||
osg::Group* group = globals->get_scenery()->get_terrain_branch();
|
osg::Group* group = globals->get_scenery()->get_terrain_branch();
|
||||||
group->removeChildren(0, group->getNumChildren());
|
group->removeChildren(0, group->getNumChildren());
|
||||||
|
delete _propListener;
|
||||||
|
_propListener = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -72,8 +97,11 @@ void FGTileMgr::init() {
|
||||||
|
|
||||||
_options = new SGReaderWriterBTGOptions;
|
_options = new SGReaderWriterBTGOptions;
|
||||||
_options->setMatlib(globals->get_matlib());
|
_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();
|
osgDB::FilePathList &fp = _options->getDatabasePathList();
|
||||||
const string_list &sc = globals->get_fg_scenery();
|
const string_list &sc = globals->get_fg_scenery();
|
||||||
fp.clear();
|
fp.clear();
|
||||||
|
@ -101,6 +129,11 @@ void FGTileMgr::reinit()
|
||||||
update(0.0);
|
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.
|
/* schedule a tile for loading, keep request for given amount of time.
|
||||||
* Returns true if tile is already loaded. */
|
* Returns true if tile is already loaded. */
|
||||||
|
|
|
@ -81,6 +81,9 @@ private:
|
||||||
void update_queues();
|
void update_queues();
|
||||||
|
|
||||||
SGPropertyNode* _visibilityMeters;
|
SGPropertyNode* _visibilityMeters;
|
||||||
|
SGPropertyChangeListener* _propListener;
|
||||||
|
SGPropertyNode_ptr _randomObjects;
|
||||||
|
SGPropertyNode_ptr _randomVegetation;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
FGTileMgr();
|
FGTileMgr();
|
||||||
|
@ -93,6 +96,9 @@ public:
|
||||||
|
|
||||||
virtual void update(double dt);
|
virtual void update(double dt);
|
||||||
|
|
||||||
|
// update loader configuration options
|
||||||
|
void configChanged();
|
||||||
|
|
||||||
int schedule_tiles_at(const SGGeod& location, double rangeM);
|
int schedule_tiles_at(const SGGeod& location, double rangeM);
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue