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

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llvisualparam.cpp
  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. //-----------------------------------------------------------------------------
  33. // Header Files
  34. //-----------------------------------------------------------------------------
  35. #include "linden_common.h"
  36. #include "llvisualparam.h"
  37. //-----------------------------------------------------------------------------
  38. // LLVisualParamInfo()
  39. //-----------------------------------------------------------------------------
  40. LLVisualParamInfo::LLVisualParamInfo()
  41. :
  42. mID( -1 ),
  43. mGroup( VISUAL_PARAM_GROUP_TWEAKABLE ),
  44. mMinWeight( 0.f ),
  45. mMaxWeight( 1.f ),
  46. mDefaultWeight( 0.f ),
  47. mSex( SEX_BOTH )
  48. {
  49. }
  50. //-----------------------------------------------------------------------------
  51. // parseXml()
  52. //-----------------------------------------------------------------------------
  53. BOOL LLVisualParamInfo::parseXml(LLXmlTreeNode *node)
  54. {
  55. // attribute: id
  56. static LLStdStringHandle id_string = LLXmlTree::addAttributeString("id");
  57. node->getFastAttributeS32( id_string, mID );
  58. // attribute: group
  59. U32 group = 0;
  60. static LLStdStringHandle group_string = LLXmlTree::addAttributeString("group");
  61. if( node->getFastAttributeU32( group_string, group ) )
  62. {
  63. if( group < NUM_VISUAL_PARAM_GROUPS )
  64. {
  65. mGroup = (EVisualParamGroup)group;
  66. }
  67. }
  68. // attribute: value_min, value_max
  69. static LLStdStringHandle value_min_string = LLXmlTree::addAttributeString("value_min");
  70. static LLStdStringHandle value_max_string = LLXmlTree::addAttributeString("value_max");
  71. node->getFastAttributeF32( value_min_string, mMinWeight );
  72. node->getFastAttributeF32( value_max_string, mMaxWeight );
  73. // attribute: value_default
  74. F32 default_weight = 0;
  75. static LLStdStringHandle value_default_string = LLXmlTree::addAttributeString("value_default");
  76. if( node->getFastAttributeF32( value_default_string, default_weight ) )
  77. {
  78. mDefaultWeight = llclamp( default_weight, mMinWeight, mMaxWeight );
  79. if( default_weight != mDefaultWeight )
  80. {
  81. llwarns << "value_default attribute is out of range in node " << mName << " " << default_weight << llendl;
  82. }
  83. }
  84. // attribute: sex
  85. std::string sex = "both";
  86. static LLStdStringHandle sex_string = LLXmlTree::addAttributeString("sex");
  87. node->getFastAttributeString( sex_string, sex ); // optional
  88. if( sex == "both" )
  89. {
  90. mSex = SEX_BOTH;
  91. }
  92. else if( sex == "male" )
  93. {
  94. mSex = SEX_MALE;
  95. }
  96. else if( sex == "female" )
  97. {
  98. mSex = SEX_FEMALE;
  99. }
  100. else
  101. {
  102. llwarns << "Avatar file: <param> has invalid sex attribute: " << sex << llendl;
  103. return FALSE;
  104. }
  105. // attribute: name
  106. static LLStdStringHandle name_string = LLXmlTree::addAttributeString("name");
  107. if( !node->getFastAttributeString( name_string, mName ) )
  108. {
  109. llwarns << "Avatar file: <param> is missing name attribute" << llendl;
  110. return FALSE;
  111. }
  112. // attribute: label
  113. static LLStdStringHandle label_string = LLXmlTree::addAttributeString("label");
  114. if( !node->getFastAttributeString( label_string, mDisplayName ) )
  115. {
  116. mDisplayName = mName;
  117. }
  118. // JC - make sure the display name includes the capitalization in the XML file,
  119. // not the lowercased version.
  120. LLStringUtil::toLower(mName);
  121. // attribute: label_min
  122. static LLStdStringHandle label_min_string = LLXmlTree::addAttributeString("label_min");
  123. if( !node->getFastAttributeString( label_min_string, mMinName ) )
  124. {
  125. mMinName = "Less";
  126. }
  127. // attribute: label_max
  128. static LLStdStringHandle label_max_string = LLXmlTree::addAttributeString("label_max");
  129. if( !node->getFastAttributeString( label_max_string, mMaxName ) )
  130. {
  131. mMaxName = "More";
  132. }
  133. return TRUE;
  134. }
  135. //virtual
  136. void LLVisualParamInfo::toStream(std::ostream &out)
  137. {
  138. out <<  mID << "t";
  139. out << mName << "t";
  140. out <<  mDisplayName << "t";
  141. out <<  mMinName << "t";
  142. out <<  mMaxName << "t";
  143. out <<  mGroup << "t";
  144. out <<  mMinWeight << "t";
  145. out <<  mMaxWeight << "t";
  146. out <<  mDefaultWeight << "t";
  147. out <<  mSex << "t";
  148. }
  149. //-----------------------------------------------------------------------------
  150. // LLVisualParam()
  151. //-----------------------------------------------------------------------------
  152. LLVisualParam::LLVisualParam()
  153. :
  154. mCurWeight( 0.f ),
  155. mLastWeight( 0.f ),
  156. mNext( NULL ),
  157. mTargetWeight( 0.f ),
  158. mIsAnimating( FALSE ),
  159. mID( -1 ),
  160. mInfo( 0 ),
  161. mIsDummy(FALSE)
  162. {
  163. }
  164. //-----------------------------------------------------------------------------
  165. // ~LLVisualParam()
  166. //-----------------------------------------------------------------------------
  167. LLVisualParam::~LLVisualParam()
  168. {
  169. delete mNext;
  170. }
  171. /*
  172. //=============================================================================
  173. // These virtual functions should always be overridden,
  174. // but are included here for use as templates
  175. //=============================================================================
  176. //-----------------------------------------------------------------------------
  177. // setInfo()
  178. //-----------------------------------------------------------------------------
  179. BOOL LLVisualParam::setInfo(LLVisualParamInfo *info)
  180. {
  181. llassert(mInfo == NULL);
  182. if (info->mID < 0)
  183. return FALSE;
  184. mInfo = info;
  185. mID = info->mID;
  186. setWeight(getDefaultWeight(), FALSE );
  187. return TRUE;
  188. }
  189. //-----------------------------------------------------------------------------
  190. // parseData()
  191. //-----------------------------------------------------------------------------
  192. BOOL LLVisualParam::parseData(LLXmlTreeNode *node)
  193. {
  194. LLVisualParamInfo *info = new LLVisualParamInfo;
  195. info->parseXml(node);
  196. if (!setInfo(info))
  197. return FALSE;
  198. return TRUE;
  199. }
  200. */
  201. //-----------------------------------------------------------------------------
  202. // setWeight()
  203. //-----------------------------------------------------------------------------
  204. void LLVisualParam::setWeight(F32 weight, BOOL upload_bake)
  205. {
  206. if (mIsAnimating)
  207. {
  208. //RN: allow overshoot
  209. mCurWeight = weight;
  210. }
  211. else if (mInfo)
  212. {
  213. mCurWeight = llclamp(weight, mInfo->mMinWeight, mInfo->mMaxWeight);
  214. }
  215. else
  216. {
  217. mCurWeight = weight;
  218. }
  219. if (mNext)
  220. {
  221. mNext->setWeight(weight, upload_bake);
  222. }
  223. }
  224. //-----------------------------------------------------------------------------
  225. // setAnimationTarget()
  226. //-----------------------------------------------------------------------------
  227. void LLVisualParam::setAnimationTarget(F32 target_value, BOOL upload_bake)
  228. {
  229. // don't animate dummy parameters
  230. if (mIsDummy)
  231. {
  232. setWeight(target_value, upload_bake);
  233. return;
  234. }
  235. if (mInfo)
  236. {
  237. if (getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE)
  238. {
  239. mTargetWeight = llclamp(target_value, mInfo->mMinWeight, mInfo->mMaxWeight);
  240. }
  241. }
  242. else
  243. {
  244. mTargetWeight = target_value;
  245. }
  246. mIsAnimating = TRUE;
  247. if (mNext)
  248. {
  249. mNext->setAnimationTarget(target_value, upload_bake);
  250. }
  251. }
  252. //-----------------------------------------------------------------------------
  253. // setNextParam()
  254. //-----------------------------------------------------------------------------
  255. void LLVisualParam::setNextParam( LLVisualParam *next )
  256. {
  257. llassert(!mNext);
  258. mNext = next;
  259. }
  260. //-----------------------------------------------------------------------------
  261. // animate()
  262. //-----------------------------------------------------------------------------
  263. void LLVisualParam::animate( F32 delta, BOOL upload_bake )
  264. {
  265. if (mIsAnimating)
  266. {
  267. F32 new_weight = ((mTargetWeight - mCurWeight) * delta) + mCurWeight;
  268. setWeight(new_weight, upload_bake);
  269. }
  270. }
  271. //-----------------------------------------------------------------------------
  272. // stopAnimating()
  273. //-----------------------------------------------------------------------------
  274. void LLVisualParam::stopAnimating(BOOL upload_bake)
  275. if (mIsAnimating && getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE)
  276. {
  277. mIsAnimating = FALSE; 
  278. setWeight(mTargetWeight, upload_bake);
  279. }
  280. }
  281. //virtual
  282. BOOL LLVisualParam::linkDrivenParams(visual_param_mapper mapper, BOOL only_cross_params)
  283. {
  284. // nothing to do for non-driver parameters
  285. return TRUE;
  286. }
  287. //virtual 
  288. void LLVisualParam::resetDrivenParams()
  289. {
  290. // nothing to do for non-driver parameters
  291. return;
  292. }