From 09926a86cbfd0032d3c4b401f8aaf0aecccd17ff Mon Sep 17 00:00:00 2001 From: scrawl Date: Wed, 25 Jun 2014 18:10:26 +0200 Subject: [PATCH] Fix comparing outdated listener position with up-to-date cell (Fixes #1499) --- apps/openmw/mwsound/soundmanagerimp.cpp | 13 ++++++++----- apps/openmw/mwsound/soundmanagerimp.hpp | 1 + 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/apps/openmw/mwsound/soundmanagerimp.cpp b/apps/openmw/mwsound/soundmanagerimp.cpp index 35b8579d79..200c50e692 100644 --- a/apps/openmw/mwsound/soundmanagerimp.cpp +++ b/apps/openmw/mwsound/soundmanagerimp.cpp @@ -42,6 +42,7 @@ namespace MWSound , mListenerPos(0,0,0) , mListenerDir(1,0,0) , mListenerUp(0,0,1) + , mListenerUnderwater(false) { if(!useSound) return; @@ -584,12 +585,8 @@ namespace MWSound if(!isMusicPlaying()) startRandomTitle(); - MWWorld::Ptr player = - MWBase::Environment::get().getWorld()->getPlayerPtr(); - const ESM::Cell *cell = player.getCell()->getCell(); - Environment env = Env_Normal; - if((cell->mData.mFlags&cell->HasWater) && mListenerPos.z < cell->mWater) + if (mListenerUnderwater) { env = Env_Underwater; //play underwater sound @@ -682,6 +679,12 @@ namespace MWSound mListenerPos = pos; mListenerDir = dir; mListenerUp = up; + + MWWorld::Ptr player = + MWBase::Environment::get().getWorld()->getPlayerPtr(); + const ESM::Cell *cell = player.getCell()->getCell(); + + mListenerUnderwater = ((cell->mData.mFlags&cell->HasWater) && mListenerPos.z < cell->mWater); } void SoundManager::updatePtr(const MWWorld::Ptr &old, const MWWorld::Ptr &updated) diff --git a/apps/openmw/mwsound/soundmanagerimp.hpp b/apps/openmw/mwsound/soundmanagerimp.hpp index 558b6966af..380cfe2552 100644 --- a/apps/openmw/mwsound/soundmanagerimp.hpp +++ b/apps/openmw/mwsound/soundmanagerimp.hpp @@ -50,6 +50,7 @@ namespace MWSound MWBase::SoundPtr mUnderwaterSound; + bool mListenerUnderwater; Ogre::Vector3 mListenerPos; Ogre::Vector3 mListenerDir; Ogre::Vector3 mListenerUp;