diff options
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/CollisionSounds.cs')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/CollisionSounds.cs | 334 |
1 files changed, 217 insertions, 117 deletions
diff --git a/OpenSim/Region/Framework/Scenes/CollisionSounds.cs b/OpenSim/Region/Framework/Scenes/CollisionSounds.cs index 5d43027..81ca9f1 100644 --- a/OpenSim/Region/Framework/Scenes/CollisionSounds.cs +++ b/OpenSim/Region/Framework/Scenes/CollisionSounds.cs | |||
@@ -33,67 +33,116 @@ using OpenSim.Framework; | |||
33 | 33 | ||
34 | namespace OpenSim.Region.Framework.Scenes | 34 | namespace OpenSim.Region.Framework.Scenes |
35 | { | 35 | { |
36 | public static class CollisionSounds | 36 | public struct CollisionForSoundInfo |
37 | { | 37 | { |
38 | // defines for cases | 38 | public uint colliderID; |
39 | // only know one UUID for now (woodflesh) | 39 | public Vector3 position; |
40 | public float relativeVel; | ||
41 | } | ||
40 | 42 | ||
43 | public static class CollisionSounds | ||
44 | { | ||
41 | private const int MaxMaterials = 7; | 45 | private const int MaxMaterials = 7; |
42 | // part part | 46 | // part part |
47 | /* | ||
48 | private static UUID snd_StoneStone = new UUID("be7295c0-a158-11e1-b3dd-0800200c9a66"); | ||
49 | private static UUID snd_StoneMetal = new UUID("be7295c0-a158-11e1-b3dd-0800201c9a66"); | ||
50 | private static UUID snd_StoneGlass = new UUID("be7295c0-a158-11e1-b3dd-0800202c9a66"); | ||
51 | private static UUID snd_StoneWood = new UUID("be7295c0-a158-11e1-b3dd-0800203c9a66"); | ||
52 | private static UUID snd_StoneFlesh = new UUID("be7295c0-a158-11e1-b3dd-0800204c9a66"); | ||
53 | private static UUID snd_StonePlastic = new UUID("be7295c0-a158-11e1-b3dd-0800205c9a66"); | ||
54 | private static UUID snd_StoneRubber = new UUID("be7295c0-a158-11e1-b3dd-0800206c9a66"); | ||
55 | |||
56 | private static UUID snd_MetalStone = new UUID("be7295c0-a158-11e1-b3dd-0801200c9a66"); | ||
57 | private static UUID snd_MetalMetal = new UUID("be7295c0-a158-11e1-b3dd-0801201c9a66"); | ||
58 | private static UUID snd_MetalGlass = new UUID("be7295c0-a158-11e1-b3dd-0801202c9a66"); | ||
59 | private static UUID snd_MetalWood = new UUID("be7295c0-a158-11e1-b3dd-0801203c9a66"); | ||
60 | private static UUID snd_MetalFlesh = new UUID("be7295c0-a158-11e1-b3dd-0801204c9a66"); | ||
61 | private static UUID snd_MetalPlastic = new UUID("be7295c0-a158-11e1-b3dd-0801205c9a66"); | ||
62 | private static UUID snd_MetalRubber = new UUID("be7295c0-a158-11e1-b3dd-0801206c9a66"); | ||
63 | |||
64 | private static UUID snd_GlassStone = new UUID("be7295c0-a158-11e1-b3dd-0802200c9a66"); | ||
65 | private static UUID snd_GlassMetal = new UUID("be7295c0-a158-11e1-b3dd-0802201c9a66"); | ||
66 | private static UUID snd_GlassGlass = new UUID("be7295c0-a158-11e1-b3dd-0802202c9a66"); | ||
67 | private static UUID snd_GlassWood = new UUID("be7295c0-a158-11e1-b3dd-0802203c9a66"); | ||
68 | private static UUID snd_GlassFlesh = new UUID("be7295c0-a158-11e1-b3dd-0802204c9a66"); | ||
69 | private static UUID snd_GlassPlastic = new UUID("be7295c0-a158-11e1-b3dd-0802205c9a66"); | ||
70 | private static UUID snd_GlassRubber = new UUID("be7295c0-a158-11e1-b3dd-0802206c9a66"); | ||
71 | |||
72 | private static UUID snd_WoodStone = new UUID("be7295c0-a158-11e1-b3dd-0803200c9a66"); | ||
73 | private static UUID snd_WoodMetal = new UUID("be7295c0-a158-11e1-b3dd-0803201c9a66"); | ||
74 | private static UUID snd_WoodGlass = new UUID("be7295c0-a158-11e1-b3dd-0803202c9a66"); | ||
75 | private static UUID snd_WoodWood = new UUID("be7295c0-a158-11e1-b3dd-0803203c9a66"); | ||
76 | private static UUID snd_WoodFlesh = new UUID("be7295c0-a158-11e1-b3dd-0803204c9a66"); | ||
77 | private static UUID snd_WoodPlastic = new UUID("be7295c0-a158-11e1-b3dd-0803205c9a66"); | ||
78 | private static UUID snd_WoodRubber = new UUID("be7295c0-a158-11e1-b3dd-0803206c9a66"); | ||
79 | |||
80 | private static UUID snd_FleshStone = new UUID("be7295c0-a158-11e1-b3dd-0804200c9a66"); | ||
81 | private static UUID snd_FleshMetal = new UUID("be7295c0-a158-11e1-b3dd-0804201c9a66"); | ||
82 | private static UUID snd_FleshGlass = new UUID("be7295c0-a158-11e1-b3dd-0804202c9a66"); | ||
83 | private static UUID snd_FleshWood = new UUID("be7295c0-a158-11e1-b3dd-0804203c9a66"); | ||
84 | private static UUID snd_FleshFlesh = new UUID("be7295c0-a158-11e1-b3dd-0804204c9a66"); | ||
85 | private static UUID snd_FleshPlastic = new UUID("be7295c0-a158-11e1-b3dd-0804205c9a66"); | ||
86 | private static UUID snd_FleshRubber = new UUID("be7295c0-a158-11e1-b3dd-0804206c9a66"); | ||
87 | |||
88 | private static UUID snd_PlasticStone = new UUID("be7295c0-a158-11e1-b3dd-0805200c9a66"); | ||
89 | private static UUID snd_PlasticMetal = new UUID("be7295c0-a158-11e1-b3dd-0805201c9a66"); | ||
90 | private static UUID snd_PlasticGlass = new UUID("be7295c0-a158-11e1-b3dd-0805202c9a66"); | ||
91 | private static UUID snd_PlasticWood = new UUID("be7295c0-a158-11e1-b3dd-0805203c9a66"); | ||
92 | private static UUID snd_PlasticFlesh = new UUID("be7295c0-a158-11e1-b3dd-0805204c9a66"); | ||
93 | private static UUID snd_PlasticPlastic = new UUID("be7295c0-a158-11e1-b3dd-0805205c9a66"); | ||
94 | private static UUID snd_PlasticRubber = new UUID("be7295c0-a158-11e1-b3dd-0805206c9a66"); | ||
95 | |||
96 | private static UUID snd_RubberStone = new UUID("be7295c0-a158-11e1-b3dd-0806200c9a66"); | ||
97 | private static UUID snd_RubberMetal = new UUID("be7295c0-a158-11e1-b3dd-0806201c9a66"); | ||
98 | private static UUID snd_RubberGlass = new UUID("be7295c0-a158-11e1-b3dd-0806202c9a66"); | ||
99 | private static UUID snd_RubberWood = new UUID("be7295c0-a158-11e1-b3dd-0806203c9a66"); | ||
100 | private static UUID snd_RubberFlesh = new UUID("be7295c0-a158-11e1-b3dd-0806204c9a66"); | ||
101 | private static UUID snd_RubberPlastic = new UUID("be7295c0-a158-11e1-b3dd-0806205c9a66"); | ||
102 | private static UUID snd_RubberRubber = new UUID("be7295c0-a158-11e1-b3dd-0806206c9a66"); | ||
103 | |||
104 | // terrain part | ||
105 | private static UUID snd_TerrainStone = new UUID("be7295c0-a158-11e1-b3dd-0807200c9a66"); | ||
106 | private static UUID snd_TerrainMetal = new UUID("be7295c0-a158-11e1-b3dd-0807200c9a66"); | ||
107 | private static UUID snd_TerrainGlass = new UUID("be7295c0-a158-11e1-b3dd-0807200c9a66"); | ||
108 | private static UUID snd_TerrainWood = new UUID("be7295c0-a158-11e1-b3dd-0807200c9a66"); | ||
109 | private static UUID snd_TerrainFlesh = new UUID("be7295c0-a158-11e1-b3dd-0807200c9a66"); | ||
110 | private static UUID snd_TerrainPlastic = new UUID("be7295c0-a158-11e1-b3dd-0807200c9a66"); | ||
111 | private static UUID snd_TerrainRubber = new UUID("be7295c0-a158-11e1-b3dd-0807200c9a66"); | ||
112 | */ | ||
43 | private static UUID snd_StoneStone = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | 113 | private static UUID snd_StoneStone = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); |
44 | private static UUID snd_StoneMetal = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | 114 | private static UUID snd_StoneMetal = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); |
45 | private static UUID snd_StoneGlass = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | 115 | private static UUID snd_StoneGlass = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); |
46 | private static UUID snd_StoneWood = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | 116 | private static UUID snd_StoneWood = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); |
47 | private static UUID snd_StoneFlesh = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | 117 | private static UUID snd_StoneFlesh = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); |
48 | private static UUID snd_StonePlastic = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | 118 | private static UUID snd_StonePlastic = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); |
49 | private static UUID snd_StoneRubber = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | 119 | private static UUID snd_StoneRubber = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); |
50 | 120 | ||
51 | private static UUID snd_MetalStone = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | 121 | private static UUID snd_MetalMetal = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); |
52 | private static UUID snd_MetalMetal = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | 122 | private static UUID snd_MetalGlass = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); |
53 | private static UUID snd_MetalGlass = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | 123 | private static UUID snd_MetalWood = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); |
54 | private static UUID snd_MetalWood = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | 124 | private static UUID snd_MetalFlesh = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); |
55 | private static UUID snd_MetalFlesh = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | 125 | private static UUID snd_MetalPlastic = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); |
56 | private static UUID snd_MetalPlastic = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | 126 | private static UUID snd_MetalRubber = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); |
57 | private static UUID snd_MetalRubber = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | 127 | |
58 | 128 | private static UUID snd_GlassGlass = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | |
59 | private static UUID snd_GlassStone = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | 129 | private static UUID snd_GlassWood = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); |
60 | private static UUID snd_GlassMetal = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | 130 | private static UUID snd_GlassFlesh = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); |
61 | private static UUID snd_GlassGlass = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | 131 | private static UUID snd_GlassPlastic = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); |
62 | private static UUID snd_GlassWood = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | 132 | private static UUID snd_GlassRubber = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); |
63 | private static UUID snd_GlassFlesh = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | 133 | |
64 | private static UUID snd_GlassPlastic = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | 134 | private static UUID snd_WoodWood = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); |
65 | private static UUID snd_GlassRubber = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | 135 | private static UUID snd_WoodFlesh = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); |
66 | 136 | private static UUID snd_WoodPlastic = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | |
67 | private static UUID snd_WoodStone = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | 137 | private static UUID snd_WoodRubber = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); |
68 | private static UUID snd_WoodMetal = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | 138 | |
69 | private static UUID snd_WoodGlass = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | 139 | private static UUID snd_FleshFlesh = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); |
70 | private static UUID snd_WoodWood = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | 140 | private static UUID snd_FleshPlastic = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); |
71 | private static UUID snd_WoodFlesh = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | 141 | private static UUID snd_FleshRubber = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); |
72 | private static UUID snd_WoodPlastic = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | 142 | |
73 | private static UUID snd_WoodRubber = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | 143 | private static UUID snd_PlasticPlastic = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); |
74 | 144 | private static UUID snd_PlasticRubber = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | |
75 | private static UUID snd_FleshStone = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | 145 | |
76 | private static UUID snd_FleshMetal = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | ||
77 | private static UUID snd_FleshGlass = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | ||
78 | private static UUID snd_FleshWood = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | ||
79 | private static UUID snd_FleshFlesh = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | ||
80 | private static UUID snd_FleshPlastic = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | ||
81 | private static UUID snd_FleshRubber = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | ||
82 | |||
83 | private static UUID snd_PlasticStone = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | ||
84 | private static UUID snd_PlasticMetal = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | ||
85 | private static UUID snd_PlasticGlass = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | ||
86 | private static UUID snd_PlasticWood = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | ||
87 | private static UUID snd_PlasticFlesh = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | ||
88 | private static UUID snd_PlasticPlastic = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | ||
89 | private static UUID snd_PlasticRubber = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | ||
90 | |||
91 | private static UUID snd_RubberStone = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | ||
92 | private static UUID snd_RubberMetal = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | ||
93 | private static UUID snd_RubberGlass = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | ||
94 | private static UUID snd_RubberWood = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | ||
95 | private static UUID snd_RubberFlesh = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | ||
96 | private static UUID snd_RubberPlastic = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | ||
97 | private static UUID snd_RubberRubber = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); | 146 | private static UUID snd_RubberRubber = new UUID("c80260ba-41fd-8a46-768a-6bf236360e3a"); |
98 | 147 | ||
99 | // terrain part | 148 | // terrain part |
@@ -114,7 +163,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
114 | snd_TerrainPlastic, | 163 | snd_TerrainPlastic, |
115 | snd_TerrainRubber | 164 | snd_TerrainRubber |
116 | }; | 165 | }; |
117 | 166 | /* | |
167 | //full assimetric sounds | ||
118 | public static UUID[] m_PartPart = { | 168 | public static UUID[] m_PartPart = { |
119 | snd_StoneStone, snd_StoneMetal, snd_StoneGlass, snd_StoneWood, snd_StoneFlesh, snd_StonePlastic, snd_StoneRubber, | 169 | snd_StoneStone, snd_StoneMetal, snd_StoneGlass, snd_StoneWood, snd_StoneFlesh, snd_StonePlastic, snd_StoneRubber, |
120 | snd_MetalStone, snd_MetalMetal, snd_MetalGlass, snd_MetalWood, snd_MetalFlesh, snd_MetalPlastic, snd_MetalRubber, | 170 | snd_MetalStone, snd_MetalMetal, snd_MetalGlass, snd_MetalWood, snd_MetalFlesh, snd_MetalPlastic, snd_MetalRubber, |
@@ -124,10 +174,21 @@ namespace OpenSim.Region.Framework.Scenes | |||
124 | snd_PlasticStone, snd_PlasticMetal, snd_PlasticGlass, snd_PlasticWood, snd_PlasticFlesh, snd_PlasticPlastic, snd_PlasticRubber, | 174 | snd_PlasticStone, snd_PlasticMetal, snd_PlasticGlass, snd_PlasticWood, snd_PlasticFlesh, snd_PlasticPlastic, snd_PlasticRubber, |
125 | snd_RubberStone, snd_RubberMetal, snd_RubberGlass, snd_RubberWood, snd_RubberFlesh, snd_RubberPlastic, snd_RubberRubber | 175 | snd_RubberStone, snd_RubberMetal, snd_RubberGlass, snd_RubberWood, snd_RubberFlesh, snd_RubberPlastic, snd_RubberRubber |
126 | }; | 176 | }; |
127 | 177 | */ | |
128 | public static void PartCollisionSound(SceneObjectPart part,List<uint> Colliders) | 178 | // simetric sounds |
179 | public static UUID[] m_PartPart = { | ||
180 | snd_StoneStone, snd_StoneMetal, snd_StoneGlass, snd_StoneWood, snd_StoneFlesh, snd_StonePlastic, snd_StoneRubber, | ||
181 | snd_StoneMetal, snd_MetalMetal, snd_MetalGlass, snd_MetalWood, snd_MetalFlesh, snd_MetalPlastic, snd_MetalRubber, | ||
182 | snd_StoneGlass, snd_MetalGlass, snd_GlassGlass, snd_GlassWood, snd_GlassFlesh, snd_GlassPlastic, snd_GlassRubber, | ||
183 | snd_StoneWood, snd_MetalWood, snd_GlassWood, snd_WoodWood, snd_WoodFlesh, snd_WoodPlastic, snd_WoodRubber, | ||
184 | snd_StoneFlesh, snd_MetalFlesh, snd_GlassFlesh, snd_WoodFlesh, snd_FleshFlesh, snd_FleshPlastic, snd_FleshRubber, | ||
185 | snd_StonePlastic, snd_MetalPlastic, snd_GlassPlastic, snd_WoodPlastic, snd_FleshPlastic, snd_PlasticPlastic, snd_PlasticRubber, | ||
186 | snd_StoneRubber, snd_MetalRubber, snd_GlassRubber, snd_WoodRubber, snd_FleshRubber, snd_PlasticRubber, snd_RubberRubber | ||
187 | }; | ||
188 | |||
189 | public static void PartCollisionSound(SceneObjectPart part, List<CollisionForSoundInfo> collidersinfolist) | ||
129 | { | 190 | { |
130 | if(Colliders.Count == 0 || part == null) | 191 | if (collidersinfolist.Count == 0 || part == null) |
131 | return; | 192 | return; |
132 | 193 | ||
133 | if (part.VolumeDetectActive || (part.Flags & PrimFlags.Physics) == 0) | 194 | if (part.VolumeDetectActive || (part.Flags & PrimFlags.Physics) == 0) |
@@ -136,121 +197,161 @@ namespace OpenSim.Region.Framework.Scenes | |||
136 | if (part.ParentGroup == null) | 197 | if (part.ParentGroup == null) |
137 | return; | 198 | return; |
138 | 199 | ||
139 | if (part.CollisionSound == part.invalidCollisionSoundUUID) | 200 | if (part.CollisionSoundType < 0) |
140 | return; | 201 | return; |
141 | 202 | ||
142 | UUID soundID; | 203 | float volume = 0.0f; |
143 | int otherMaterial; | 204 | bool HaveSound = false; |
144 | 205 | ||
145 | Vector3 position = part.AbsolutePosition; | 206 | UUID soundID = part.CollisionSound; |
146 | 207 | ||
147 | if (part.CollisionSound != UUID.Zero) | 208 | if (part.CollisionSoundType > 0) |
148 | { | 209 | { |
149 | if (part.CollisionSoundVolume > 0.0f) | 210 | // soundID = part.CollisionSound; |
150 | part.SendCollisionSound(part.CollisionSound, part.CollisionSoundVolume, position); | 211 | volume = part.CollisionSoundVolume; |
151 | return; | 212 | if (volume == 0.0f) |
213 | return; | ||
214 | HaveSound = true; | ||
152 | } | 215 | } |
153 | 216 | ||
154 | int thisMaterial = (int) part.Material; | 217 | bool doneownsound = false; |
218 | |||
219 | int thisMaterial = (int)part.Material; | ||
155 | if (thisMaterial >= MaxMaterials) | 220 | if (thisMaterial >= MaxMaterials) |
156 | thisMaterial = 3; | 221 | thisMaterial = 3; |
157 | |||
158 | int thisMatScaled = thisMaterial * MaxMaterials; | 222 | int thisMatScaled = thisMaterial * MaxMaterials; |
159 | int index; | ||
160 | 223 | ||
161 | bool doneownsound = false; | 224 | CollisionForSoundInfo colInfo; |
225 | uint id; | ||
162 | 226 | ||
163 | foreach (uint Id in Colliders) | 227 | for(int i = 0; i< collidersinfolist.Count; i++) |
164 | { | 228 | { |
165 | if (Id == 0) | 229 | colInfo = collidersinfolist[i]; |
230 | |||
231 | id = colInfo.colliderID; | ||
232 | if (id == 0) // terrain collision | ||
166 | { | 233 | { |
167 | if (!doneownsound) | 234 | if (!doneownsound) |
168 | { | 235 | { |
169 | soundID = m_TerrainPart[thisMaterial]; | 236 | if (!HaveSound) |
170 | part.SendCollisionSound(soundID, 1.0, position); | 237 | { |
238 | volume = Math.Abs(colInfo.relativeVel); | ||
239 | if (volume < 0.2f) | ||
240 | continue; | ||
241 | |||
242 | volume *= volume * .0625f; // 4m/s == full volume | ||
243 | if (volume > 1.0f) | ||
244 | volume = 1.0f; | ||
245 | |||
246 | soundID = m_TerrainPart[thisMaterial]; | ||
247 | } | ||
248 | part.SendCollisionSound(soundID, volume, colInfo.position); | ||
171 | doneownsound = true; | 249 | doneownsound = true; |
172 | } | 250 | } |
173 | continue; | 251 | continue; |
174 | } | 252 | } |
175 | 253 | ||
176 | SceneObjectPart otherPart = part.ParentGroup.Scene.GetSceneObjectPart(Id); | 254 | SceneObjectPart otherPart = part.ParentGroup.Scene.GetSceneObjectPart(id); |
177 | if (otherPart != null) | 255 | if (otherPart != null) |
178 | { | 256 | { |
179 | if (otherPart.CollisionSound == part.invalidCollisionSoundUUID || otherPart.VolumeDetectActive) | 257 | if (otherPart.CollisionSoundType < 0 || otherPart.VolumeDetectActive) |
180 | continue; | 258 | continue; |
181 | if (otherPart.CollisionSound != UUID.Zero) | 259 | |
182 | otherPart.SendCollisionSound(otherPart.CollisionSound, otherPart.CollisionSoundVolume, position); | 260 | if (!HaveSound) |
183 | else | ||
184 | { | 261 | { |
185 | otherMaterial = (int)otherPart.Material; | 262 | if (otherPart.CollisionSoundType > 0) |
186 | if (otherMaterial >= MaxMaterials) | 263 | { |
187 | otherMaterial = 3; | 264 | soundID = otherPart.CollisionSound; |
188 | index = thisMatScaled + otherMaterial; | 265 | volume = otherPart.CollisionSoundVolume; |
189 | soundID = m_PartPart[index]; | 266 | if (volume == 0.0f) |
190 | if (doneownsound) | 267 | continue; |
191 | otherPart.SendCollisionSound(soundID, 1.0, position); | 268 | } |
192 | else | 269 | else |
193 | { | 270 | { |
194 | part.SendCollisionSound(soundID, 1.0, position); | 271 | volume = Math.Abs(colInfo.relativeVel); |
195 | doneownsound = true; | 272 | if (volume < 0.2f) |
273 | continue; | ||
274 | |||
275 | volume *= volume * .0625f; // 4m/s == full volume | ||
276 | if (volume > 1.0f) | ||
277 | volume = 1.0f; | ||
278 | |||
279 | int otherMaterial = (int)otherPart.Material; | ||
280 | if (otherMaterial >= MaxMaterials) | ||
281 | otherMaterial = 3; | ||
282 | |||
283 | soundID = m_PartPart[thisMatScaled + otherMaterial]; | ||
196 | } | 284 | } |
197 | } | 285 | } |
198 | } | 286 | |
199 | /* avatars get notification let them trigger the sound | 287 | if (doneownsound) |
200 | else if (!doneownsound) | 288 | otherPart.SendCollisionSound(soundID, volume, colInfo.position); |
201 | { | 289 | else |
202 | ScenePresence av = part.ParentGroup.Scene.GetScenePresence(Id); | ||
203 | if (av != null && (!av.IsChildAgent)) | ||
204 | { | 290 | { |
205 | index = thisMatScaled + 4; // flesh | 291 | part.SendCollisionSound(soundID, volume, colInfo.position); |
206 | soundID = m_PartPart[index]; | ||
207 | part.SendCollisionSound(soundID, 1.0); | ||
208 | doneownsound = true; | 292 | doneownsound = true; |
209 | } | 293 | } |
210 | } | 294 | } |
211 | */ | ||
212 | } | 295 | } |
213 | } | 296 | } |
214 | 297 | ||
215 | public static void AvatarCollisionSound(ScenePresence av, List<uint> Colliders) | 298 | public static void AvatarCollisionSound(ScenePresence av, List<CollisionForSoundInfo> collidersinfolist) |
216 | { | 299 | { |
217 | if (Colliders.Count == 0 || av == null) | 300 | if (collidersinfolist.Count == 0 || av == null) |
218 | return; | 301 | return; |
219 | 302 | ||
220 | UUID soundID; | 303 | UUID soundID; |
221 | int otherMaterial; | 304 | int otherMaterial; |
222 | 305 | ||
223 | int thisMaterial = 3; | 306 | int thisMaterial = 4; // flesh |
224 | 307 | ||
225 | int thisMatScaled = thisMaterial * MaxMaterials; | 308 | int thisMatScaled = thisMaterial * MaxMaterials; |
226 | int index; | ||
227 | // bool doneownsound = false; | ||
228 | 309 | ||
229 | Vector3 position = av.AbsolutePosition; | 310 | // bool doneownsound = false; |
230 | 311 | ||
231 | foreach (uint Id in Colliders) | 312 | CollisionForSoundInfo colInfo; |
313 | uint id; | ||
314 | float volume; | ||
315 | |||
316 | for(int i = 0; i< collidersinfolist.Count; i++) | ||
232 | { | 317 | { |
233 | if (Id == 0) | 318 | colInfo = collidersinfolist[i]; |
319 | |||
320 | id = colInfo.colliderID; | ||
321 | |||
322 | if (id == 0) // no terrain collision sounds for now | ||
234 | { | 323 | { |
235 | continue; | 324 | continue; |
325 | // volume = Math.Abs(colInfo.relativeVel); | ||
326 | // if (volume < 0.2f) | ||
327 | // continue; | ||
328 | |||
236 | } | 329 | } |
237 | 330 | ||
238 | SceneObjectPart otherPart = av.Scene.GetSceneObjectPart(Id); | 331 | SceneObjectPart otherPart = av.Scene.GetSceneObjectPart(id); |
239 | if (otherPart != null) | 332 | if (otherPart != null) |
240 | { | 333 | { |
241 | if (otherPart.CollisionSound == otherPart.invalidCollisionSoundUUID) | 334 | if (otherPart.CollisionSoundType < 0) |
242 | continue; | 335 | continue; |
243 | if (otherPart.CollisionSound != UUID.Zero) | 336 | if (otherPart.CollisionSoundType > 0 && otherPart.CollisionSoundVolume > 0f) |
244 | otherPart.SendCollisionSound(otherPart.CollisionSound, otherPart.CollisionSoundVolume, position); | 337 | otherPart.SendCollisionSound(otherPart.CollisionSound, otherPart.CollisionSoundVolume, colInfo.position); |
245 | else | 338 | else |
246 | { | 339 | { |
340 | volume = Math.Abs(colInfo.relativeVel); | ||
341 | if (volume < 0.2f) | ||
342 | continue; | ||
343 | |||
344 | volume *= volume * .0625f; // 4m/s == full volume | ||
345 | if (volume > 1.0f) | ||
346 | volume = 1.0f; | ||
247 | otherMaterial = (int)otherPart.Material; | 347 | otherMaterial = (int)otherPart.Material; |
248 | if (otherMaterial >= MaxMaterials) | 348 | if (otherMaterial >= MaxMaterials) |
249 | otherMaterial = 3; | 349 | otherMaterial = 3; |
250 | index = thisMatScaled + otherMaterial; | 350 | |
251 | soundID = m_PartPart[index]; | 351 | soundID = m_PartPart[thisMatScaled + otherMaterial]; |
252 | otherPart.SendCollisionSound(soundID, 1.0, position); | 352 | otherPart.SendCollisionSound(soundID, volume, colInfo.position); |
253 | } | 353 | } |
354 | continue; | ||
254 | } | 355 | } |
255 | /* | 356 | /* |
256 | else if (!doneownsound) | 357 | else if (!doneownsound) |
@@ -266,6 +367,5 @@ namespace OpenSim.Region.Framework.Scenes | |||
266 | */ | 367 | */ |
267 | } | 368 | } |
268 | } | 369 | } |
269 | |||
270 | } | 370 | } |
271 | } \ No newline at end of file | 371 | } |