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

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llpreviewanim.cpp
  3.  * @brief LLPreviewAnim class implementation
  4.  *
  5.  * $LicenseInfo:firstyear=2004&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2004-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. #include "llviewerprecompiledheaders.h"
  33. #include "llpreviewanim.h"
  34. #include "llbutton.h"
  35. #include "llresmgr.h"
  36. #include "llinventory.h"
  37. #include "llvoavatarself.h"
  38. #include "llagent.h"          // gAgent
  39. #include "llkeyframemotion.h"
  40. #include "llfilepicker.h"
  41. #include "lllineeditor.h"
  42. #include "lluictrlfactory.h"
  43. #include "lluictrlfactory.h"
  44. extern LLAgent gAgent;
  45. LLPreviewAnim::LLPreviewAnim(const LLSD& key)
  46. : LLPreview( key )
  47. {
  48. //Called from floater reg: LLUICtrlFactory::getInstance()->buildFloater(this,"floater_preview_animation.xml", FALSE);
  49. }
  50. // static
  51. void LLPreviewAnim::endAnimCallback( void *userdata )
  52. {
  53. LLHandle<LLFloater>* handlep = ((LLHandle<LLFloater>*)userdata);
  54. LLFloater* self = handlep->get();
  55. delete handlep; // done with the handle
  56. if (self)
  57. {
  58. self->childSetValue("Anim play btn", FALSE);
  59. self->childSetValue("Anim audition btn", FALSE);
  60. }
  61. }
  62. // virtual
  63. BOOL LLPreviewAnim::postBuild()
  64. {
  65. const LLInventoryItem* item = getItem();
  66. if(item)
  67. {
  68. gAgent.getAvatarObject()->createMotion(item->getAssetUUID()); // preload the animation
  69. childSetText("desc", item->getDescription());
  70. }
  71. childSetAction("Anim play btn",playAnim, this);
  72. childSetAction("Anim audition btn",auditionAnim, this);
  73. childSetCommitCallback("desc", LLPreview::onText, this);
  74. childSetPrevalidate("desc", &LLTextValidate::validateASCIIPrintableNoPipe);
  75. return LLPreview::postBuild();
  76. }
  77. void LLPreviewAnim::activate(e_activation_type type)
  78. {
  79. switch ( type ) 
  80. {
  81. case PLAY:
  82. {
  83. playAnim( (void *) this );
  84. break;
  85. }
  86. case AUDITION:
  87. {
  88. auditionAnim( (void *) this );
  89. break;
  90. }
  91. default:
  92. {
  93. //do nothing
  94. }
  95. }
  96. }
  97. // static
  98. void LLPreviewAnim::playAnim( void *userdata )
  99. {
  100. LLPreviewAnim* self = (LLPreviewAnim*) userdata;
  101. const LLInventoryItem *item = self->getItem();
  102. if(item)
  103. {
  104. LLUUID itemID=item->getAssetUUID();
  105. LLButton* btn = self->getChild<LLButton>("Anim play btn");
  106. if (btn)
  107. {
  108. btn->toggleState();
  109. }
  110. if (self->childGetValue("Anim play btn").asBoolean() ) 
  111. {
  112. self->mPauseRequest = NULL;
  113. gAgent.sendAnimationRequest(itemID, ANIM_REQUEST_START);
  114. LLVOAvatar* avatar = gAgent.getAvatarObject();
  115. LLMotion*   motion = avatar->findMotion(itemID);
  116. if (motion)
  117. {
  118. motion->setDeactivateCallback(&endAnimCallback, (void *)(new LLHandle<LLFloater>(self->getHandle())));
  119. }
  120. }
  121. else
  122. {
  123. gAgent.getAvatarObject()->stopMotion(itemID);
  124. gAgent.sendAnimationRequest(itemID, ANIM_REQUEST_STOP);
  125. }
  126. }
  127. }
  128. // static
  129. void LLPreviewAnim::auditionAnim( void *userdata )
  130. {
  131. LLPreviewAnim* self = (LLPreviewAnim*) userdata;
  132. const LLInventoryItem *item = self->getItem();
  133. if(item)
  134. {
  135. LLUUID itemID=item->getAssetUUID();
  136. LLButton* btn = self->getChild<LLButton>("Anim audition btn");
  137. if (btn)
  138. {
  139. btn->toggleState();
  140. }
  141. if (self->childGetValue("Anim audition btn").asBoolean() ) 
  142. {
  143. self->mPauseRequest = NULL;
  144. gAgent.getAvatarObject()->startMotion(item->getAssetUUID());
  145. LLVOAvatar* avatar = gAgent.getAvatarObject();
  146. LLMotion*   motion = avatar->findMotion(itemID);
  147. if (motion)
  148. {
  149. motion->setDeactivateCallback(&endAnimCallback, (void *)(new LLHandle<LLFloater>(self->getHandle())));
  150. }
  151. }
  152. else
  153. {
  154. gAgent.getAvatarObject()->stopMotion(itemID);
  155. gAgent.sendAnimationRequest(itemID, ANIM_REQUEST_STOP);
  156. }
  157. }
  158. }
  159. // virtual
  160. void LLPreviewAnim::onClose(bool app_quitting)
  161. {
  162. const LLInventoryItem *item = getItem();
  163. if(item)
  164. {
  165. gAgent.getAvatarObject()->stopMotion(item->getAssetUUID());
  166. gAgent.sendAnimationRequest(item->getAssetUUID(), ANIM_REQUEST_STOP);
  167. LLVOAvatar* avatar = gAgent.getAvatarObject();
  168. LLMotion*   motion = avatar->findMotion(item->getAssetUUID());
  169. if (motion)
  170. {
  171. // *TODO: minor memory leak here, user data is never deleted (Use real callbacks)
  172. motion->setDeactivateCallback(NULL, (void *)NULL);
  173. }
  174. }
  175. }