llmaterialtable.h
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:6k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llmaterialtable.h
  3.  * @brief Table of material information for the viewer UI
  4.  *
  5.  * $LicenseInfo:firstyear=2001&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2001-2010, Linden Research, Inc.
  8.  * 
  9.  * Second Life Viewer Source Code
  10.  * The source code in this file ("Source Code") is provided by Linden Lab
  11.  * to you under the terms of the GNU General Public License, version 2.0
  12.  * ("GPL"), unless you have obtained a separate licensing agreement
  13.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  14.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  15.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  16.  * 
  17.  * There are special exceptions to the terms and conditions of the GPL as
  18.  * it is applied to this Source Code. View the full text of the exception
  19.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  20.  * online at
  21.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  22.  * 
  23.  * By copying, modifying or distributing this software, you acknowledge
  24.  * that you have read and understood your obligations described above,
  25.  * and agree to abide by those obligations.
  26.  * 
  27.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  28.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  29.  * COMPLETENESS OR PERFORMANCE.
  30.  * $/LicenseInfo$
  31.  */
  32. #ifndef LL_LLMATERIALTABLE_H
  33. #define LL_LLMATERIALTABLE_H
  34. #include "lluuid.h"
  35. #include "llstring.h"
  36. #include <list>
  37. class LLMaterialInfo;
  38. const U32 LLMATERIAL_INFO_NAME_LENGTH = 256;
  39. // We've moved toward more reasonable mass values for the Havok4 engine.
  40. // The LEGACY_DEFAULT_OBJECT_DENSITY is used to maintain support for
  41. // legacy scripts code (llGetMass()) and script energy consumption.
  42. const F32 DEFAULT_OBJECT_DENSITY = 1000.0f; // per m^3
  43. const F32 LEGACY_DEFAULT_OBJECT_DENSITY = 10.0f;
  44. // Avatars density depends on the collision shape used.  The approximate
  45. // legacy volumes of avatars are:
  46. // Body_Length Body_Width Body_Fat Leg_Length  Volume(m^3)
  47. // -------------------------------------------------------
  48. //    min     |   min    |  min   |    min    |   0.123   |
  49. //    max     |   max    |  max   |    max    |   0.208   |
  50. //
  51. // Either the avatar shape must be tweaked to match those volumes
  52. // or the DEFAULT_AVATAR_DENSITY must be adjusted to achieve the 
  53. // legacy mass.
  54. //
  55. // The current density appears to be low because the mass and
  56. // inertia are computed as if the avatar were a cylinder which
  57. // has more volume than the actual collision shape of the avatar.
  58. // See the physics engine mass properties code for more info.
  59. const F32 DEFAULT_AVATAR_DENSITY = 445.3f; // was 444.24f;
  60. class LLMaterialTable
  61. {
  62. public:
  63. static const F32 FRICTION_MIN;
  64. static const F32 FRICTION_GLASS;
  65. static const F32 FRICTION_LIGHT;
  66. static const F32 FRICTION_METAL;
  67. static const F32 FRICTION_PLASTIC;
  68. static const F32 FRICTION_WOOD;
  69. static const F32 FRICTION_LAND;
  70. static const F32 FRICTION_STONE;
  71. static const F32 FRICTION_FLESH;
  72. static const F32 FRICTION_RUBBER;
  73. static const F32 FRICTION_MAX;
  74. static const F32 RESTITUTION_MIN;
  75. static const F32 RESTITUTION_LAND;
  76. static const F32 RESTITUTION_FLESH;
  77. static const F32 RESTITUTION_STONE;
  78. static const F32 RESTITUTION_METAL;
  79. static const F32 RESTITUTION_WOOD;
  80. static const F32 RESTITUTION_GLASS;
  81. static const F32 RESTITUTION_PLASTIC;
  82. static const F32 RESTITUTION_LIGHT;
  83. static const F32 RESTITUTION_RUBBER;
  84. static const F32 RESTITUTION_MAX;
  85. typedef std::list<LLMaterialInfo*> info_list_t;
  86. info_list_t mMaterialInfoList;
  87. LLUUID *mCollisionSoundMatrix;
  88. LLUUID *mSlidingSoundMatrix;
  89. LLUUID *mRollingSoundMatrix;
  90. static const F32 DEFAULT_FRICTION;
  91. static const F32 DEFAULT_RESTITUTION;
  92. public:
  93. LLMaterialTable();
  94. LLMaterialTable(U8);  // cheat with an overloaded constructor to build our basic table
  95. ~LLMaterialTable();
  96. void initBasicTable();
  97. void initTableTransNames(std::map<std::string, std::string> namemap);
  98. BOOL add(U8 mcode, const std::string& name, const LLUUID &uuid);                  
  99. BOOL addCollisionSound(U8 mcode, U8 mcode2, const LLUUID &uuid);
  100. BOOL addSlidingSound(U8 mcode, U8 mcode2, const LLUUID &uuid);
  101. BOOL addRollingSound(U8 mcode, U8 mcode2, const LLUUID &uuid);
  102. BOOL addShatterSound(U8 mcode, const LLUUID &uuid);
  103. BOOL addDensity(U8 mcode, const F32 &density);
  104. BOOL addFriction(U8 mcode, const F32 &friction);
  105. BOOL addRestitution(U8 mcode, const F32 &restitution);
  106. BOOL addDamageAndEnergy(U8 mcode, const F32 &hp_mod, const F32 &damage_mod, const F32 &ep_mod);
  107. LLUUID getDefaultTextureID(const std::string& name); // LLUUID::null if not found
  108. LLUUID getDefaultTextureID(U8 mcode); // LLUUID::null if not found
  109. U8     getMCode(const std::string& name); // 0 if not found
  110. std::string getName(U8 mcode);
  111. F32 getDensity(U8 mcode);         // kg/m^3, 0 if not found
  112. F32 getFriction(U8 mcode);         // physics values
  113. F32 getRestitution(U8 mcode);     // physics values
  114. F32 getHPMod(U8 mcode);
  115. F32 getDamageMod(U8 mcode);
  116. F32 getEPMod(U8 mcode);
  117. LLUUID getCollisionSoundUUID(U8 mcode, U8 mcode2); 
  118. LLUUID getSlidingSoundUUID(U8 mcode, U8 mcode2); 
  119. LLUUID getRollingSoundUUID(U8 mcode, U8 mcode2); 
  120. LLUUID getShatterSoundUUID(U8 mcode); // LLUUID::null if not found
  121. LLUUID getGroundCollisionSoundUUID(U8 mcode);
  122. LLUUID getGroundSlidingSoundUUID(U8 mcode);
  123. LLUUID getGroundRollingSoundUUID(U8 mcode);
  124. LLUUID getCollisionParticleUUID(U8 mcode, U8 mcode2);
  125. LLUUID getGroundCollisionParticleUUID(U8 mcode);
  126. static LLMaterialTable basic;
  127. };
  128. class LLMaterialInfo
  129. {
  130. public:
  131. U8     mMCode;
  132. std::string mName;
  133. LLUUID mDefaultTextureID;
  134. LLUUID mShatterSoundID;
  135. F32         mDensity;           // kg/m^3
  136. F32         mFriction;
  137. F32         mRestitution;
  138. // damage and energy constants
  139. F32 mHPModifier; // modifier on mass based HP total
  140. F32 mDamageModifier; // modifier on KE based damage
  141. F32 mEPModifier; // modifier on mass based EP total
  142. LLMaterialInfo(U8 mcode, const std::string& name, const LLUUID &uuid)
  143. {
  144. init(mcode,name,uuid);
  145. };
  146. void init(U8 mcode, const std::string& name, const LLUUID &uuid)
  147. {
  148. mDensity = 1000.f;             // default to 1000.0 (water)
  149. mFriction = LLMaterialTable::DEFAULT_FRICTION;
  150. mRestitution = LLMaterialTable::DEFAULT_RESTITUTION;
  151. mHPModifier = 1.f;
  152. mDamageModifier = 1.f;
  153. mEPModifier = 1.f;
  154. mMCode = mcode;
  155. mName = name;
  156. mDefaultTextureID = uuid;
  157. };
  158. ~LLMaterialInfo()
  159. {
  160. };
  161. };
  162. #endif