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

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llemote.cpp
  3.  * @brief Implementation of LLEmote class
  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. //-----------------------------------------------------------------------------
  33. // Header Files
  34. //-----------------------------------------------------------------------------
  35. #include "llviewerprecompiledheaders.h"
  36. #include "llemote.h"
  37. #include "llcharacter.h"
  38. #include "m3math.h"
  39. #include "llvoavatar.h"
  40. //-----------------------------------------------------------------------------
  41. // Constants
  42. //-----------------------------------------------------------------------------
  43. //-----------------------------------------------------------------------------
  44. // LLEmote()
  45. // Class Constructor
  46. //-----------------------------------------------------------------------------
  47. LLEmote::LLEmote(const LLUUID &id) : LLMotion(id)
  48. {
  49. mCharacter = NULL;
  50. //RN: flag face joint as highest priority for now, until we implement a proper animation track
  51. mJointSignature[0][LL_FACE_JOINT_NUM] = 0xff;
  52. mJointSignature[1][LL_FACE_JOINT_NUM] = 0xff;
  53. mJointSignature[2][LL_FACE_JOINT_NUM] = 0xff;
  54. }
  55. //-----------------------------------------------------------------------------
  56. // ~LLEmote()
  57. // Class Destructor
  58. //-----------------------------------------------------------------------------
  59. LLEmote::~LLEmote()
  60. {
  61. }
  62. //-----------------------------------------------------------------------------
  63. // LLEmote::onInitialize(LLCharacter *character)
  64. //-----------------------------------------------------------------------------
  65. LLMotion::LLMotionInitStatus LLEmote::onInitialize(LLCharacter *character)
  66. {
  67. mCharacter = character;
  68. return STATUS_SUCCESS;
  69. }
  70. //-----------------------------------------------------------------------------
  71. // LLEmote::onActivate()
  72. //-----------------------------------------------------------------------------
  73. BOOL LLEmote::onActivate()
  74. {
  75. LLVisualParam* default_param = mCharacter->getVisualParam( "Express_Closed_Mouth" );
  76. if( default_param )
  77. {
  78. default_param->setWeight( default_param->getMaxWeight(), FALSE );
  79. }
  80. mParam = mCharacter->getVisualParam(mName.c_str());
  81. if (mParam)
  82. {
  83. mParam->setWeight(0.f, FALSE);
  84. mCharacter->updateVisualParams();
  85. }
  86. return TRUE;
  87. }
  88. //-----------------------------------------------------------------------------
  89. // LLEmote::onUpdate()
  90. //-----------------------------------------------------------------------------
  91. BOOL LLEmote::onUpdate(F32 time, U8* joint_mask)
  92. {
  93. if( mParam )
  94. {
  95. F32 weight = mParam->getMinWeight() + mPose.getWeight() * (mParam->getMaxWeight() - mParam->getMinWeight());
  96. mParam->setWeight(weight, FALSE);
  97. // Cross fade against the default parameter
  98. LLVisualParam* default_param = mCharacter->getVisualParam( "Express_Closed_Mouth" );
  99. if( default_param )
  100. {
  101. F32 default_param_weight = default_param->getMinWeight() + 
  102. (1.f - mPose.getWeight()) * ( default_param->getMaxWeight() - default_param->getMinWeight() );
  103. default_param->setWeight( default_param_weight, FALSE );
  104. }
  105. mCharacter->updateVisualParams();
  106. }
  107. return TRUE;
  108. }
  109. //-----------------------------------------------------------------------------
  110. // LLEmote::onDeactivate()
  111. //-----------------------------------------------------------------------------
  112. void LLEmote::onDeactivate()
  113. {
  114. if( mParam )
  115. {
  116. mParam->setWeight( mParam->getDefaultWeight(), FALSE );
  117. }
  118. LLVisualParam* default_param = mCharacter->getVisualParam( "Express_Closed_Mouth" );
  119. if( default_param )
  120. {
  121. default_param->setWeight( default_param->getMaxWeight(), FALSE );
  122. }
  123. mCharacter->updateVisualParams();
  124. }
  125. // End