Merge branch 'ubitwork' of ssh://3dhosting.de/var/git/careminster into ubitwork
commit
7ba34f29ef
|
@ -130,7 +130,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
if(Colliders.Count == 0 || part == null)
|
||||
return;
|
||||
|
||||
if ((part.Flags & PrimFlags.Physics) == 0) // let only active prims trigger sounds
|
||||
if (part.VolumeDetectActive || (part.Flags & PrimFlags.Physics) == 0)
|
||||
return;
|
||||
|
||||
if (part.ParentGroup == null)
|
||||
|
@ -142,6 +142,15 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
UUID soundID;
|
||||
int otherMaterial;
|
||||
|
||||
Vector3 position = part.AbsolutePosition;
|
||||
|
||||
if (part.CollisionSound != UUID.Zero)
|
||||
{
|
||||
if (part.CollisionSoundVolume > 0.0f)
|
||||
part.SendCollisionSound(part.CollisionSound, part.CollisionSoundVolume, position);
|
||||
return;
|
||||
}
|
||||
|
||||
int thisMaterial = (int) part.Material;
|
||||
if (thisMaterial >= MaxMaterials)
|
||||
thisMaterial = 3;
|
||||
|
@ -158,7 +167,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
if (!doneownsound)
|
||||
{
|
||||
soundID = m_TerrainPart[thisMaterial];
|
||||
part.SendCollisionSound(soundID, 1.0);
|
||||
part.SendCollisionSound(soundID, 1.0, position);
|
||||
doneownsound = true;
|
||||
}
|
||||
continue;
|
||||
|
@ -170,7 +179,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
if (otherPart.CollisionSound == part.invalidCollisionSoundUUID || otherPart.VolumeDetectActive)
|
||||
continue;
|
||||
if (otherPart.CollisionSound != UUID.Zero)
|
||||
otherPart.SendCollisionSound(otherPart.CollisionSound, otherPart.CollisionSoundVolume);
|
||||
otherPart.SendCollisionSound(otherPart.CollisionSound, otherPart.CollisionSoundVolume, position);
|
||||
else
|
||||
{
|
||||
otherMaterial = (int)otherPart.Material;
|
||||
|
@ -179,10 +188,10 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
index = thisMatScaled + otherMaterial;
|
||||
soundID = m_PartPart[index];
|
||||
if (doneownsound)
|
||||
otherPart.SendCollisionSound(soundID, 1.0);
|
||||
otherPart.SendCollisionSound(soundID, 1.0, position);
|
||||
else
|
||||
{
|
||||
part.SendCollisionSound(soundID, 1.0);
|
||||
part.SendCollisionSound(soundID, 1.0, position);
|
||||
doneownsound = true;
|
||||
}
|
||||
}
|
||||
|
@ -217,6 +226,8 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
int index;
|
||||
// bool doneownsound = false;
|
||||
|
||||
Vector3 position = av.AbsolutePosition;
|
||||
|
||||
foreach (uint Id in Colliders)
|
||||
{
|
||||
if (Id == 0)
|
||||
|
@ -230,7 +241,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
if (otherPart.CollisionSound == otherPart.invalidCollisionSoundUUID)
|
||||
continue;
|
||||
if (otherPart.CollisionSound != UUID.Zero)
|
||||
otherPart.SendCollisionSound(otherPart.CollisionSound, otherPart.CollisionSoundVolume);
|
||||
otherPart.SendCollisionSound(otherPart.CollisionSound, otherPart.CollisionSoundVolume, position);
|
||||
else
|
||||
{
|
||||
otherMaterial = (int)otherPart.Material;
|
||||
|
@ -238,7 +249,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
otherMaterial = 3;
|
||||
index = thisMatScaled + otherMaterial;
|
||||
soundID = m_PartPart[index];
|
||||
otherPart.SendCollisionSound(soundID, 1.0);
|
||||
otherPart.SendCollisionSound(soundID, 1.0, position);
|
||||
}
|
||||
}
|
||||
/*
|
||||
|
|
|
@ -2632,7 +2632,6 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
else
|
||||
{
|
||||
|
||||
// calculate things that started colliding this time
|
||||
// and build up list of colliders this time
|
||||
foreach (uint localid in collissionswith.Keys)
|
||||
|
@ -2657,22 +2656,13 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
foreach (uint localID in endedColliders)
|
||||
m_lastColliders.Remove(localID);
|
||||
}
|
||||
|
||||
// play the sound.
|
||||
|
||||
bool IsNotVolumeDtc = !VolumeDetectActive;
|
||||
|
||||
if (IsNotVolumeDtc && startedColliders.Count > 0 && CollisionSound != invalidCollisionSoundUUID)
|
||||
{
|
||||
if (CollisionSound != UUID.Zero)
|
||||
{
|
||||
if (CollisionSoundVolume > 0.0f)
|
||||
SendCollisionSound(CollisionSound, CollisionSoundVolume);
|
||||
}
|
||||
else
|
||||
{
|
||||
CollisionSounds.PartCollisionSound(this, startedColliders);
|
||||
}
|
||||
}
|
||||
CollisionSounds.PartCollisionSound(this, startedColliders);
|
||||
|
||||
SendCollisionEvent(scriptEvents.collision_start, startedColliders, ParentGroup.Scene.EventManager.TriggerScriptCollidingStart);
|
||||
if (IsNotVolumeDtc)
|
||||
|
@ -3206,12 +3196,11 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
}
|
||||
}
|
||||
|
||||
public void SendCollisionSound(UUID soundID, double volume)
|
||||
public void SendCollisionSound(UUID soundID, double volume, Vector3 position)
|
||||
{
|
||||
if (soundID == UUID.Zero)
|
||||
return;
|
||||
|
||||
|
||||
ISoundModule soundModule = ParentGroup.Scene.RequestModuleInterface<ISoundModule>();
|
||||
if (soundModule == null)
|
||||
return;
|
||||
|
@ -3230,10 +3219,9 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
UUID ownerID = OwnerID;
|
||||
UUID objectID = ParentGroup.RootPart.UUID;
|
||||
UUID parentID = ParentGroup.UUID;
|
||||
Vector3 position = AbsolutePosition; // region local
|
||||
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, 0 );
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue