mirror of
https://github.com/opensim/opensim.git
synced 2026-08-11 11:57:03 +08:00
preloadsound is suposed to send ownerid, plus save ns on useless dic searchs
This commit is contained in:
@@ -268,7 +268,7 @@ namespace OpenSim.Region.CoreModules.World.Sound
|
||||
StopSound(m_host);
|
||||
}
|
||||
|
||||
private static void StopSound(SceneObjectPart m_host)
|
||||
public void StopSound(SceneObjectPart m_host)
|
||||
{
|
||||
m_host.Sound = UUID.Zero;
|
||||
m_host.SoundFlags = (byte)SoundFlags.STOP;
|
||||
@@ -290,10 +290,30 @@ namespace OpenSim.Region.CoreModules.World.Sound
|
||||
}
|
||||
|
||||
radius *= 4.0f * radius; // avatars and prims do move
|
||||
m_scene.ForEachRootScenePresence(delegate(ScenePresence sp)
|
||||
m_scene.ForEachRootScenePresence(delegate (ScenePresence sp)
|
||||
{
|
||||
if (Vector3.DistanceSquared(sp.AbsolutePosition, part.AbsolutePosition) < radius)
|
||||
sp.ControllingClient.SendPreLoadSound(objectID, objectID, soundID);
|
||||
sp.ControllingClient.SendPreLoadSound(objectID, part.OwnerID, soundID);
|
||||
});
|
||||
}
|
||||
|
||||
public virtual void PreloadSound(SceneObjectPart part, UUID soundID)
|
||||
{
|
||||
if (soundID.IsZero())
|
||||
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 (Vector3.DistanceSquared(sp.AbsolutePosition, part.AbsolutePosition) < radius)
|
||||
sp.ControllingClient.SendPreLoadSound(part.UUID, part.OwnerID, soundID);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -330,6 +350,28 @@ namespace OpenSim.Region.CoreModules.World.Sound
|
||||
m_host.SendFullUpdateToAllClients();
|
||||
}
|
||||
|
||||
public void LoopSound(SceneObjectPart host, UUID soundID,
|
||||
double volume, bool isMaster, bool isSlave)
|
||||
{
|
||||
byte iflags = 1; // looping
|
||||
if (isMaster)
|
||||
iflags |= (byte)SoundFlags.SYNC_MASTER;
|
||||
// TODO check viewer seems to accept both
|
||||
if (isSlave)
|
||||
iflags |= (byte)SoundFlags.SYNC_SLAVE;
|
||||
if (host.SoundQueueing)
|
||||
iflags |= (byte)SoundFlags.QUEUE;
|
||||
|
||||
host.Sound = soundID;
|
||||
host.SoundGain = volume;
|
||||
host.SoundFlags = iflags;
|
||||
if (host.SoundRadius == 0)
|
||||
host.SoundRadius = MaxDistance;
|
||||
|
||||
host.ScheduleFullUpdate();
|
||||
host.SendFullUpdateToAllClients();
|
||||
}
|
||||
|
||||
public void SendSound(UUID objectID, UUID soundID, double volume,
|
||||
bool triggered, byte flags, bool useMaster,
|
||||
bool isMaster)
|
||||
@@ -342,13 +384,38 @@ namespace OpenSim.Region.CoreModules.World.Sound
|
||||
|
||||
volume = Utils.Clamp(volume, 0, 1);
|
||||
|
||||
UUID parentID = part.ParentGroup.UUID;
|
||||
Vector3 position = part.AbsolutePosition; // region local
|
||||
ulong regionHandle = m_scene.RegionInfo.RegionHandle;
|
||||
|
||||
if (triggered)
|
||||
TriggerSound(soundID, part.OwnerID, part.UUID, part.ParentGroup.UUID, volume, position, regionHandle);
|
||||
else
|
||||
{
|
||||
byte bflags = 0;
|
||||
|
||||
if (isMaster)
|
||||
bflags |= (byte)SoundFlags.SYNC_MASTER;
|
||||
// TODO check viewer seems to accept both
|
||||
if (useMaster)
|
||||
bflags |= (byte)SoundFlags.SYNC_SLAVE;
|
||||
PlayAttachedSound(soundID, part.OwnerID, part.UUID, volume, position, bflags);
|
||||
}
|
||||
}
|
||||
|
||||
public void SendSound(SceneObjectPart part, UUID soundID, double volume,
|
||||
bool triggered, byte flags, bool useMaster,
|
||||
bool isMaster)
|
||||
{
|
||||
if (soundID.IsZero())
|
||||
return;
|
||||
|
||||
volume = Utils.Clamp(volume, 0, 1);
|
||||
|
||||
Vector3 position = part.AbsolutePosition; // region local
|
||||
ulong regionHandle = m_scene.RegionInfo.RegionHandle;
|
||||
|
||||
if(triggered)
|
||||
TriggerSound(soundID, part.OwnerID, part.UUID, parentID, volume, position, regionHandle);
|
||||
if (triggered)
|
||||
TriggerSound(soundID, part.OwnerID, part.UUID, part.ParentGroup.UUID, volume, position, regionHandle);
|
||||
else
|
||||
{
|
||||
byte bflags = 0;
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
|
||||
using System;
|
||||
using OpenMetaverse;
|
||||
using OpenSim.Region.Framework.Scenes;
|
||||
|
||||
namespace OpenSim.Region.Framework.Interfaces
|
||||
{
|
||||
@@ -75,6 +76,7 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||
/// </summary>
|
||||
/// <param name="objectID">Sound source ID</param>
|
||||
void StopSound(UUID objectID);
|
||||
void StopSound(SceneObjectPart sop);
|
||||
|
||||
/// <summary>
|
||||
/// Preload sound to viewers within range.
|
||||
@@ -83,6 +85,7 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||
/// <param name="soundID">Sound asset ID</param>
|
||||
/// </param>
|
||||
void PreloadSound(UUID objectID, UUID soundID);
|
||||
void PreloadSound(SceneObjectPart sop, UUID soundID);
|
||||
|
||||
/// <summary>
|
||||
/// Loop specified sound at specified volume with specified radius,
|
||||
@@ -95,6 +98,9 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||
void LoopSound(UUID objectID, UUID soundID, double gain,
|
||||
bool isMaster, bool isSlave);
|
||||
|
||||
void LoopSound(SceneObjectPart sop, UUID soundID, double gain,
|
||||
bool isMaster, bool isSlave);
|
||||
|
||||
/// <summary>
|
||||
/// Trigger or play an attached sound in this part's inventory.
|
||||
/// </summary>
|
||||
@@ -108,6 +114,10 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||
bool triggered, byte flags, bool useMaster,
|
||||
bool isMaster);
|
||||
|
||||
void SendSound(SceneObjectPart sop, UUID sound, double volume,
|
||||
bool triggered, byte flags, bool useMaster,
|
||||
bool isMaster);
|
||||
|
||||
/// <summary>
|
||||
/// Trigger a sound to be played to all agents within an axis-aligned
|
||||
/// bounding box.
|
||||
|
||||
@@ -2900,11 +2900,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
return;
|
||||
|
||||
UUID soundID = ScriptUtils.GetAssetIdFromKeyOrItemName(m_host, sound, AssetType.Sound);
|
||||
if(soundID.IsZero())
|
||||
return;
|
||||
|
||||
// send the sound, once, to all clients in range
|
||||
m_SoundModule.SendSound(m_host.UUID, soundID, volume, false, 0, false, false);
|
||||
if(soundID.IsNotZero())
|
||||
m_SoundModule.SendSound(m_host, soundID, volume, false, 0, false, false);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
@@ -2932,23 +2929,23 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
{
|
||||
case 0: // play
|
||||
foreach (SceneObjectPart sop in parts)
|
||||
m_SoundModule.SendSound(sop.UUID, soundID, volume, false, 0, false, false);
|
||||
m_SoundModule.SendSound(sop, soundID, volume, false, 0, false, false);
|
||||
break;
|
||||
case 1: // loop
|
||||
foreach (SceneObjectPart sop in parts)
|
||||
m_SoundModule.LoopSound(sop.UUID, soundID, volume, false, false);
|
||||
m_SoundModule.LoopSound(sop, soundID, volume, false, false);
|
||||
break;
|
||||
case 2: //trigger
|
||||
foreach (SceneObjectPart sop in parts)
|
||||
m_SoundModule.SendSound(sop.UUID, soundID, volume, true, 0, false, false);
|
||||
m_SoundModule.SendSound(sop, soundID, volume, true, 0, false, false);
|
||||
break;
|
||||
case 4: // play slave
|
||||
foreach (SceneObjectPart sop in parts)
|
||||
m_SoundModule.SendSound(sop.UUID, soundID, volume, false, 0, true, false);
|
||||
m_SoundModule.SendSound(sop, soundID, volume, false, 0, true, false);
|
||||
break;
|
||||
case 5: // loop slave
|
||||
foreach (SceneObjectPart sop in parts)
|
||||
m_SoundModule.LoopSound(sop.UUID, soundID, volume, false, true);
|
||||
m_SoundModule.LoopSound(sop, soundID, volume, false, true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -2963,7 +2960,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
if(soundID.IsZero())
|
||||
return;
|
||||
|
||||
m_SoundModule.LoopSound(m_host.UUID, soundID, volume, false,false);
|
||||
m_SoundModule.LoopSound(m_host, soundID, volume, false, false);
|
||||
}
|
||||
|
||||
public void llLoopSoundMaster(string sound, double volume)
|
||||
@@ -2975,7 +2972,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
if(soundID.IsZero())
|
||||
return;
|
||||
|
||||
m_SoundModule.LoopSound(m_host.UUID, soundID, volume, true, false);
|
||||
m_SoundModule.LoopSound(m_host, soundID, volume, true, false);
|
||||
}
|
||||
|
||||
public void llLoopSoundSlave(string sound, double volume)
|
||||
@@ -2987,7 +2984,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
if(soundID.IsZero())
|
||||
return;
|
||||
|
||||
m_SoundModule.LoopSound(m_host.UUID, soundID, volume, false, true);
|
||||
m_SoundModule.LoopSound(m_host, soundID, volume, false, true);
|
||||
}
|
||||
|
||||
public void llPlaySoundSlave(string sound, double volume)
|
||||
@@ -3000,7 +2997,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, true, false);
|
||||
m_SoundModule.SendSound(m_host, soundID, volume, false, 0, true, false);
|
||||
}
|
||||
|
||||
public void llTriggerSound(string sound, double volume)
|
||||
@@ -3013,12 +3010,12 @@ 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, false, false);
|
||||
m_SoundModule.SendSound(m_host, soundID, volume, true, 0, false, false);
|
||||
}
|
||||
|
||||
public void llStopSound()
|
||||
{
|
||||
m_SoundModule?.StopSound(m_host.UUID);
|
||||
m_SoundModule?.StopSound(m_host);
|
||||
}
|
||||
|
||||
public void llLinkStopSound(LSL_Integer linknumber)
|
||||
@@ -3026,7 +3023,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
if (m_SoundModule is not null)
|
||||
{
|
||||
foreach(SceneObjectPart sop in GetLinkParts(linknumber))
|
||||
m_SoundModule.StopSound(sop.UUID);
|
||||
m_SoundModule.StopSound(sop);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3039,7 +3036,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
if(soundID.IsZero())
|
||||
return;
|
||||
|
||||
m_SoundModule.PreloadSound(m_host.UUID, soundID);
|
||||
m_SoundModule.PreloadSound(m_host, soundID);
|
||||
ScriptSleep(m_sleepMsOnPreloadSound);
|
||||
}
|
||||
|
||||
|
||||
@@ -5008,7 +5008,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, false, false);
|
||||
m_SoundModule.SendSound(sop, soundID, volume, false, 0, false, false);
|
||||
}
|
||||
|
||||
public void osLoopSound(LSL_Integer linknum, LSL_String sound, LSL_Float volume)
|
||||
@@ -5024,7 +5024,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
if (soundID.IsZero())
|
||||
return;
|
||||
|
||||
m_SoundModule.LoopSound(sop.UUID, soundID, volume, false,false);
|
||||
m_SoundModule.LoopSound(sop, soundID, volume, false, false);
|
||||
}
|
||||
|
||||
public void osLoopSoundMaster(LSL_Integer linknum, LSL_String sound, LSL_Float volume)
|
||||
@@ -5040,7 +5040,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
if (soundID.IsZero())
|
||||
return;
|
||||
|
||||
m_SoundModule.LoopSound(sop.UUID, soundID, volume, true, false);
|
||||
m_SoundModule.LoopSound(sop, soundID, volume, true, false);
|
||||
}
|
||||
|
||||
public void osLoopSoundSlave(LSL_Integer linknum, LSL_String sound, LSL_Float volume)
|
||||
@@ -5053,10 +5053,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
return;
|
||||
|
||||
UUID soundID = ScriptUtils.GetAssetIdFromKeyOrItemName(sop, m_host, sound, AssetType.Sound);
|
||||
if (soundID.IsZero())
|
||||
return;
|
||||
|
||||
m_SoundModule.LoopSound(sop.UUID, soundID, volume, false, true);
|
||||
if (soundID.IsNotZero())
|
||||
m_SoundModule.LoopSound(sop, soundID, volume, false, true);
|
||||
}
|
||||
|
||||
public void osPlaySoundSlave(LSL_Integer linknum, LSL_String sound, LSL_Float volume)
|
||||
@@ -5069,11 +5067,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
return;
|
||||
|
||||
UUID soundID = ScriptUtils.GetAssetIdFromKeyOrItemName(sop, m_host, sound, AssetType.Sound);
|
||||
if (soundID.IsZero())
|
||||
return;
|
||||
|
||||
// send the sound, once, to all clients in range
|
||||
m_SoundModule.SendSound(sop.UUID, soundID, volume, false, 0, true, false);
|
||||
if (soundID.IsNotZero())
|
||||
m_SoundModule.SendSound(sop, soundID, volume, false, 0, true, false);
|
||||
}
|
||||
|
||||
public void osTriggerSound(LSL_Integer linknum, LSL_String sound, LSL_Float volume)
|
||||
@@ -5086,11 +5081,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
return;
|
||||
|
||||
UUID soundID = ScriptUtils.GetAssetIdFromKeyOrItemName(sop, m_host, sound, AssetType.Sound);
|
||||
if (soundID.IsZero())
|
||||
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, false, false);
|
||||
if (soundID.IsNotZero())
|
||||
m_SoundModule.SendSound(sop, soundID, volume, true, 0, false, false);
|
||||
}
|
||||
|
||||
public void osTriggerSoundLimited(LSL_Integer linknum, LSL_String sound, LSL_Float volume,
|
||||
@@ -5104,10 +5096,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
return;
|
||||
|
||||
UUID soundID = ScriptUtils.GetAssetIdFromKeyOrItemName(sop, m_host, sound, AssetType.Sound);
|
||||
if (soundID.IsZero())
|
||||
return;
|
||||
|
||||
m_SoundModule.TriggerSoundLimited(sop.UUID, soundID, volume,
|
||||
if (soundID.IsNotZero())
|
||||
m_SoundModule.TriggerSoundLimited(sop.UUID, soundID, volume,
|
||||
bottom_south_west, top_north_east);
|
||||
}
|
||||
|
||||
@@ -5124,7 +5114,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
if(sops is null || sops.Count == 0)
|
||||
return;
|
||||
for(int i = 0; i < sops.Count; ++i)
|
||||
m_SoundModule.StopSound(sops[i].UUID);
|
||||
m_SoundModule.StopSound(sops[i]);
|
||||
}
|
||||
|
||||
public void osPreloadSound(LSL_Integer linknum, LSL_String sound)
|
||||
@@ -5140,7 +5130,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
if (soundID.IsZero())
|
||||
return;
|
||||
|
||||
m_SoundModule.PreloadSound(sop.UUID, soundID);
|
||||
m_SoundModule.PreloadSound(sop, soundID);
|
||||
ScriptSleep(1000);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user