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

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llvisualparam.h
  3.  * @brief Implementation of LLPolyMesh class.
  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_LLVisualParam_H
  33. #define LL_LLVisualParam_H
  34. #include "v3math.h"
  35. #include "llstring.h"
  36. #include "llxmltree.h"
  37. #include <boost/function.hpp>
  38. class LLPolyMesh;
  39. class LLXmlTreeNode;
  40. enum ESex
  41. {
  42. SEX_FEMALE = 0x01,
  43. SEX_MALE = 0x02,
  44. SEX_BOTH = 0x03  // values chosen to allow use as a bit field.
  45. };
  46. enum EVisualParamGroup
  47. {
  48. VISUAL_PARAM_GROUP_TWEAKABLE,
  49. VISUAL_PARAM_GROUP_ANIMATABLE,
  50. NUM_VISUAL_PARAM_GROUPS
  51. };
  52. const S32 MAX_TRANSMITTED_VISUAL_PARAMS = 255;
  53. //-----------------------------------------------------------------------------
  54. // LLVisualParamInfo
  55. // Contains shared data for VisualParams
  56. //-----------------------------------------------------------------------------
  57. class LLVisualParamInfo
  58. {
  59. friend class LLVisualParam;
  60. public:
  61. LLVisualParamInfo();
  62. virtual ~LLVisualParamInfo() {};
  63. virtual BOOL parseXml(LLXmlTreeNode *node);
  64. S32 getID() const { return mID; }
  65. virtual void toStream(std::ostream &out);
  66. protected:
  67. S32 mID; // ID associated with VisualParam
  68. std::string mName; // name (for internal purposes)
  69. std::string mDisplayName; // name displayed to the user
  70. std::string mMinName; // name associated with minimum value
  71. std::string mMaxName; // name associated with maximum value
  72. EVisualParamGroup mGroup; // morph group for separating UI controls
  73. F32 mMinWeight; // minimum weight that can be assigned to this morph target
  74. F32 mMaxWeight; // maximum weight that can be assigned to this morph target
  75. F32 mDefaultWeight;
  76. ESex mSex; // Which gender(s) this param applies to.
  77. };
  78. //-----------------------------------------------------------------------------
  79. // LLVisualParam
  80. // VIRTUAL CLASS
  81. // An interface class for a generalized parametric modification of the avatar mesh
  82. // Contains data that is specific to each Avatar
  83. //-----------------------------------------------------------------------------
  84. class LLVisualParam
  85. {
  86. public:
  87. typedef boost::function<LLVisualParam*(S32)> visual_param_mapper;
  88. LLVisualParam();
  89. virtual ~LLVisualParam();
  90. // Special: These functions are overridden by child classes
  91. // (They can not be virtual because they use specific derived Info classes)
  92. LLVisualParamInfo* getInfo() const { return mInfo; }
  93. //   This sets mInfo and calls initialization functions
  94. BOOL setInfo(LLVisualParamInfo *info);
  95. // Virtual functions
  96. //  Pure virtuals
  97. //virtual BOOL parseData( LLXmlTreeNode *node ) = 0;
  98. virtual void apply( ESex avatar_sex ) = 0;
  99. //  Default functions
  100. virtual void setWeight(F32 weight, BOOL upload_bake);
  101. virtual void setAnimationTarget( F32 target_value, BOOL upload_bake );
  102. virtual void animate(F32 delta, BOOL upload_bake);
  103. virtual void stopAnimating(BOOL upload_bake);
  104. virtual BOOL linkDrivenParams(visual_param_mapper mapper, BOOL only_cross_params);
  105. virtual void resetDrivenParams();
  106. // Interface methods
  107. S32 getID() const { return mID; }
  108. void setID(S32 id)  { llassert(!mInfo); mID = id; }
  109. const std::string& getName() const  { return mInfo->mName; }
  110. const std::string& getDisplayName() const  { return mInfo->mDisplayName; }
  111. const std::string& getMaxDisplayName() const { return mInfo->mMaxName; }
  112. const std::string& getMinDisplayName() const { return mInfo->mMinName; }
  113. void setDisplayName(const std::string& s)   { mInfo->mDisplayName = s; }
  114. void setMaxDisplayName(const std::string& s) { mInfo->mMaxName = s; }
  115. void setMinDisplayName(const std::string& s) { mInfo->mMinName = s; }
  116. EVisualParamGroup getGroup() const  { return mInfo->mGroup; }
  117. F32 getMinWeight() const { return mInfo->mMinWeight; }
  118. F32 getMaxWeight() const { return mInfo->mMaxWeight; }
  119. F32 getDefaultWeight() const  { return mInfo->mDefaultWeight; }
  120. ESex getSex() const { return mInfo->mSex; }
  121. F32 getWeight() const { return mIsAnimating ? mTargetWeight : mCurWeight; }
  122. F32 getCurrentWeight() const  { return mCurWeight; }
  123. F32 getLastWeight() const { return mLastWeight; }
  124. BOOL isAnimating() const { return mIsAnimating; }
  125. LLVisualParam* getNextParam() { return mNext; }
  126. void setNextParam( LLVisualParam *next );
  127. virtual void setAnimating(BOOL is_animating) { mIsAnimating = is_animating && !mIsDummy; }
  128. BOOL getAnimating() const { return mIsAnimating; }
  129. void setIsDummy(BOOL is_dummy) { mIsDummy = is_dummy; }
  130. protected:
  131. F32 mCurWeight; // current weight
  132. F32 mLastWeight; // last weight
  133. LLVisualParam* mNext; // next param in a shared chain
  134. F32 mTargetWeight; // interpolation target
  135. BOOL mIsAnimating; // this value has been given an interpolation target
  136. BOOL mIsDummy;  // this is used to prevent dummy visual params from animating
  137. S32 mID; // id for storing weight/morphtarget compares compactly
  138. LLVisualParamInfo *mInfo;
  139. };
  140. #endif // LL_LLVisualParam_H