diff options
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/CollisionSounds.cs')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/CollisionSounds.cs | 25 |
1 files changed, 18 insertions, 7 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 | /* |