Refactoring llTriggerSoundLimited with a new method on ISoundModule, as the LL Wiki spec for llTriggerSoundLimited states an axis-aligned bounding box, not radial constraint
parent
56965dd959
commit
a9999a9676
|
@ -334,6 +334,36 @@ namespace OpenSim.Region.CoreModules.World.Sound
|
|||
}
|
||||
}
|
||||
|
||||
public void TriggerSoundLimited(UUID objectID, UUID sound,
|
||||
double volume, Vector3 min, Vector3 max)
|
||||
{
|
||||
if (sound == UUID.Zero)
|
||||
return;
|
||||
|
||||
SceneObjectPart part;
|
||||
if (!m_scene.TryGetSceneObjectPart(objectID, out part))
|
||||
return;
|
||||
|
||||
m_scene.ForEachRootScenePresence(delegate(ScenePresence sp)
|
||||
{
|
||||
double dis = Util.GetDistanceTo(sp.AbsolutePosition,
|
||||
part.AbsolutePosition);
|
||||
|
||||
if (dis > MaxDistance) // Max audio distance
|
||||
return;
|
||||
else if (!Util.IsInsideBox(sp.AbsolutePosition, min, max))
|
||||
return;
|
||||
|
||||
// Scale by distance
|
||||
double thisSpGain = volume * ((MaxDistance - dis) / MaxDistance);
|
||||
|
||||
sp.ControllingClient.SendTriggeredSound(sound, part.OwnerID,
|
||||
part.UUID, part.ParentGroup.UUID,
|
||||
m_scene.RegionInfo.RegionHandle,
|
||||
part.AbsolutePosition, (float)thisSpGain);
|
||||
});
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
|
|
@ -111,5 +111,8 @@ namespace OpenSim.Region.Framework.Interfaces
|
|||
void SendSound(UUID objectID, UUID sound, double volume,
|
||||
bool triggered, byte flags, float radius, bool useMaster,
|
||||
bool isMaster);
|
||||
|
||||
void TriggerSoundLimited(UUID objectID, UUID sound, double volume,
|
||||
Vector3 min, Vector3 max);
|
||||
}
|
||||
}
|
|
@ -5876,12 +5876,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
m_host.AddScriptLPS(1);
|
||||
if (m_SoundModule != null)
|
||||
{
|
||||
double radius1 = VecDist(m_host.GetWorldPosition(), top_north_east);
|
||||
double radius2 = VecDist(m_host.GetWorldPosition(), bottom_south_west);
|
||||
double radius = Math.Abs(radius1 - radius2);
|
||||
m_SoundModule.SendSound(m_host.UUID,
|
||||
KeyOrName(sound, AssetType.Sound), volume, true, 0,
|
||||
(float)radius, false, false);
|
||||
m_SoundModule.TriggerSoundLimited(m_host.UUID,
|
||||
KeyOrName(sound, AssetType.Sound), volume,
|
||||
bottom_south_west, top_north_east);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue