From 575f576aa90d8d22a857ccbb5e9f2c2e79a0db50 Mon Sep 17 00:00:00 2001 From: ThorstenB Date: Fri, 5 Oct 2012 00:17:28 +0200 Subject: [PATCH] Revive master sound enable switch. --- src/Sound/soundmanager.cxx | 67 +++++++++++++++++++++++--------------- src/Sound/soundmanager.hxx | 2 +- 2 files changed, 41 insertions(+), 28 deletions(-) diff --git a/src/Sound/soundmanager.cxx b/src/Sound/soundmanager.cxx index 2a41ade13..fd4224acd 100644 --- a/src/Sound/soundmanager.cxx +++ b/src/Sound/soundmanager.cxx @@ -47,6 +47,7 @@ void Listener::valueChanged(SGPropertyNode * node) FGSoundManager::FGSoundManager() : _is_initialized(false), + _enabled(false), _listener(new Listener(this)) { SGPropertyNode_ptr scenery_loaded = fgGetNode("sim/sceneryloaded", true); @@ -64,14 +65,14 @@ void FGSoundManager::init() _volume = fgGetNode("/sim/sound/volume"); _device_name = fgGetNode("/sim/sound/device-name"); - _currentView = fgGetNode("sim/current-view"); + _currentView = fgGetNode("sim/current-view"); _viewPosLon = fgGetNode("sim/current-view/viewer-lon-deg"); _viewPosLat = fgGetNode("sim/current-view/viewer-lat-deg"); _viewPosElev = fgGetNode("sim/current-view/viewer-elev-ft"); _velocityNorthFPS = fgGetNode("velocities/speed-north-fps", true); - _velocityEastFPS = fgGetNode("velocities/speed-east-fps", true); - _velocityDownFPS = fgGetNode("velocities/speed-down-fps", true); + _velocityEastFPS = fgGetNode("velocities/speed-east-fps", true); + _velocityDownFPS = fgGetNode("velocities/speed-down-fps", true); reinit(); } @@ -136,33 +137,45 @@ bool FGSoundManager::stationary() const // Actual sound update is triggered by the subsystem manager. void FGSoundManager::update(double dt) { - if (_is_initialized && _sound_working->getBoolValue() && _sound_enabled->getBoolValue()) + if (_is_initialized && _sound_working->getBoolValue()) { - SGGeod viewPosGeod(SGGeod::fromDegFt(_viewPosLon->getDoubleValue(), - _viewPosLat->getDoubleValue(), - _viewPosElev->getDoubleValue())); - SGVec3d cartPos = SGVec3d::fromGeod(viewPosGeod); - - set_position(cartPos, viewPosGeod); - - SGQuatd viewOrientation; - for (int i=0; i<4; ++i) { - viewOrientation[i] = _currentView->getChild("raw-orientation", i, true)->getDoubleValue(); + bool enabled = _sound_enabled->getBoolValue(); + if (enabled != _enabled) + { + if (enabled) + resume(); + else + suspend(); + _enabled = enabled; } - - set_orientation( viewOrientation ); - - SGVec3d velocity(SGVec3d::zeros()); - if (!stationary()) { - velocity = SGVec3d(_velocityNorthFPS->getDoubleValue(), - _velocityEastFPS->getDoubleValue(), - _velocityDownFPS->getDoubleValue() ); + if (enabled) + { + SGGeod viewPosGeod(SGGeod::fromDegFt(_viewPosLon->getDoubleValue(), + _viewPosLat->getDoubleValue(), + _viewPosElev->getDoubleValue())); + SGVec3d cartPos = SGVec3d::fromGeod(viewPosGeod); + + set_position(cartPos, viewPosGeod); + + SGQuatd viewOrientation; + for (int i=0; i<4; ++i) { + viewOrientation[i] = _currentView->getChild("raw-orientation", i, true)->getDoubleValue(); + } + + set_orientation( viewOrientation ); + + SGVec3d velocity(SGVec3d::zeros()); + if (!stationary()) { + velocity = SGVec3d(_velocityNorthFPS->getDoubleValue(), + _velocityEastFPS->getDoubleValue(), + _velocityDownFPS->getDoubleValue() ); + } + + set_velocity( velocity ); + + set_volume(_volume->getFloatValue()); + SGSoundMgr::update(dt); } - - set_velocity( velocity ); - - set_volume(_volume->getFloatValue()); - SGSoundMgr::update(dt); } } diff --git a/src/Sound/soundmanager.hxx b/src/Sound/soundmanager.hxx index e9edbd7d3..b68983355 100644 --- a/src/Sound/soundmanager.hxx +++ b/src/Sound/soundmanager.hxx @@ -48,7 +48,7 @@ public: private: bool stationary() const; - bool _is_initialized; + bool _is_initialized, _enabled; SGPropertyNode_ptr _sound_working, _sound_enabled, _volume, _device_name; SGPropertyNode_ptr _currentView; SGPropertyNode_ptr _viewPosLon, _viewPosLat, _viewPosElev; -- 2.39.5