From ca7bd13deed5de68f1d10994af149b4982df154c Mon Sep 17 00:00:00 2001
From: UbitUmarov
Date: Tue, 10 Apr 2018 21:45:11 +0100
Subject: sound radius is a prim prop only set by llSetSoundRadius, fix it in
case viewers do fix its use (ignored for now)
---
.../Region/ClientStack/Linden/UDP/LLClientView.cs | 3 +-
.../Region/CoreModules/World/Sound/SoundModule.cs | 58 +++++++++++-----------
.../Region/Framework/Interfaces/ISoundModule.cs | 16 ++----
OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 2 +-
.../Scripting/Minimodule/SOPObject.cs | 2 +-
.../OptionalModules/Scripting/Minimodule/World.cs | 4 +-
.../Shared/Api/Implementation/LSL_Api.cs | 14 +++---
.../Shared/Api/Implementation/OSSL_Api.cs | 14 +++---
8 files changed, 53 insertions(+), 60 deletions(-)
diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
index 437f772..bd178c0 100644
--- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs
@@ -7515,8 +7515,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
handlerSoundTrigger(soundTriggerPacket.SoundData.SoundID, AgentId,
AgentId, AgentId,
soundTriggerPacket.SoundData.Gain, soundTriggerPacket.SoundData.Position,
- soundTriggerPacket.SoundData.Handle, 0);
-
+ soundTriggerPacket.SoundData.Handle);
}
return true;
}
diff --git a/OpenSim/Region/CoreModules/World/Sound/SoundModule.cs b/OpenSim/Region/CoreModules/World/Sound/SoundModule.cs
index 662e3fe..14c230a 100644
--- a/OpenSim/Region/CoreModules/World/Sound/SoundModule.cs
+++ b/OpenSim/Region/CoreModules/World/Sound/SoundModule.cs
@@ -125,22 +125,23 @@ namespace OpenSim.Region.CoreModules.World.Sound
#region ISoundModule
public virtual void PlayAttachedSound(
- UUID soundID, UUID ownerID, UUID objectID, double gain, Vector3 position, byte flags, float radius)
+ UUID soundID, UUID ownerID, UUID objectID, double gain, Vector3 position, byte flags)
{
SceneObjectPart part;
if (!m_scene.TryGetSceneObjectPart(objectID, out part))
return;
+ if (part.SoundRadius == 0)
+ part.SoundRadius = MaxDistance;
part.SoundFlags = 0;
- SceneObjectGroup grp = part.ParentGroup;
-
- if (radius == 0)
- radius = MaxDistance;
-
if (part.SoundQueueing)
flags |= (byte)SoundFlags.QUEUE;
+ SceneObjectGroup grp = part.ParentGroup;
+ if(grp == null | grp.IsDeleted)
+ return;
+
if (grp.IsAttachment)
{
ScenePresence ssp = null;
@@ -166,7 +167,7 @@ namespace OpenSim.Region.CoreModules.World.Sound
}
public virtual void TriggerSound(
- UUID soundId, UUID ownerID, UUID objectID, UUID parentID, double gain, Vector3 position, UInt64 handle, float radius)
+ UUID soundId, UUID ownerID, UUID objectID, UUID parentID, double gain, Vector3 position, UInt64 handle)
{
SceneObjectPart part;
ScenePresence ssp = null;
@@ -188,28 +189,21 @@ namespace OpenSim.Region.CoreModules.World.Sound
if (!ssp.ParcelAllowThisAvatarSounds)
return;
-
-/* mantis 7942: coment out to allow trigger in HUDs to send sounds to all
- if (grp.HasPrivateAttachmentPoint)
- {
- ssp.ControllingClient.SendTriggeredSound(soundId, ownerID,
- objectID, parentID, handle, position,
- (float)gain);
- return;
- }
-*/
}
}
- part.SoundFlags = 0;
-
+ float radius = (float)part.SoundRadius;
if (radius == 0)
+ {
radius = MaxDistance;
+ part.SoundRadius = MaxDistance;
+ }
+ part.SoundFlags = 0;
+ radius *= radius;
m_scene.ForEachRootScenePresence(delegate(ScenePresence sp)
{
- double dis = Util.GetDistanceTo(sp.AbsolutePosition, position);
- if (dis > radius) // Max audio distance
+ if (Vector3.DistanceSquared(sp.AbsolutePosition, position) > radius) // Max audio distance
return;
sp.ControllingClient.SendTriggeredSound(soundId, ownerID,
@@ -231,13 +225,12 @@ namespace OpenSim.Region.CoreModules.World.Sound
{
m_host.Sound = UUID.Zero;
m_host.SoundFlags = (byte)SoundFlags.STOP;
- m_host.SoundRadius = 0;
m_host.SoundGain = 0;
m_host.ScheduleFullUpdate();
m_host.SendFullUpdateToAllClients();
}
- public virtual void PreloadSound(UUID objectID, UUID soundID, float radius)
+ public virtual void PreloadSound(UUID objectID, UUID soundID)
{
SceneObjectPart part;
if (soundID == UUID.Zero
@@ -246,12 +239,17 @@ namespace OpenSim.Region.CoreModules.World.Sound
return;
}
+ float radius = (float)part.SoundRadius;
if (radius == 0)
+ {
radius = MaxDistance;
+ part.SoundRadius = radius;
+ }
+ radius *= 4.0f * radius; // avatars and prims do move
m_scene.ForEachRootScenePresence(delegate(ScenePresence sp)
{
- if (Util.GetDistanceTo(sp.AbsolutePosition, part.AbsolutePosition) < radius)
+ if (Vector3.DistanceSquared(sp.AbsolutePosition, part.AbsolutePosition) < radius)
sp.ControllingClient.SendPreLoadSound(objectID, objectID, soundID);
});
}
@@ -265,7 +263,7 @@ namespace OpenSim.Region.CoreModules.World.Sound
// 20080530 Updated to remove code duplication
// 20080530 Stop sound if there is one, otherwise volume only changes don't work
public void LoopSound(UUID objectID, UUID soundID,
- double volume, double radius, bool isMaster, bool isSlave)
+ double volume, bool isMaster, bool isSlave)
{
SceneObjectPart m_host;
if (!m_scene.TryGetSceneObjectPart(objectID, out m_host))
@@ -283,14 +281,15 @@ namespace OpenSim.Region.CoreModules.World.Sound
m_host.Sound = soundID;
m_host.SoundGain = volume;
m_host.SoundFlags = iflags;
- m_host.SoundRadius = radius;
+ if (m_host.SoundRadius == 0)
+ m_host.SoundRadius = MaxDistance;
m_host.ScheduleFullUpdate();
m_host.SendFullUpdateToAllClients();
}
public void SendSound(UUID objectID, UUID soundID, double volume,
- bool triggered, byte flags, float radius, bool useMaster,
+ bool triggered, byte flags, bool useMaster,
bool isMaster)
{
if (soundID == UUID.Zero)
@@ -308,7 +307,7 @@ namespace OpenSim.Region.CoreModules.World.Sound
ulong regionHandle = m_scene.RegionInfo.RegionHandle;
if(triggered)
- TriggerSound(soundID, part.OwnerID, part.UUID, parentID, volume, position, regionHandle, radius);
+ TriggerSound(soundID, part.OwnerID, part.UUID, parentID, volume, position, regionHandle);
else
{
byte bflags = 0;
@@ -318,7 +317,7 @@ namespace OpenSim.Region.CoreModules.World.Sound
// TODO check viewer seems to accept both
if (useMaster)
bflags |= (byte)SoundFlags.SYNC_SLAVE;
- PlayAttachedSound(soundID, part.OwnerID, part.UUID, volume, position, bflags, radius);
+ PlayAttachedSound(soundID, part.OwnerID, part.UUID, volume, position, bflags);
}
}
@@ -339,6 +338,7 @@ namespace OpenSim.Region.CoreModules.World.Sound
if (dis > MaxDistance) // Max audio distance
return;
+
else if (!Util.IsInsideBox(sp.AbsolutePosition, min, max))
return;
diff --git a/OpenSim/Region/Framework/Interfaces/ISoundModule.cs b/OpenSim/Region/Framework/Interfaces/ISoundModule.cs
index f7c6513..aaa9931 100644
--- a/OpenSim/Region/Framework/Interfaces/ISoundModule.cs
+++ b/OpenSim/Region/Framework/Interfaces/ISoundModule.cs
@@ -46,11 +46,9 @@ namespace OpenSim.Region.Framework.Interfaces
/// Sound volume
/// Sound source position
/// Sound flags
- ///
- /// Radius used to affect gain over distance.
///
void PlayAttachedSound(UUID soundID, UUID ownerID, UUID objectID,
- double gain, Vector3 position, byte flags, float radius);
+ double gain, Vector3 position, byte flags);
///
/// Trigger a sound in the scene.
@@ -67,7 +65,7 @@ namespace OpenSim.Region.Framework.Interfaces
///
void TriggerSound(
UUID soundId, UUID ownerID, UUID objectID, UUID parentID,
- double gain, Vector3 position, UInt64 handle, float radius);
+ double gain, Vector3 position, UInt64 handle);
///
/// Stop sounds eminating from an object.
@@ -80,10 +78,8 @@ namespace OpenSim.Region.Framework.Interfaces
///
/// Sound source ID
/// Sound asset ID
- ///
- /// Radius used to determine which viewers should preload the sound.
///
- void PreloadSound(UUID objectID, UUID soundID, float radius);
+ void PreloadSound(UUID objectID, UUID soundID);
///
/// Loop specified sound at specified volume with specified radius,
@@ -92,10 +88,9 @@ namespace OpenSim.Region.Framework.Interfaces
/// Sound source ID
/// Sound asset ID
/// Sound volume
- /// Sound radius
/// Set object to sync master if true
void LoopSound(UUID objectID, UUID soundID, double gain,
- double radius, bool isMaster, bool isSlave);
+ bool isMaster, bool isSlave);
///
/// Trigger or play an attached sound in this part's inventory.
@@ -104,11 +99,10 @@ namespace OpenSim.Region.Framework.Interfaces
/// Sound asset ID
/// Sound volume
/// Triggered or not.
- /// Sound radius
/// Play using sound master
/// Play as sound master
void SendSound(UUID objectID, UUID sound, double volume,
- bool triggered, byte flags, float radius, bool useMaster,
+ bool triggered, byte flags, bool useMaster,
bool isMaster);
///
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 2c183ad..2177acd 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -3077,7 +3077,7 @@ namespace OpenSim.Region.Framework.Scenes
UUID parentID = ParentGroup.UUID;
ulong regionHandle = ParentGroup.Scene.RegionInfo.RegionHandle;
- soundModule.TriggerSound(soundID, ownerID, objectID, parentID, volume, position, regionHandle, 0 );
+ soundModule.TriggerSound(soundID, ownerID, objectID, parentID, volume, position, regionHandle);
}
public void PhysicsOutOfBounds(Vector3 pos)
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObject.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObject.cs
index 5513cd5..1ff9cb5 100644
--- a/OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObject.cs
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/SOPObject.cs
@@ -824,7 +824,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
ISoundModule module = m_rootScene.RequestModuleInterface();
if (module != null)
{
- module.SendSound(GetSOP().UUID, asset, volume, true, 0, 0, false, false);
+ module.SendSound(GetSOP().UUID, asset, volume, true, 0, false, false);
}
}
diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/World.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/World.cs
index 36f70d0..eff70ef 100644
--- a/OpenSim/Region/OptionalModules/Scripting/Minimodule/World.cs
+++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/World.cs
@@ -231,7 +231,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
if (soundModule != null)
{
soundModule.TriggerSound(audio, UUID.Zero, UUID.Zero, UUID.Zero, volume, position,
- m_internalScene.RegionInfo.RegionHandle, 0);
+ m_internalScene.RegionInfo.RegionHandle);
}
}
@@ -241,7 +241,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
if (soundModule != null)
{
soundModule.TriggerSound(audio, UUID.Zero, UUID.Zero, UUID.Zero, 1.0, position,
- m_internalScene.RegionInfo.RegionHandle, 0);
+ m_internalScene.RegionInfo.RegionHandle);
}
}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index eae4daf..9799886 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -3178,7 +3178,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
return;
// send the sound, once, to all clients in range
- m_SoundModule.SendSound(m_host.UUID, soundID, volume, false, 0, 0, false, false);
+ m_SoundModule.SendSound(m_host.UUID, soundID, volume, false, 0, false, false);
}
public void llLoopSound(string sound, double volume)
@@ -3192,7 +3192,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if(soundID == UUID.Zero)
return;
- m_SoundModule.LoopSound(m_host.UUID, soundID, volume, 20, false,false);
+ m_SoundModule.LoopSound(m_host.UUID, soundID, volume, false,false);
}
public void llLoopSoundMaster(string sound, double volume)
@@ -3206,7 +3206,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if(soundID == UUID.Zero)
return;
- m_SoundModule.LoopSound(m_host.UUID, soundID, volume, 20, true, false);
+ m_SoundModule.LoopSound(m_host.UUID, soundID, volume, true, false);
}
public void llLoopSoundSlave(string sound, double volume)
@@ -3220,7 +3220,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if(soundID == UUID.Zero)
return;
- m_SoundModule.LoopSound(m_host.UUID, soundID, volume, 20, false, true);
+ m_SoundModule.LoopSound(m_host.UUID, soundID, volume, false, true);
}
public void llPlaySoundSlave(string sound, double volume)
@@ -3235,7 +3235,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
return;
// send the sound, once, to all clients in range
- m_SoundModule.SendSound(m_host.UUID, soundID, volume, false, 0, 0, true, false);
+ m_SoundModule.SendSound(m_host.UUID, soundID, volume, false, 0, true, false);
}
public void llTriggerSound(string sound, double volume)
@@ -3250,7 +3250,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
return;
// send the sound, once, to all clients in rangeTrigger or play an attached sound in this part's inventory.
- m_SoundModule.SendSound(m_host.UUID, soundID, volume, true, 0, 0, false, false);
+ m_SoundModule.SendSound(m_host.UUID, soundID, volume, true, 0, false, false);
}
public void llStopSound()
@@ -3272,7 +3272,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if(soundID == UUID.Zero)
return;
- m_SoundModule.PreloadSound(m_host.UUID, soundID, 0);
+ m_SoundModule.PreloadSound(m_host.UUID, soundID);
ScriptSleep(m_sleepMsOnPreloadSound);
}
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
index 06f4fd1..781f1c9 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
@@ -4873,7 +4873,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
return;
// send the sound, once, to all clients in range
- m_SoundModule.SendSound(sop.UUID, soundID, volume, false, 0, 0, false, false);
+ m_SoundModule.SendSound(sop.UUID, soundID, volume, false, 0, false, false);
}
public void osLoopSound(LSL_Integer linknum, LSL_String sound, LSL_Float volume)
@@ -4891,7 +4891,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if(soundID == UUID.Zero)
return;
- m_SoundModule.LoopSound(sop.UUID, soundID, volume, 20, false,false);
+ m_SoundModule.LoopSound(sop.UUID, soundID, volume, false,false);
}
public void osLoopSoundMaster(LSL_Integer linknum, LSL_String sound, LSL_Float volume)
@@ -4906,7 +4906,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if(soundID == UUID.Zero)
return;
- m_SoundModule.LoopSound(sop.UUID, soundID, volume, 20, true, false);
+ m_SoundModule.LoopSound(sop.UUID, soundID, volume, true, false);
}
public void osLoopSoundSlave(LSL_Integer linknum, LSL_String sound, LSL_Float volume)
@@ -4924,7 +4924,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if(soundID == UUID.Zero)
return;
- m_SoundModule.LoopSound(sop.UUID, soundID, volume, 20, false, true);
+ m_SoundModule.LoopSound(sop.UUID, soundID, volume, false, true);
}
public void osPlaySoundSlave(LSL_Integer linknum, LSL_String sound, LSL_Float volume)
@@ -4943,7 +4943,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
return;
// send the sound, once, to all clients in range
- m_SoundModule.SendSound(sop.UUID, soundID, volume, false, 0, 0, true, false);
+ m_SoundModule.SendSound(sop.UUID, soundID, volume, false, 0, true, false);
}
public void osTriggerSound(LSL_Integer linknum, LSL_String sound, LSL_Float volume)
@@ -4962,7 +4962,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
return;
// send the sound, once, to all clients in rangeTrigger or play an attached sound in this part's inventory.
- m_SoundModule.SendSound(sop.UUID, soundID, volume, true, 0, 0, false, false);
+ m_SoundModule.SendSound(sop.UUID, soundID, volume, true, 0, false, false);
}
public void osTriggerSoundLimited(LSL_Integer linknum, LSL_String sound, LSL_Float volume,
@@ -5014,7 +5014,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if(soundID == UUID.Zero)
return;
- m_SoundModule.PreloadSound(sop.UUID, soundID, 0);
+ m_SoundModule.PreloadSound(sop.UUID, soundID);
ScriptSleep(1000);
}
--
cgit v1.1