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

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file lldriverparam.h
  3.  * @brief A visual parameter that drives (controls) other visual parameters.
  4.  *
  5.  * $LicenseInfo:firstyear=2002&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2002-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_LLDRIVERPARAM_H
  33. #define LL_LLDRIVERPARAM_H
  34. #include "llviewervisualparam.h"
  35. #include "llwearabledictionary.h"
  36. class LLVOAvatar;
  37. class LLWearable;
  38. //-----------------------------------------------------------------------------
  39. struct LLDrivenEntryInfo
  40. {
  41. LLDrivenEntryInfo( S32 id, F32 min1, F32 max1, F32 max2, F32 min2 )
  42. : mDrivenID( id ), mMin1( min1 ), mMax1( max1 ), mMax2( max2 ), mMin2( min2 ) {}
  43. S32 mDrivenID;
  44. F32 mMin1;
  45. F32 mMax1;
  46. F32 mMax2;
  47. F32 mMin2;
  48. };
  49. struct LLDrivenEntry
  50. {
  51. LLDrivenEntry( LLViewerVisualParam* param, LLDrivenEntryInfo *info )
  52. : mParam( param ), mInfo( info ) {}
  53. LLViewerVisualParam* mParam;
  54. LLDrivenEntryInfo*  mInfo;
  55. };
  56. //-----------------------------------------------------------------------------
  57. class LLDriverParamInfo : public LLViewerVisualParamInfo
  58. {
  59. friend class LLDriverParam;
  60. public:
  61. LLDriverParamInfo();
  62. /*virtual*/ ~LLDriverParamInfo() {};
  63. /*virtual*/ BOOL parseXml(LLXmlTreeNode* node);
  64. /*virtual*/ void toStream(std::ostream &out);
  65. protected:
  66. typedef std::deque<LLDrivenEntryInfo> entry_info_list_t;
  67. entry_info_list_t mDrivenInfoList;
  68. };
  69. //-----------------------------------------------------------------------------
  70. class LLDriverParam : public LLViewerVisualParam
  71. {
  72. public:
  73. LLDriverParam(LLVOAvatar *avatarp);
  74. LLDriverParam(LLWearable *wearablep);
  75. ~LLDriverParam();
  76. // Special: These functions are overridden by child classes
  77. LLDriverParamInfo* getInfo() const { return (LLDriverParamInfo*)mInfo; }
  78. //   This sets mInfo and calls initialization functions
  79. BOOL setInfo(LLDriverParamInfo *info);
  80. void setWearable(LLWearable *wearablep);
  81. void setAvatar(LLVOAvatar *avatarp);
  82. void updateCrossDrivenParams(EWearableType driven_type);
  83. /*virtual*/ LLViewerVisualParam* cloneParam(LLWearable* wearable) const;
  84. // LLVisualParam Virtual functions
  85. ///*virtual*/ BOOL parseData(LLXmlTreeNode* node);
  86. /*virtual*/ void apply( ESex sex ) {} // apply is called separately for each driven param.
  87. /*virtual*/ void setWeight(F32 weight, BOOL upload_bake);
  88. /*virtual*/ void setAnimationTarget( F32 target_value, BOOL upload_bake );
  89. /*virtual*/ void stopAnimating(BOOL upload_bake);
  90. /*virtual*/ BOOL linkDrivenParams(visual_param_mapper mapper, BOOL only_cross_params);
  91. /*virtual*/ void resetDrivenParams();
  92. // LLViewerVisualParam Virtual functions
  93. /*virtual*/ F32 getTotalDistortion();
  94. /*virtual*/ const LLVector3& getAvgDistortion();
  95. /*virtual*/ F32 getMaxDistortion();
  96. /*virtual*/ LLVector3 getVertexDistortion(S32 index, LLPolyMesh *poly_mesh);
  97. /*virtual*/ const LLVector3* getFirstDistortion(U32 *index, LLPolyMesh **poly_mesh);
  98. /*virtual*/ const LLVector3* getNextDistortion(U32 *index, LLPolyMesh **poly_mesh);
  99. protected:
  100. F32 getDrivenWeight(const LLDrivenEntry* driven, F32 input_weight);
  101. void setDrivenWeight(LLDrivenEntry *driven, F32 driven_weight, bool upload_bake);
  102. LLVector3 mDefaultVec; // temp holder
  103. typedef std::vector<LLDrivenEntry> entry_list_t;
  104. entry_list_t mDriven;
  105. LLViewerVisualParam* mCurrentDistortionParam;
  106. // Backlink only; don't make this an LLPointer.
  107. LLVOAvatar* mAvatarp;
  108. LLWearable* mWearablep;
  109. };
  110. #endif  // LL_LLDRIVERPARAM_H