X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FSound%2Ffg_fx.cxx;h=d3a050426b62c903b35a230c72520b2f493ebbc3;hb=e88e821567cc6bb6214fa0b9ee13b52e74b24ffa;hp=683f882de828698c38fcc625dcc718c57744acb0;hpb=7d37f6af585cf45a4f76925c9de1847923863555;p=flightgear.git diff --git a/src/Sound/fg_fx.cxx b/src/Sound/fg_fx.cxx index 683f882de..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,14 +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); - _avionics = _smgr->find("avionics", true); - _avionics->tie_to_listener(); + if (!_is_aimodel) + { + _avionics = _smgr->find("avionics", true); + _avionics->tie_to_listener(); + } } +void FGFX::unbind() +{ + if (_smgr) + { + _smgr->remove(_refname); + } +} FGFX::~FGFX () { @@ -81,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; @@ -134,23 +153,27 @@ FGFX::reinit() } _sound.clear(); init(); -}; +} void FGFX::update (double dt) { + if (!_smgr) { + return; + } + if ( _enabled->getBoolValue() ) { - if ( _avionics_enabled->getBoolValue() && - (_avionics_ext->getBoolValue() || - _internal->getBoolValue())) + if ( _avionics_enabled->getBoolValue()) { - // avionics sound is enabled - _avionics->resume(); // no-op if already in resumed state - _avionics->set_volume( _avionics_volume->getFloatValue() ); + 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(); } - else - _avionics->suspend(); set_volume( _volume->getDoubleValue() ); resume();