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
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -111,5 +111,8 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||||
void SendSound(UUID objectID, UUID sound, double volume,
|
void SendSound(UUID objectID, UUID sound, double volume,
|
||||||
bool triggered, byte flags, float radius, bool useMaster,
|
bool triggered, byte flags, float radius, bool useMaster,
|
||||||
bool isMaster);
|
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);
|
m_host.AddScriptLPS(1);
|
||||||
if (m_SoundModule != null)
|
if (m_SoundModule != null)
|
||||||
{
|
{
|
||||||
double radius1 = VecDist(m_host.GetWorldPosition(), top_north_east);
|
m_SoundModule.TriggerSoundLimited(m_host.UUID,
|
||||||
double radius2 = VecDist(m_host.GetWorldPosition(), bottom_south_west);
|
KeyOrName(sound, AssetType.Sound), volume,
|
||||||
double radius = Math.Abs(radius1 - radius2);
|
bottom_south_west, top_north_east);
|
||||||
m_SoundModule.SendSound(m_host.UUID,
|
|
||||||
KeyOrName(sound, AssetType.Sound), volume, true, 0,
|
|
||||||
(float)radius, false, false);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue