Refactoring llTriggerSoundLimited with a new method on ISoundModule, as the LL Wiki spec for llTriggerSoundLimited states an axis-aligned bounding box, not radial constraint

integration
SignpostMarv 2012-10-16 13:11:17 +01:00 committed by Justin Clark-Casey (justincc)
parent 56965dd959
commit a9999a9676
3 changed files with 36 additions and 6 deletions

View File

@ -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
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}