aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorUbitUmarov2012-05-17 12:17:29 +0100
committerUbitUmarov2012-05-17 12:17:29 +0100
commit6af78836a540c9b0a5972ab241364dae52e8e74d (patch)
tree7ff42a8f3d265e54f8ca51695f75a3daaa225d11
parentincrease avatars collisions report to 10 per sec, Stopped sound on avatar to ... (diff)
downloadopensim-SC_OLD-6af78836a540c9b0a5972ab241364dae52e8e74d.zip
opensim-SC_OLD-6af78836a540c9b0a5972ab241364dae52e8e74d.tar.gz
opensim-SC_OLD-6af78836a540c9b0a5972ab241364dae52e8e74d.tar.bz2
opensim-SC_OLD-6af78836a540c9b0a5972ab241364dae52e8e74d.tar.xz
trigger collision sounds on active agent position for better spatial effect without using the detailed collision position. (current error will be half max physical prim size). Moved some checks from sop to collisionSound code
-rw-r--r--OpenSim/Region/Framework/Scenes/CollisionSounds.cs25
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectPart.cs20
2 files changed, 22 insertions, 23 deletions
diff --git a/OpenSim/Region/Framework/Scenes/CollisionSounds.cs b/OpenSim/Region/Framework/Scenes/CollisionSounds.cs
index c46756c..5d43027 100644
--- a/OpenSim/Region/Framework/Scenes/CollisionSounds.cs
+++ b/OpenSim/Region/Framework/Scenes/CollisionSounds.cs
@@ -130,7 +130,7 @@ namespace OpenSim.Region.Framework.Scenes
130 if(Colliders.Count == 0 || part == null) 130 if(Colliders.Count == 0 || part == null)
131 return; 131 return;
132 132
133 if ((part.Flags & PrimFlags.Physics) == 0) // let only active prims trigger sounds 133 if (part.VolumeDetectActive || (part.Flags & PrimFlags.Physics) == 0)
134 return; 134 return;
135 135
136 if (part.ParentGroup == null) 136 if (part.ParentGroup == null)
@@ -142,6 +142,15 @@ namespace OpenSim.Region.Framework.Scenes
142 UUID soundID; 142 UUID soundID;
143 int otherMaterial; 143 int otherMaterial;
144 144
145 Vector3 position = part.AbsolutePosition;
146
147 if (part.CollisionSound != UUID.Zero)
148 {
149 if (part.CollisionSoundVolume > 0.0f)
150 part.SendCollisionSound(part.CollisionSound, part.CollisionSoundVolume, position);
151 return;
152 }
153
145 int thisMaterial = (int) part.Material; 154 int thisMaterial = (int) part.Material;
146 if (thisMaterial >= MaxMaterials) 155 if (thisMaterial >= MaxMaterials)
147 thisMaterial = 3; 156 thisMaterial = 3;
@@ -158,7 +167,7 @@ namespace OpenSim.Region.Framework.Scenes
158 if (!doneownsound) 167 if (!doneownsound)
159 { 168 {
160 soundID = m_TerrainPart[thisMaterial]; 169 soundID = m_TerrainPart[thisMaterial];
161 part.SendCollisionSound(soundID, 1.0); 170 part.SendCollisionSound(soundID, 1.0, position);
162 doneownsound = true; 171 doneownsound = true;
163 } 172 }
164 continue; 173 continue;
@@ -170,7 +179,7 @@ namespace OpenSim.Region.Framework.Scenes
170 if (otherPart.CollisionSound == part.invalidCollisionSoundUUID || otherPart.VolumeDetectActive) 179 if (otherPart.CollisionSound == part.invalidCollisionSoundUUID || otherPart.VolumeDetectActive)
171 continue; 180 continue;
172 if (otherPart.CollisionSound != UUID.Zero) 181 if (otherPart.CollisionSound != UUID.Zero)
173 otherPart.SendCollisionSound(otherPart.CollisionSound, otherPart.CollisionSoundVolume); 182 otherPart.SendCollisionSound(otherPart.CollisionSound, otherPart.CollisionSoundVolume, position);
174 else 183 else
175 { 184 {
176 otherMaterial = (int)otherPart.Material; 185 otherMaterial = (int)otherPart.Material;
@@ -179,10 +188,10 @@ namespace OpenSim.Region.Framework.Scenes
179 index = thisMatScaled + otherMaterial; 188 index = thisMatScaled + otherMaterial;
180 soundID = m_PartPart[index]; 189 soundID = m_PartPart[index];
181 if (doneownsound) 190 if (doneownsound)
182 otherPart.SendCollisionSound(soundID, 1.0); 191 otherPart.SendCollisionSound(soundID, 1.0, position);
183 else 192 else
184 { 193 {
185 part.SendCollisionSound(soundID, 1.0); 194 part.SendCollisionSound(soundID, 1.0, position);
186 doneownsound = true; 195 doneownsound = true;
187 } 196 }
188 } 197 }
@@ -217,6 +226,8 @@ namespace OpenSim.Region.Framework.Scenes
217 int index; 226 int index;
218// bool doneownsound = false; 227// bool doneownsound = false;
219 228
229 Vector3 position = av.AbsolutePosition;
230
220 foreach (uint Id in Colliders) 231 foreach (uint Id in Colliders)
221 { 232 {
222 if (Id == 0) 233 if (Id == 0)
@@ -230,7 +241,7 @@ namespace OpenSim.Region.Framework.Scenes
230 if (otherPart.CollisionSound == otherPart.invalidCollisionSoundUUID) 241 if (otherPart.CollisionSound == otherPart.invalidCollisionSoundUUID)
231 continue; 242 continue;
232 if (otherPart.CollisionSound != UUID.Zero) 243 if (otherPart.CollisionSound != UUID.Zero)
233 otherPart.SendCollisionSound(otherPart.CollisionSound, otherPart.CollisionSoundVolume); 244 otherPart.SendCollisionSound(otherPart.CollisionSound, otherPart.CollisionSoundVolume, position);
234 else 245 else
235 { 246 {
236 otherMaterial = (int)otherPart.Material; 247 otherMaterial = (int)otherPart.Material;
@@ -238,7 +249,7 @@ namespace OpenSim.Region.Framework.Scenes
238 otherMaterial = 3; 249 otherMaterial = 3;
239 index = thisMatScaled + otherMaterial; 250 index = thisMatScaled + otherMaterial;
240 soundID = m_PartPart[index]; 251 soundID = m_PartPart[index];
241 otherPart.SendCollisionSound(soundID, 1.0); 252 otherPart.SendCollisionSound(soundID, 1.0, position);
242 } 253 }
243 } 254 }
244/* 255/*
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 5874d34..b5705b7 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -2632,7 +2632,6 @@ namespace OpenSim.Region.Framework.Scenes
2632 2632
2633 else 2633 else
2634 { 2634 {
2635
2636 // calculate things that started colliding this time 2635 // calculate things that started colliding this time
2637 // and build up list of colliders this time 2636 // and build up list of colliders this time
2638 foreach (uint localid in collissionswith.Keys) 2637 foreach (uint localid in collissionswith.Keys)
@@ -2657,22 +2656,13 @@ namespace OpenSim.Region.Framework.Scenes
2657 foreach (uint localID in endedColliders) 2656 foreach (uint localID in endedColliders)
2658 m_lastColliders.Remove(localID); 2657 m_lastColliders.Remove(localID);
2659 } 2658 }
2659
2660 // play the sound. 2660 // play the sound.
2661 2661
2662 bool IsNotVolumeDtc = !VolumeDetectActive; 2662 bool IsNotVolumeDtc = !VolumeDetectActive;
2663 2663
2664 if (IsNotVolumeDtc && startedColliders.Count > 0 && CollisionSound != invalidCollisionSoundUUID) 2664 if (IsNotVolumeDtc && startedColliders.Count > 0 && CollisionSound != invalidCollisionSoundUUID)
2665 { 2665 CollisionSounds.PartCollisionSound(this, startedColliders);
2666 if (CollisionSound != UUID.Zero)
2667 {
2668 if (CollisionSoundVolume > 0.0f)
2669 SendCollisionSound(CollisionSound, CollisionSoundVolume);
2670 }
2671 else
2672 {
2673 CollisionSounds.PartCollisionSound(this, startedColliders);
2674 }
2675 }
2676 2666
2677 SendCollisionEvent(scriptEvents.collision_start, startedColliders, ParentGroup.Scene.EventManager.TriggerScriptCollidingStart); 2667 SendCollisionEvent(scriptEvents.collision_start, startedColliders, ParentGroup.Scene.EventManager.TriggerScriptCollidingStart);
2678 if (IsNotVolumeDtc) 2668 if (IsNotVolumeDtc)
@@ -3206,12 +3196,11 @@ namespace OpenSim.Region.Framework.Scenes
3206 } 3196 }
3207 } 3197 }
3208 3198
3209 public void SendCollisionSound(UUID soundID, double volume) 3199 public void SendCollisionSound(UUID soundID, double volume, Vector3 position)
3210 { 3200 {
3211 if (soundID == UUID.Zero) 3201 if (soundID == UUID.Zero)
3212 return; 3202 return;
3213 3203
3214
3215 ISoundModule soundModule = ParentGroup.Scene.RequestModuleInterface<ISoundModule>(); 3204 ISoundModule soundModule = ParentGroup.Scene.RequestModuleInterface<ISoundModule>();
3216 if (soundModule == null) 3205 if (soundModule == null)
3217 return; 3206 return;
@@ -3230,10 +3219,9 @@ namespace OpenSim.Region.Framework.Scenes
3230 UUID ownerID = OwnerID; 3219 UUID ownerID = OwnerID;
3231 UUID objectID = ParentGroup.RootPart.UUID; 3220 UUID objectID = ParentGroup.RootPart.UUID;
3232 UUID parentID = ParentGroup.UUID; 3221 UUID parentID = ParentGroup.UUID;
3233 Vector3 position = AbsolutePosition; // region local
3234 ulong regionHandle = ParentGroup.Scene.RegionInfo.RegionHandle; 3222 ulong regionHandle = ParentGroup.Scene.RegionInfo.RegionHandle;
3235 3223
3236 soundModule.TriggerSound(soundID, ownerID, objectID, parentID, volume, position, regionHandle, 0); 3224 soundModule.TriggerSound(soundID, ownerID, objectID, parentID, volume, position, regionHandle, 0 );
3237 } 3225 }
3238 3226
3239 3227