From c975dab7c34c95222da1e1d9446c675d4daf152b Mon Sep 17 00:00:00 2001 From: Capostrophic Date: Sun, 26 May 2019 18:46:53 +0300 Subject: [PATCH] Update say sound queue explicitly once per frame --- apps/openmw/mwsound/soundmanagerimp.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/apps/openmw/mwsound/soundmanagerimp.cpp b/apps/openmw/mwsound/soundmanagerimp.cpp index 9ae4436f4..2879afb2a 100644 --- a/apps/openmw/mwsound/soundmanagerimp.cpp +++ b/apps/openmw/mwsound/soundmanagerimp.cpp @@ -994,6 +994,15 @@ namespace MWSound void SoundManager::updateSounds(float duration) { + // We update active say sounds map for specific actors here + // because for vanilla compatibility we can't do it immediately. + SaySoundMap::iterator queuesayiter = mSaySoundsQueue.begin(); + while (queuesayiter != mSaySoundsQueue.end()) + { + mActiveSaySounds[queuesayiter->first] = queuesayiter->second; + mSaySoundsQueue.erase(queuesayiter++); + } + static float timePassed = 0.0; timePassed += duration; @@ -1076,14 +1085,7 @@ namespace MWSound ++snditer; } - SaySoundMap::iterator sayiter = mSaySoundsQueue.begin(); - while (sayiter != mSaySoundsQueue.end()) - { - mActiveSaySounds[sayiter->first] = sayiter->second; - mSaySoundsQueue.erase(sayiter++); - } - - sayiter = mActiveSaySounds.begin(); + SaySoundMap::iterator sayiter = mActiveSaySounds.begin(); while (sayiter != mActiveSaySounds.end()) { MWWorld::ConstPtr ptr = sayiter->first;