diff options
| author | Nat Goodspeed <nat@lindenlab.com> | 2021-09-23 16:28:14 -0400 |
|---|---|---|
| committer | Nat Goodspeed <nat@lindenlab.com> | 2021-09-23 16:28:14 -0400 |
| commit | 274fc85fcbbe37f491f2d78b8b0f0b4ebb7bba26 (patch) | |
| tree | e27d31612409d665120defe7f7d120ea5a876324 /indra/newview/llaudiosourcevo.cpp | |
| parent | 2b96d1bbe00c317ea8dfe420dd4167dde5d153ae (diff) | |
| parent | 1d6bfb727a8015e82cd4060a0c73cf3fc719e818 (diff) | |
DRTVWR-543: Merge branch 'DRTVWR-543-maint' into classic
Diffstat (limited to 'indra/newview/llaudiosourcevo.cpp')
| -rw-r--r-- | indra/newview/llaudiosourcevo.cpp | 36 |
1 files changed, 31 insertions, 5 deletions
diff --git a/indra/newview/llaudiosourcevo.cpp b/indra/newview/llaudiosourcevo.cpp index 4b6c855bde..1846238d93 100644 --- a/indra/newview/llaudiosourcevo.cpp +++ b/indra/newview/llaudiosourcevo.cpp @@ -34,6 +34,7 @@ #include "llmutelist.h" #include "llviewercontrol.h" #include "llviewerparcelmgr.h" +#include "llvoavatarself.h" LLAudioSourceVO::LLAudioSourceVO(const LLUUID &sound_id, const LLUUID& owner_id, const F32 gain, LLViewerObject *objectp) : LLAudioSource(sound_id, owner_id, gain, LLAudioEngine::AUDIO_TYPE_SFX), @@ -141,11 +142,36 @@ void LLAudioSourceVO::updateMute() LLVector3d pos_global = getPosGlobal(); F32 cutoff = mObjectp->getSoundCutOffRadius(); - if ((cutoff > 0.1f && !isInCutOffRadius(pos_global, cutoff)) // consider cutoff below 0.1m as off - || !LLViewerParcelMgr::getInstance()->canHearSound(pos_global)) - { - mute = true; - } + // Object can specify radius at which it turns off + // consider cutoff below 0.1m as 'cutoff off' + if (cutoff > 0.1f && !isInCutOffRadius(pos_global, cutoff)) + { + mute = true; + } + // check if parcel allows sounds to pass border + else if (!LLViewerParcelMgr::getInstance()->canHearSound(pos_global)) + { + if (isAgentAvatarValid() && gAgentAvatarp->getParent()) + { + // Check if agent is riding this object + // Agent can ride something out of region border and canHearSound + // will treat object as not being part of agent's parcel. + LLViewerObject *sound_root = (LLViewerObject*)mObjectp->getRoot(); + LLViewerObject *agent_root = (LLViewerObject*)gAgentAvatarp->getRoot(); + if (sound_root != agent_root) + { + mute = true; + } + else + { + LL_INFOS() << "roots identical" << LL_ENDL; + } + } + else + { + mute = true; + } + } if (!mute) { |
