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