Merge branch 'ubitwork' of ssh://3dhosting.de/var/git/careminster into ubitwork

avinationmerge
ubit 2012-05-17 13:21:20 +02:00
commit 7ba34f29ef
2 changed files with 22 additions and 23 deletions

View File

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

View File

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