X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FSound%2Ffg_fx.cxx;h=d3a050426b62c903b35a230c72520b2f493ebbc3;hb=e88e821567cc6bb6214fa0b9ee13b52e74b24ffa;hp=a9eaa99f1e0a883a0ad32d3eac4b8965f2939855;hpb=9491c2ea76f361ea31851766f216749d1386eec8;p=flightgear.git diff --git a/src/Sound/fg_fx.cxx b/src/Sound/fg_fx.cxx index a9eaa99f1..d3a050426 100644 --- a/src/Sound/fg_fx.cxx +++ b/src/Sound/fg_fx.cxx @@ -32,6 +32,7 @@ #include "fg_fx.hxx" #include
+#include
#include #include @@ -39,7 +40,7 @@ #include #include -FGFX::FGFX ( SGSoundMgr *smgr, const string &refname, SGPropertyNode *props ) : +FGFX::FGFX ( const std::string &refname, SGPropertyNode *props ) : _props( props ) { if (!props) { @@ -60,17 +61,28 @@ FGFX::FGFX ( SGSoundMgr *smgr, const string &refname, SGPropertyNode *props ) : _avionics_ext = _props->getNode("sim/sound/avionics/external-view", true); _internal = _props->getNode("sim/current-view/internal", true); - SGSampleGroup::_smgr = smgr; - SGSampleGroup::_refname = refname; - SGSampleGroup::_smgr->add(this, refname); + _smgr = globals->get_soundmgr(); + if (!_smgr) { + return; + } + + _refname = refname; + _smgr->add(this, refname); - if (_avionics_enabled->getBoolValue()) + if (!_is_aimodel) { _avionics = _smgr->find("avionics", true); _avionics->tie_to_listener(); } } +void FGFX::unbind() +{ + if (_smgr) + { + _smgr->remove(_refname); + } +} FGFX::~FGFX () { @@ -84,9 +96,13 @@ FGFX::~FGFX () void FGFX::init() { + if (!_smgr) { + return; + } + SGPropertyNode *node = _props->getNode("sim/sound", true); - string path_str = node->getStringValue("path"); + std::string path_str = node->getStringValue("path"); if (path_str.empty()) { SG_LOG(SG_SOUND, SG_ALERT, "No path in sim/sound/path"); return; @@ -137,29 +153,28 @@ FGFX::reinit() } _sound.clear(); init(); -}; +} void FGFX::update (double dt) { - bool active = _avionics_ext->getBoolValue() || - _internal->getBoolValue(); - - if (_avionics_enabled->getBoolValue()) { - if (!_avionics) { - _avionics = _smgr->find("avionics", true); - _avionics->tie_to_listener(); - } - - if ( active ) - _avionics->resume(); // no-op if already in resumed state - else - _avionics->suspend(); - _avionics->set_volume( _avionics_volume->getFloatValue() ); + if (!_smgr) { + return; } - + if ( _enabled->getBoolValue() ) { + if ( _avionics_enabled->getBoolValue()) + { + if (_avionics_ext->getBoolValue() || _internal->getBoolValue()) { + // avionics sound is enabled + _avionics->resume(); // no-op if already in resumed state + _avionics->set_volume( _avionics_volume->getFloatValue() ); + } + else + _avionics->suspend(); + } + set_volume( _volume->getDoubleValue() ); resume();