llmaterialtable.cpp

Go to the documentation of this file.
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         // specify densities for these materials. . . 
00088     // these were taken from http://www.mcelwee.net/html/densities_of_various_materials.html
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         // add damage and energy values
00100         addDamageAndEnergy(LL_MCODE_STONE, 1.f, 1.f, 1.f);      // concrete
00101         addDamageAndEnergy(LL_MCODE_METAL, 1.f, 1.f, 1.f);  // steel
00102         addDamageAndEnergy(LL_MCODE_GLASS, 1.f, 1.f, 1.f);  // borosilicate glass
00103         addDamageAndEnergy(LL_MCODE_WOOD, 1.f, 1.f, 1.f);    // southern pine
00104         addDamageAndEnergy(LL_MCODE_FLESH, 1.f, 1.f, 1.f);  // saltwater
00105         addDamageAndEnergy(LL_MCODE_PLASTIC, 1.f, 1.f, 1.f); // HDPE
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);       // concrete
00110         addFriction(LL_MCODE_METAL,0.3f);  // steel
00111         addFriction(LL_MCODE_GLASS,0.2f);  // borosilicate glass
00112         addFriction(LL_MCODE_WOOD,0.6f);    // southern pine
00113         addFriction(LL_MCODE_FLESH,0.9f);  // saltwater
00114         addFriction(LL_MCODE_PLASTIC,0.4f); // HDPE
00115         addFriction(LL_MCODE_RUBBER,0.9f); //
00116         addFriction(LL_MCODE_LIGHT,0.2f); //
00117 
00118         addRestitution(LL_MCODE_STONE,0.4f);    // concrete
00119         addRestitution(LL_MCODE_METAL,0.4f);  // steel
00120         addRestitution(LL_MCODE_GLASS,0.7f);  // borosilicate glass
00121         addRestitution(LL_MCODE_WOOD,0.5f);    // southern pine
00122         addRestitution(LL_MCODE_FLESH,0.3f);  // saltwater
00123         addRestitution(LL_MCODE_PLASTIC,0.7f); // HDPE
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         //  CollisionSounds
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         //  Sliding Sounds
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         //  Rolling Sounds
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         // Add at the end so the order in menus matches the order in this
00292         // file.  JNC 11.30.01
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         //llinfos << "code 1: " << ((U32) mcode) << " code 2:" << ((U32) mcode2) << llendl;
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                 //llinfos << "Null Sound" << llendl;
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         //  Create material appropriate sounds for collisions with the ground 
00537         //  For now, simply return a single sound for all materials 
00538         return SND_STONE_DIRT_02;
00539 }
00540 
00541 LLUUID LLMaterialTable::getGroundSlidingSoundUUID(U8 mcode)
00542 {       
00543         //  Create material-specific sound for sliding on ground
00544         //  For now, just return a single sound 
00545         return SND_SLIDE_STONE_STONE_01;
00546 }
00547 
00548 LLUUID LLMaterialTable::getGroundRollingSoundUUID(U8 mcode)
00549 {       
00550         //  Create material-specific sound for rolling on ground
00551         //  For now, just return a single sound 
00552         return SND_SLIDE_STONE_STONE_01;
00553 }
00554 
00555 LLUUID LLMaterialTable::getCollisionParticleUUID(U8 mcode, U8 mcode2)
00556 {       
00557         //  Returns an appropriate UUID to use as sprite at collision betweeen objects  
00558         //  For now, just return a single image 
00559         return IMG_SHOT;
00560 }
00561 
00562 LLUUID LLMaterialTable::getGroundCollisionParticleUUID(U8 mcode)
00563 {       
00564         //  Returns an appropriate 
00565         //  For now, just return a single sound 
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 }

Generated on Thu Jul 1 06:08:51 2010 for Second Life Viewer by  doxygen 1.4.7