00001
00032 #include "linden_common.h"
00033
00034 #include "llmaterialtable.h"
00035 #include "llstl.h"
00036 #include "material_codes.h"
00037 #include "sound_ids.h"
00038 #include "imageids.h"
00039
00040 LLMaterialTable LLMaterialTable::basic(1);
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065 F32 const LLMaterialTable::FRICTION_MIN = 0.15f;
00066 F32 const LLMaterialTable::FRICTION_GLASS = 0.13f;
00067 F32 const LLMaterialTable::FRICTION_LIGHT = 0.14f;
00068 F32 const LLMaterialTable::FRICTION_METAL = 0.22f;
00069 F32 const LLMaterialTable::FRICTION_PLASTIC = 0.3f;
00070 F32 const LLMaterialTable::FRICTION_WOOD = 0.44f;
00071 F32 const LLMaterialTable::FRICTION_FLESH = 0.46f;
00072 F32 const LLMaterialTable::FRICTION_LAND = 0.58f;
00073 F32 const LLMaterialTable::FRICTION_STONE = 0.6f;
00074 F32 const LLMaterialTable::FRICTION_RUBBER = 0.67f;
00075 F32 const LLMaterialTable::FRICTION_MAX = 0.71f;
00076
00077
00078 F32 const LLMaterialTable::RESTITUTION_MIN = 0.02f;
00079 F32 const LLMaterialTable::RESTITUTION_LAND = LLMaterialTable::RESTITUTION_MIN;
00080 F32 const LLMaterialTable::RESTITUTION_FLESH = 0.2f;
00081 F32 const LLMaterialTable::RESTITUTION_STONE = 0.4f;
00082 F32 const LLMaterialTable::RESTITUTION_METAL = 0.4f;
00083 F32 const LLMaterialTable::RESTITUTION_WOOD = 0.5f;
00084 F32 const LLMaterialTable::RESTITUTION_GLASS = 0.7f;
00085 F32 const LLMaterialTable::RESTITUTION_PLASTIC = 0.7f;
00086 F32 const LLMaterialTable::RESTITUTION_LIGHT = 0.7f;
00087 F32 const LLMaterialTable::RESTITUTION_RUBBER = 0.9f;
00088 F32 const LLMaterialTable::RESTITUTION_MAX = 0.95f;
00089
00090 F32 const LLMaterialTable::DEFAULT_FRICTION = 0.5f;
00091 F32 const LLMaterialTable::DEFAULT_RESTITUTION = 0.4f;
00092
00093 LLMaterialTable::LLMaterialTable()
00094 {
00095 }
00096
00097 LLMaterialTable::LLMaterialTable(U8 isBasic)
00098 {
00099 initBasicTable();
00100 }
00101
00102 LLMaterialTable::~LLMaterialTable()
00103 {
00104 if (mCollisionSoundMatrix)
00105 {
00106 delete [] mCollisionSoundMatrix;
00107 mCollisionSoundMatrix = NULL;
00108 }
00109
00110 if (mSlidingSoundMatrix)
00111 {
00112 delete [] mSlidingSoundMatrix;
00113 mSlidingSoundMatrix = NULL;
00114 }
00115
00116 if (mRollingSoundMatrix)
00117 {
00118 delete [] mRollingSoundMatrix;
00119 mRollingSoundMatrix = NULL;
00120 }
00121
00122 for_each(mMaterialInfoList.begin(), mMaterialInfoList.end(), DeletePointer());
00123 mMaterialInfoList.clear();
00124 }
00125
00126 void LLMaterialTable::initBasicTable()
00127 {
00128 add(LL_MCODE_STONE,"Stone", LL_DEFAULT_STONE_UUID);
00129 add(LL_MCODE_METAL,"Metal", LL_DEFAULT_METAL_UUID);
00130 add(LL_MCODE_GLASS,"Glass", LL_DEFAULT_GLASS_UUID);
00131 add(LL_MCODE_WOOD,"Wood", LL_DEFAULT_WOOD_UUID);
00132 add(LL_MCODE_FLESH,"Flesh", LL_DEFAULT_FLESH_UUID);
00133 add(LL_MCODE_PLASTIC,"Plastic", LL_DEFAULT_PLASTIC_UUID);
00134 add(LL_MCODE_RUBBER,"Rubber", LL_DEFAULT_RUBBER_UUID);
00135 add(LL_MCODE_LIGHT,"Light", LL_DEFAULT_LIGHT_UUID);
00136
00137
00138
00139
00140 addDensity(LL_MCODE_STONE,30.f);
00141 addDensity(LL_MCODE_METAL,50.f);
00142 addDensity(LL_MCODE_GLASS,20.f);
00143 addDensity(LL_MCODE_WOOD,10.f);
00144 addDensity(LL_MCODE_FLESH,10.f);
00145 addDensity(LL_MCODE_PLASTIC,5.f);
00146 addDensity(LL_MCODE_RUBBER,0.5f);
00147 addDensity(LL_MCODE_LIGHT,20.f);
00148
00149
00150 addDamageAndEnergy(LL_MCODE_STONE, 1.f, 1.f, 1.f);
00151 addDamageAndEnergy(LL_MCODE_METAL, 1.f, 1.f, 1.f);
00152 addDamageAndEnergy(LL_MCODE_GLASS, 1.f, 1.f, 1.f);
00153 addDamageAndEnergy(LL_MCODE_WOOD, 1.f, 1.f, 1.f);
00154 addDamageAndEnergy(LL_MCODE_FLESH, 1.f, 1.f, 1.f);
00155 addDamageAndEnergy(LL_MCODE_PLASTIC, 1.f, 1.f, 1.f);
00156 addDamageAndEnergy(LL_MCODE_RUBBER, 1.f, 1.f, 1.f);
00157 addDamageAndEnergy(LL_MCODE_LIGHT, 1.f, 1.f, 1.f);
00158
00159 addFriction(LL_MCODE_STONE,0.8f);
00160 addFriction(LL_MCODE_METAL,0.3f);
00161 addFriction(LL_MCODE_GLASS,0.2f);
00162 addFriction(LL_MCODE_WOOD,0.6f);
00163 addFriction(LL_MCODE_FLESH,0.9f);
00164 addFriction(LL_MCODE_PLASTIC,0.4f);
00165 addFriction(LL_MCODE_RUBBER,0.9f);
00166 addFriction(LL_MCODE_LIGHT,0.2f);
00167
00168 addRestitution(LL_MCODE_STONE,0.4f);
00169 addRestitution(LL_MCODE_METAL,0.4f);
00170 addRestitution(LL_MCODE_GLASS,0.7f);
00171 addRestitution(LL_MCODE_WOOD,0.5f);
00172 addRestitution(LL_MCODE_FLESH,0.3f);
00173 addRestitution(LL_MCODE_PLASTIC,0.7f);
00174 addRestitution(LL_MCODE_RUBBER,0.9f);
00175 addRestitution(LL_MCODE_LIGHT,0.7f);
00176
00177 addShatterSound(LL_MCODE_STONE,LLUUID("ea296329-0f09-4993-af1b-e6784bab1dc9"));
00178 addShatterSound(LL_MCODE_METAL,LLUUID("d1375446-1c4d-470b-9135-30132433b678"));
00179 addShatterSound(LL_MCODE_GLASS,LLUUID("85cda060-b393-48e6-81c8-2cfdfb275351"));
00180 addShatterSound(LL_MCODE_WOOD,LLUUID("6f00669f-15e0-4793-a63e-c03f62fee43a"));
00181 addShatterSound(LL_MCODE_FLESH,LLUUID("2d8c6f51-149e-4e23-8413-93a379b42b67"));
00182 addShatterSound(LL_MCODE_PLASTIC,LLUUID("d55c7f3c-e1c3-4ddc-9eff-9ef805d9190e"));
00183 addShatterSound(LL_MCODE_RUBBER,LLUUID("212b6d1e-8d9c-4986-b3aa-f3c6df8d987d"));
00184 addShatterSound(LL_MCODE_LIGHT,LLUUID("d55c7f3c-e1c3-4ddc-9eff-9ef805d9190e"));
00185
00186
00187 mCollisionSoundMatrix = new LLUUID[LL_MCODE_END*LL_MCODE_END];
00188 if (mCollisionSoundMatrix)
00189 {
00190 addCollisionSound(LL_MCODE_STONE, LL_MCODE_STONE, SND_STONE_STONE);
00191 addCollisionSound(LL_MCODE_STONE, LL_MCODE_METAL, SND_STONE_METAL);
00192 addCollisionSound(LL_MCODE_STONE, LL_MCODE_GLASS, SND_STONE_GLASS);
00193 addCollisionSound(LL_MCODE_STONE, LL_MCODE_WOOD, SND_STONE_WOOD);
00194 addCollisionSound(LL_MCODE_STONE, LL_MCODE_FLESH, SND_STONE_FLESH);
00195 addCollisionSound(LL_MCODE_STONE, LL_MCODE_PLASTIC, SND_STONE_PLASTIC);
00196 addCollisionSound(LL_MCODE_STONE, LL_MCODE_RUBBER, SND_STONE_RUBBER);
00197 addCollisionSound(LL_MCODE_STONE, LL_MCODE_LIGHT, SND_STONE_PLASTIC);
00198
00199 addCollisionSound(LL_MCODE_METAL, LL_MCODE_METAL, SND_METAL_METAL);
00200 addCollisionSound(LL_MCODE_METAL, LL_MCODE_GLASS, SND_METAL_GLASS);
00201 addCollisionSound(LL_MCODE_METAL, LL_MCODE_WOOD, SND_METAL_WOOD);
00202 addCollisionSound(LL_MCODE_METAL, LL_MCODE_FLESH, SND_METAL_FLESH);
00203 addCollisionSound(LL_MCODE_METAL, LL_MCODE_PLASTIC, SND_METAL_PLASTIC);
00204 addCollisionSound(LL_MCODE_METAL, LL_MCODE_LIGHT, SND_METAL_PLASTIC);
00205 addCollisionSound(LL_MCODE_METAL, LL_MCODE_RUBBER, SND_METAL_RUBBER);
00206
00207 addCollisionSound(LL_MCODE_GLASS, LL_MCODE_GLASS, SND_GLASS_GLASS);
00208 addCollisionSound(LL_MCODE_GLASS, LL_MCODE_WOOD, SND_GLASS_WOOD);
00209 addCollisionSound(LL_MCODE_GLASS, LL_MCODE_FLESH, SND_GLASS_FLESH);
00210 addCollisionSound(LL_MCODE_GLASS, LL_MCODE_PLASTIC, SND_GLASS_PLASTIC);
00211 addCollisionSound(LL_MCODE_GLASS, LL_MCODE_RUBBER, SND_GLASS_RUBBER);
00212 addCollisionSound(LL_MCODE_GLASS, LL_MCODE_LIGHT, SND_GLASS_PLASTIC);
00213
00214 addCollisionSound(LL_MCODE_WOOD, LL_MCODE_WOOD, SND_WOOD_WOOD);
00215 addCollisionSound(LL_MCODE_WOOD, LL_MCODE_FLESH, SND_WOOD_FLESH);
00216 addCollisionSound(LL_MCODE_WOOD, LL_MCODE_PLASTIC, SND_WOOD_PLASTIC);
00217 addCollisionSound(LL_MCODE_WOOD, LL_MCODE_RUBBER, SND_WOOD_RUBBER);
00218 addCollisionSound(LL_MCODE_WOOD, LL_MCODE_LIGHT, SND_WOOD_PLASTIC);
00219
00220 addCollisionSound(LL_MCODE_FLESH, LL_MCODE_FLESH, SND_FLESH_FLESH);
00221 addCollisionSound(LL_MCODE_FLESH, LL_MCODE_PLASTIC, SND_FLESH_PLASTIC);
00222 addCollisionSound(LL_MCODE_FLESH, LL_MCODE_RUBBER, SND_FLESH_RUBBER);
00223 addCollisionSound(LL_MCODE_FLESH, LL_MCODE_LIGHT, SND_FLESH_PLASTIC);
00224
00225 addCollisionSound(LL_MCODE_RUBBER, LL_MCODE_RUBBER, SND_RUBBER_RUBBER);
00226 addCollisionSound(LL_MCODE_RUBBER, LL_MCODE_PLASTIC, SND_RUBBER_PLASTIC);
00227 addCollisionSound(LL_MCODE_RUBBER, LL_MCODE_LIGHT, SND_RUBBER_PLASTIC);
00228
00229 addCollisionSound(LL_MCODE_PLASTIC, LL_MCODE_PLASTIC, SND_PLASTIC_PLASTIC);
00230 addCollisionSound(LL_MCODE_PLASTIC, LL_MCODE_LIGHT, SND_PLASTIC_PLASTIC);
00231
00232 addCollisionSound(LL_MCODE_LIGHT, LL_MCODE_LIGHT, SND_PLASTIC_PLASTIC);
00233 }
00234
00235
00236 mSlidingSoundMatrix = new LLUUID[LL_MCODE_END*LL_MCODE_END];
00237 if (mSlidingSoundMatrix)
00238 {
00239 addSlidingSound(LL_MCODE_STONE, LL_MCODE_STONE, SND_SLIDE_STONE_STONE);
00240 addSlidingSound(LL_MCODE_STONE, LL_MCODE_METAL, SND_SLIDE_STONE_STONE_01);
00241 addSlidingSound(LL_MCODE_STONE, LL_MCODE_GLASS, SND_SLIDE_STONE_STONE_01);
00242 addSlidingSound(LL_MCODE_STONE, LL_MCODE_WOOD, SND_SLIDE_STONE_WOOD);
00243 addSlidingSound(LL_MCODE_STONE, LL_MCODE_FLESH, SND_SLIDE_STONE_STONE_01);
00244 addSlidingSound(LL_MCODE_STONE, LL_MCODE_PLASTIC, SND_SLIDE_STONE_PLASTIC);
00245 addSlidingSound(LL_MCODE_STONE, LL_MCODE_RUBBER, SND_SLIDE_STONE_RUBBER);
00246 addSlidingSound(LL_MCODE_STONE, LL_MCODE_LIGHT, SND_SLIDE_STONE_PLASTIC);
00247
00248 addSlidingSound(LL_MCODE_METAL, LL_MCODE_METAL, SND_SLIDE_METAL_METAL);
00249 addSlidingSound(LL_MCODE_METAL, LL_MCODE_GLASS, SND_SLIDE_METAL_GLASS);
00250 addSlidingSound(LL_MCODE_METAL, LL_MCODE_WOOD, SND_SLIDE_METAL_WOOD);
00251 addSlidingSound(LL_MCODE_METAL, LL_MCODE_FLESH, SND_SLIDE_METAL_FLESH);
00252 addSlidingSound(LL_MCODE_METAL, LL_MCODE_PLASTIC, SND_SLIDE_STONE_STONE_01);
00253 addSlidingSound(LL_MCODE_METAL, LL_MCODE_RUBBER, SND_SLIDE_METAL_RUBBER);
00254 addSlidingSound(LL_MCODE_METAL, LL_MCODE_LIGHT, SND_SLIDE_STONE_STONE_01);
00255
00256 addSlidingSound(LL_MCODE_GLASS, LL_MCODE_GLASS, SND_SLIDE_STONE_STONE_01);
00257 addSlidingSound(LL_MCODE_GLASS, LL_MCODE_WOOD, SND_SLIDE_STONE_STONE_01);
00258 addSlidingSound(LL_MCODE_GLASS, LL_MCODE_FLESH, SND_SLIDE_STONE_STONE_01);
00259 addSlidingSound(LL_MCODE_GLASS, LL_MCODE_PLASTIC, SND_SLIDE_STONE_STONE_01);
00260 addSlidingSound(LL_MCODE_GLASS, LL_MCODE_RUBBER, SND_SLIDE_STONE_STONE_01);
00261 addSlidingSound(LL_MCODE_GLASS, LL_MCODE_LIGHT, SND_SLIDE_STONE_STONE_01);
00262
00263 addSlidingSound(LL_MCODE_WOOD, LL_MCODE_WOOD, SND_SLIDE_WOOD_WOOD);
00264 addSlidingSound(LL_MCODE_WOOD, LL_MCODE_FLESH, SND_SLIDE_WOOD_FLESH);
00265 addSlidingSound(LL_MCODE_WOOD, LL_MCODE_PLASTIC, SND_SLIDE_WOOD_PLASTIC);
00266 addSlidingSound(LL_MCODE_WOOD, LL_MCODE_RUBBER, SND_SLIDE_STONE_STONE_01);
00267 addSlidingSound(LL_MCODE_WOOD, LL_MCODE_LIGHT, SND_SLIDE_WOOD_PLASTIC);
00268
00269 addSlidingSound(LL_MCODE_FLESH, LL_MCODE_FLESH, SND_SLIDE_FLESH_FLESH);
00270 addSlidingSound(LL_MCODE_FLESH, LL_MCODE_PLASTIC, SND_SLIDE_STONE_STONE_01);
00271 addSlidingSound(LL_MCODE_FLESH, LL_MCODE_RUBBER, SND_SLIDE_STONE_STONE_01);
00272 addSlidingSound(LL_MCODE_FLESH, LL_MCODE_LIGHT, SND_SLIDE_STONE_STONE_01);
00273
00274 addSlidingSound(LL_MCODE_RUBBER, LL_MCODE_RUBBER, SND_SLIDE_STONE_STONE_01);
00275 addSlidingSound(LL_MCODE_RUBBER, LL_MCODE_PLASTIC, SND_SLIDE_RUBBER_PLASTIC);
00276 addSlidingSound(LL_MCODE_RUBBER, LL_MCODE_LIGHT, SND_SLIDE_RUBBER_PLASTIC);
00277
00278 addSlidingSound(LL_MCODE_PLASTIC, LL_MCODE_PLASTIC, SND_SLIDE_STONE_STONE_01);
00279 addSlidingSound(LL_MCODE_PLASTIC, LL_MCODE_LIGHT, SND_SLIDE_STONE_STONE_01);
00280
00281 addSlidingSound(LL_MCODE_LIGHT, LL_MCODE_LIGHT, SND_SLIDE_STONE_STONE_01);
00282 }
00283
00284
00285 mRollingSoundMatrix = new LLUUID[LL_MCODE_END*LL_MCODE_END];
00286 if (mRollingSoundMatrix)
00287 {
00288 addRollingSound(LL_MCODE_STONE, LL_MCODE_STONE, SND_ROLL_STONE_STONE);
00289 addRollingSound(LL_MCODE_STONE, LL_MCODE_METAL, SND_SLIDE_STONE_STONE_01);
00290 addRollingSound(LL_MCODE_STONE, LL_MCODE_GLASS, SND_SLIDE_STONE_STONE_01);
00291 addRollingSound(LL_MCODE_STONE, LL_MCODE_WOOD, SND_ROLL_STONE_WOOD);
00292 addRollingSound(LL_MCODE_STONE, LL_MCODE_FLESH, SND_SLIDE_STONE_STONE_01);
00293 addRollingSound(LL_MCODE_STONE, LL_MCODE_PLASTIC, SND_ROLL_STONE_PLASTIC);
00294 addRollingSound(LL_MCODE_STONE, LL_MCODE_RUBBER, SND_SLIDE_STONE_STONE_01);
00295 addRollingSound(LL_MCODE_STONE, LL_MCODE_LIGHT, SND_ROLL_STONE_PLASTIC);
00296
00297 addRollingSound(LL_MCODE_METAL, LL_MCODE_METAL, SND_SLIDE_STONE_STONE_01);
00298 addRollingSound(LL_MCODE_METAL, LL_MCODE_GLASS, SND_ROLL_METAL_GLASS);
00299 addRollingSound(LL_MCODE_METAL, LL_MCODE_WOOD, SND_ROLL_METAL_WOOD);
00300 addRollingSound(LL_MCODE_METAL, LL_MCODE_FLESH, SND_SLIDE_STONE_STONE_01);
00301 addRollingSound(LL_MCODE_METAL, LL_MCODE_PLASTIC, SND_ROLL_METAL_WOOD);
00302 addRollingSound(LL_MCODE_METAL, LL_MCODE_RUBBER, SND_SLIDE_STONE_STONE_01);
00303 addRollingSound(LL_MCODE_METAL, LL_MCODE_LIGHT, SND_ROLL_METAL_WOOD);
00304
00305 addRollingSound(LL_MCODE_GLASS, LL_MCODE_GLASS, SND_SLIDE_STONE_STONE_01);
00306 addRollingSound(LL_MCODE_GLASS, LL_MCODE_WOOD, SND_ROLL_GLASS_WOOD);
00307 addRollingSound(LL_MCODE_GLASS, LL_MCODE_FLESH, SND_SLIDE_STONE_STONE_01);
00308 addRollingSound(LL_MCODE_GLASS, LL_MCODE_PLASTIC, SND_SLIDE_STONE_STONE_01);
00309 addRollingSound(LL_MCODE_GLASS, LL_MCODE_RUBBER, SND_SLIDE_STONE_STONE_01);
00310 addRollingSound(LL_MCODE_GLASS, LL_MCODE_LIGHT, SND_SLIDE_STONE_STONE_01);
00311
00312 addRollingSound(LL_MCODE_WOOD, LL_MCODE_WOOD, SND_ROLL_WOOD_WOOD);
00313 addRollingSound(LL_MCODE_WOOD, LL_MCODE_FLESH, SND_ROLL_WOOD_FLESH);
00314 addRollingSound(LL_MCODE_WOOD, LL_MCODE_PLASTIC, SND_ROLL_WOOD_PLASTIC);
00315 addRollingSound(LL_MCODE_WOOD, LL_MCODE_RUBBER, SND_SLIDE_STONE_STONE_01);
00316 addRollingSound(LL_MCODE_WOOD, LL_MCODE_LIGHT, SND_ROLL_WOOD_PLASTIC);
00317
00318 addRollingSound(LL_MCODE_FLESH, LL_MCODE_FLESH, SND_SLIDE_STONE_STONE_01);
00319 addRollingSound(LL_MCODE_FLESH, LL_MCODE_PLASTIC, SND_ROLL_FLESH_PLASTIC);
00320 addRollingSound(LL_MCODE_FLESH, LL_MCODE_RUBBER, SND_SLIDE_STONE_STONE_01);
00321 addRollingSound(LL_MCODE_FLESH, LL_MCODE_LIGHT, SND_ROLL_FLESH_PLASTIC);
00322
00323 addRollingSound(LL_MCODE_RUBBER, LL_MCODE_RUBBER, SND_SLIDE_STONE_STONE_01);
00324 addRollingSound(LL_MCODE_RUBBER, LL_MCODE_PLASTIC, SND_SLIDE_STONE_STONE_01);
00325 addRollingSound(LL_MCODE_RUBBER, LL_MCODE_LIGHT, SND_SLIDE_STONE_STONE_01);
00326
00327 addRollingSound(LL_MCODE_PLASTIC, LL_MCODE_PLASTIC, SND_ROLL_PLASTIC_PLASTIC);
00328 addRollingSound(LL_MCODE_PLASTIC, LL_MCODE_LIGHT, SND_ROLL_PLASTIC_PLASTIC);
00329
00330 addRollingSound(LL_MCODE_LIGHT, LL_MCODE_LIGHT, SND_ROLL_PLASTIC_PLASTIC);
00331 }
00332 }
00333
00334 BOOL LLMaterialTable::add(U8 mcode, char* name, const LLUUID &uuid)
00335 {
00336 LLMaterialInfo *infop;
00337
00338 infop = new LLMaterialInfo(mcode,name,uuid);
00339 if (!infop) return FALSE;
00340
00341
00342
00343 mMaterialInfoList.push_back(infop);
00344
00345 return TRUE;
00346 }
00347
00348 BOOL LLMaterialTable::addCollisionSound(U8 mcode, U8 mcode2, const LLUUID &uuid)
00349 {
00350 if (mCollisionSoundMatrix && (mcode < LL_MCODE_END) && (mcode2 < LL_MCODE_END))
00351 {
00352 mCollisionSoundMatrix[mcode * LL_MCODE_END + mcode2] = uuid;
00353 if (mcode != mcode2)
00354 {
00355 mCollisionSoundMatrix[mcode2 * LL_MCODE_END + mcode] = uuid;
00356 }
00357 }
00358 return TRUE;
00359 }
00360
00361 BOOL LLMaterialTable::addSlidingSound(U8 mcode, U8 mcode2, const LLUUID &uuid)
00362 {
00363 if (mSlidingSoundMatrix && (mcode < LL_MCODE_END) && (mcode2 < LL_MCODE_END))
00364 {
00365 mSlidingSoundMatrix[mcode * LL_MCODE_END + mcode2] = uuid;
00366 if (mcode != mcode2)
00367 {
00368 mSlidingSoundMatrix[mcode2 * LL_MCODE_END + mcode] = uuid;
00369 }
00370 }
00371 return TRUE;
00372 }
00373
00374 BOOL LLMaterialTable::addRollingSound(U8 mcode, U8 mcode2, const LLUUID &uuid)
00375 {
00376 if (mRollingSoundMatrix && (mcode < LL_MCODE_END) && (mcode2 < LL_MCODE_END))
00377 {
00378 mRollingSoundMatrix[mcode * LL_MCODE_END + mcode2] = uuid;
00379 if (mcode != mcode2)
00380 {
00381 mRollingSoundMatrix[mcode2 * LL_MCODE_END + mcode] = uuid;
00382 }
00383 }
00384 return TRUE;
00385 }
00386
00387 BOOL LLMaterialTable::addShatterSound(U8 mcode, const LLUUID &uuid)
00388 {
00389 for (info_list_t::iterator iter = mMaterialInfoList.begin();
00390 iter != mMaterialInfoList.end(); ++iter)
00391 {
00392 LLMaterialInfo *infop = *iter;
00393 if (mcode == infop->mMCode)
00394 {
00395 infop->mShatterSoundID = uuid;
00396 return TRUE;
00397 }
00398 }
00399
00400 return FALSE;
00401 }
00402
00403 BOOL LLMaterialTable::addDensity(U8 mcode, const F32 &density)
00404 {
00405 for (info_list_t::iterator iter = mMaterialInfoList.begin();
00406 iter != mMaterialInfoList.end(); ++iter)
00407 {
00408 LLMaterialInfo *infop = *iter;
00409 if (mcode == infop->mMCode)
00410 {
00411 infop->mDensity = density;
00412 return TRUE;
00413 }
00414 }
00415
00416 return FALSE;
00417 }
00418
00419 BOOL LLMaterialTable::addRestitution(U8 mcode, const F32 &restitution)
00420 {
00421 for (info_list_t::iterator iter = mMaterialInfoList.begin();
00422 iter != mMaterialInfoList.end(); ++iter)
00423 {
00424 LLMaterialInfo *infop = *iter;
00425 if (mcode == infop->mMCode)
00426 {
00427 infop->mRestitution = restitution;
00428 return TRUE;
00429 }
00430 }
00431
00432 return FALSE;
00433 }
00434
00435 BOOL LLMaterialTable::addFriction(U8 mcode, const F32 &friction)
00436 {
00437 for (info_list_t::iterator iter = mMaterialInfoList.begin();
00438 iter != mMaterialInfoList.end(); ++iter)
00439 {
00440 LLMaterialInfo *infop = *iter;
00441 if (mcode == infop->mMCode)
00442 {
00443 infop->mFriction = friction;
00444 return TRUE;
00445 }
00446 }
00447
00448 return FALSE;
00449 }
00450
00451 BOOL LLMaterialTable::addDamageAndEnergy(U8 mcode, const F32 &hp_mod, const F32 &damage_mod, const F32 &ep_mod)
00452 {
00453 for (info_list_t::iterator iter = mMaterialInfoList.begin();
00454 iter != mMaterialInfoList.end(); ++iter)
00455 {
00456 LLMaterialInfo *infop = *iter;
00457 if (mcode == infop->mMCode)
00458 {
00459 infop->mHPModifier = hp_mod;
00460 infop->mDamageModifier = damage_mod;
00461 infop->mEPModifier = ep_mod;
00462 return TRUE;
00463 }
00464 }
00465
00466 return FALSE;
00467 }
00468
00469 LLUUID LLMaterialTable::getDefaultTextureID(char* name)
00470 {
00471 for (info_list_t::iterator iter = mMaterialInfoList.begin();
00472 iter != mMaterialInfoList.end(); ++iter)
00473 {
00474 LLMaterialInfo *infop = *iter;
00475 if (!strcmp(name, infop->mName))
00476 {
00477 return infop->mDefaultTextureID;
00478 }
00479 }
00480
00481 return LLUUID::null;
00482 }
00483
00484
00485 LLUUID LLMaterialTable::getDefaultTextureID(U8 mcode)
00486 {
00487 mcode &= LL_MCODE_MASK;
00488 for (info_list_t::iterator iter = mMaterialInfoList.begin();
00489 iter != mMaterialInfoList.end(); ++iter)
00490 {
00491 LLMaterialInfo *infop = *iter;
00492 if (mcode == infop->mMCode)
00493 {
00494 return infop->mDefaultTextureID;
00495 }
00496 }
00497
00498 return LLUUID::null;
00499 }
00500
00501
00502 U8 LLMaterialTable::getMCode(const char* name)
00503 {
00504 for (info_list_t::iterator iter = mMaterialInfoList.begin();
00505 iter != mMaterialInfoList.end(); ++iter)
00506 {
00507 LLMaterialInfo *infop = *iter;
00508 if (!strcmp(name, infop->mName))
00509 {
00510 return infop->mMCode;
00511 }
00512 }
00513
00514 return 0;
00515 }
00516
00517
00518 char* LLMaterialTable::getName(U8 mcode)
00519 {
00520 mcode &= LL_MCODE_MASK;
00521 for (info_list_t::iterator iter = mMaterialInfoList.begin();
00522 iter != mMaterialInfoList.end(); ++iter)
00523 {
00524 LLMaterialInfo *infop = *iter;
00525 if (mcode == infop->mMCode)
00526 {
00527 return infop->mName;
00528 }
00529 }
00530
00531 return NULL;
00532 }
00533
00534
00535 LLUUID LLMaterialTable::getCollisionSoundUUID(U8 mcode, U8 mcode2)
00536 {
00537 mcode &= LL_MCODE_MASK;
00538 mcode2 &= LL_MCODE_MASK;
00539
00540
00541 if (mCollisionSoundMatrix && (mcode < LL_MCODE_END) && (mcode2 < LL_MCODE_END))
00542 {
00543 return(mCollisionSoundMatrix[mcode * LL_MCODE_END + mcode2]);
00544 }
00545 else
00546 {
00547
00548 return(SND_NULL);
00549 }
00550 }
00551
00552 LLUUID LLMaterialTable::getSlidingSoundUUID(U8 mcode, U8 mcode2)
00553 {
00554 mcode &= LL_MCODE_MASK;
00555 mcode2 &= LL_MCODE_MASK;
00556
00557 if (mSlidingSoundMatrix && (mcode < LL_MCODE_END) && (mcode2 < LL_MCODE_END))
00558 {
00559 return(mSlidingSoundMatrix[mcode * LL_MCODE_END + mcode2]);
00560 }
00561 else
00562 {
00563 return(SND_NULL);
00564 }
00565 }
00566
00567 LLUUID LLMaterialTable::getRollingSoundUUID(U8 mcode, U8 mcode2)
00568 {
00569 mcode &= LL_MCODE_MASK;
00570 mcode2 &= LL_MCODE_MASK;
00571
00572 if (mRollingSoundMatrix && (mcode < LL_MCODE_END) && (mcode2 < LL_MCODE_END))
00573 {
00574 return(mRollingSoundMatrix[mcode * LL_MCODE_END + mcode2]);
00575 }
00576 else
00577 {
00578 return(SND_NULL);
00579 }
00580 }
00581
00582 LLUUID LLMaterialTable::getGroundCollisionSoundUUID(U8 mcode)
00583 {
00584
00585
00586 return SND_STONE_DIRT_02;
00587 }
00588
00589 LLUUID LLMaterialTable::getGroundSlidingSoundUUID(U8 mcode)
00590 {
00591
00592
00593 return SND_SLIDE_STONE_STONE_01;
00594 }
00595
00596 LLUUID LLMaterialTable::getGroundRollingSoundUUID(U8 mcode)
00597 {
00598
00599
00600 return SND_SLIDE_STONE_STONE_01;
00601 }
00602
00603 LLUUID LLMaterialTable::getCollisionParticleUUID(U8 mcode, U8 mcode2)
00604 {
00605
00606
00607 return IMG_SHOT;
00608 }
00609
00610 LLUUID LLMaterialTable::getGroundCollisionParticleUUID(U8 mcode)
00611 {
00612
00613
00614 return IMG_SMOKE_POOF;
00615 }
00616
00617
00618 F32 LLMaterialTable::getDensity(U8 mcode)
00619 {
00620 mcode &= LL_MCODE_MASK;
00621 for (info_list_t::iterator iter = mMaterialInfoList.begin();
00622 iter != mMaterialInfoList.end(); ++iter)
00623 {
00624 LLMaterialInfo *infop = *iter;
00625 if (mcode == infop->mMCode)
00626 {
00627 return infop->mDensity;
00628 }
00629 }
00630
00631 return 0.f;
00632 }
00633
00634 F32 LLMaterialTable::getRestitution(U8 mcode)
00635 {
00636 mcode &= LL_MCODE_MASK;
00637 for (info_list_t::iterator iter = mMaterialInfoList.begin();
00638 iter != mMaterialInfoList.end(); ++iter)
00639 {
00640 LLMaterialInfo *infop = *iter;
00641 if (mcode == infop->mMCode)
00642 {
00643 return infop->mRestitution;
00644 }
00645 }
00646
00647 return LLMaterialTable::DEFAULT_RESTITUTION;
00648 }
00649
00650 F32 LLMaterialTable::getFriction(U8 mcode)
00651 {
00652 mcode &= LL_MCODE_MASK;
00653 for (info_list_t::iterator iter = mMaterialInfoList.begin();
00654 iter != mMaterialInfoList.end(); ++iter)
00655 {
00656 LLMaterialInfo *infop = *iter;
00657 if (mcode == infop->mMCode)
00658 {
00659 return infop->mFriction;
00660 }
00661 }
00662
00663 return LLMaterialTable::DEFAULT_FRICTION;
00664 }
00665
00666 F32 LLMaterialTable::getHPMod(U8 mcode)
00667 {
00668 mcode &= LL_MCODE_MASK;
00669 for (info_list_t::iterator iter = mMaterialInfoList.begin();
00670 iter != mMaterialInfoList.end(); ++iter)
00671 {
00672 LLMaterialInfo *infop = *iter;
00673 if (mcode == infop->mMCode)
00674 {
00675 return infop->mHPModifier;
00676 }
00677 }
00678
00679 return 1.f;
00680 }
00681
00682 F32 LLMaterialTable::getDamageMod(U8 mcode)
00683 {
00684 mcode &= LL_MCODE_MASK;
00685 for (info_list_t::iterator iter = mMaterialInfoList.begin();
00686 iter != mMaterialInfoList.end(); ++iter)
00687 {
00688 LLMaterialInfo *infop = *iter;
00689 if (mcode == infop->mMCode)
00690 {
00691 return infop->mDamageModifier;
00692 }
00693 }
00694
00695 return 1.f;
00696 }
00697
00698 F32 LLMaterialTable::getEPMod(U8 mcode)
00699 {
00700 mcode &= LL_MCODE_MASK;
00701 for (info_list_t::iterator iter = mMaterialInfoList.begin();
00702 iter != mMaterialInfoList.end(); ++iter)
00703 {
00704 LLMaterialInfo *infop = *iter;
00705 if (mcode == infop->mMCode)
00706 {
00707 return infop->mEPModifier;
00708 }
00709 }
00710
00711 return 1.f;
00712 }
00713
00714 LLUUID LLMaterialTable::getShatterSoundUUID(U8 mcode)
00715 {
00716 mcode &= LL_MCODE_MASK;
00717 for (info_list_t::iterator iter = mMaterialInfoList.begin();
00718 iter != mMaterialInfoList.end(); ++iter)
00719 {
00720 LLMaterialInfo *infop = *iter;
00721 if (mcode == infop->mMCode)
00722 {
00723 return infop->mShatterSoundID;
00724 }
00725 }
00726
00727 return SND_NULL;
00728 }