From f15b542c19437670f7f0b6303ec7c259f778c43b Mon Sep 17 00:00:00 2001 From: Armin Weatherwax Date: Mon, 30 Aug 2010 14:21:00 +0200 Subject: Henri Beauchamp: polish up of the animation preview when uploading --- linden/indra/newview/app_settings/settings.xml | 25 +- linden/indra/newview/llfloateranimpreview.cpp | 459 +++++++++++++++++---- linden/indra/newview/llfloateranimpreview.h | 12 +- .../xui/en-us/floater_animation_preview.xml | 9 +- 4 files changed, 406 insertions(+), 99 deletions(-) diff --git a/linden/indra/newview/app_settings/settings.xml b/linden/indra/newview/app_settings/settings.xml index b1917ec..7071de2 100644 --- a/linden/indra/newview/app_settings/settings.xml +++ b/linden/indra/newview/app_settings/settings.xml @@ -518,6 +518,17 @@ <key>Value</key> <integer>0</integer> </map> + <key>PreviewAnimInWorld</key> + <map> + <key>Comment</key> + <string>Play animation preview in-world when uploading</string> + <key>Persist</key> + <integer>1</integer> + <key>Type</key> + <string>Boolean</string> + <key>Value</key> + <integer>0</integer> + </map> <key>PrivateLookAtTarget</key> <map> <key>Comment</key> @@ -8243,10 +8254,10 @@ <string>Rect</string> <key>Value</key> <array> - <integer>11</integer> - <integer>459</integer> - <integer>311</integer> - <integer>173</integer> + <integer>0</integer> + <integer>85</integer> + <integer>300</integer> + <integer>0</integer> </array> </map> <key>PreviewClassifiedRect</key> @@ -8307,9 +8318,9 @@ <string>Rect</string> <key>Value</key> <array> - <integer>0</integer> - <integer>530</integer> - <integer>420</integer> + <integer>0</integer> + <integer>85</integer> + <integer>300</integer> <integer>0</integer> </array> </map> diff --git a/linden/indra/newview/llfloateranimpreview.cpp b/linden/indra/newview/llfloateranimpreview.cpp index ce7737d..da1d5fc 100644 --- a/linden/indra/newview/llfloateranimpreview.cpp +++ b/linden/indra/newview/llfloateranimpreview.cpp @@ -162,12 +162,27 @@ BOOL LLFloaterAnimPreview::postBuild() return FALSE; } + mInWorld = gSavedSettings.getBOOL("PreviewAnimInWorld"); + childSetCommitCallback("name_form", onCommitName, this); childSetLabelArg("ok_btn", "[UPLOADFEE]", gHippoGridManager->getConnectedGrid()->getUploadFee()); childSetAction("ok_btn", onBtnOK, this); setDefaultBtn(); + if (mInWorld) + { + r = getRect(); + translate(0, 230); + reshape(r.getWidth(), r.getHeight() - 230); + childSetValue("bad_animation_text", getString("in_world")); + childShow("bad_animation_text"); + } + else + { + childHide("bad_animation_text"); + } + mPreviewRect.set(PREVIEW_HPAD, PREVIEW_TEXTURE_HEIGHT, getRect().getWidth() - PREVIEW_HPAD, @@ -209,8 +224,6 @@ BOOL LLFloaterAnimPreview::postBuild() r.set(r.mRight + PREVIEW_HPAD, y, getRect().getWidth() - PREVIEW_HPAD, y - BTN_HEIGHT); //childSetCommitCallback("playback_slider", onSliderMove, this); - childHide("bad_animation_text"); - //childSetCommitCallback("preview_base_anim", onCommitBaseAnim, this); //childSetValue("preview_base_anim", "Standing"); @@ -275,7 +288,14 @@ BOOL LLFloaterAnimPreview::postBuild() // motion will be returned, but it will be in a load-pending state, as this is a new motion // this motion will not request an asset transfer until next update, so we have a chance to // load the keyframe data locally - motionp = (LLKeyframeMotion*)mAnimPreview->getDummyAvatar()->createMotion(mMotionID); + if (mInWorld) + { + motionp = (LLKeyframeMotion*)gAgent.getAvatarObject()->createMotion(mMotionID); + } + else + { + motionp = (LLKeyframeMotion*)mAnimPreview->getDummyAvatar()->createMotion(mMotionID); + } // create data buffer for keyframe initialization S32 buffer_size = loaderp->getOutputSize(); @@ -293,24 +313,30 @@ BOOL LLFloaterAnimPreview::postBuild() if (success) { setAnimCallbacks() ; - - const LLBBoxLocal &pelvis_bbox = motionp->getPelvisBBox(); - LLVector3 temp = pelvis_bbox.getCenter(); - // only consider XY? - //temp.mV[VZ] = 0.f; - F32 pelvis_offset = temp.magVec(); + if (!mInWorld) + { + const LLBBoxLocal &pelvis_bbox = motionp->getPelvisBBox(); - temp = pelvis_bbox.getExtent(); - //temp.mV[VZ] = 0.f; - F32 pelvis_max_displacement = pelvis_offset + (temp.magVec() * 0.5f) + 1.f; - - F32 camera_zoom = LLViewerCamera::getInstance()->getDefaultFOV() / (2.f * atan(pelvis_max_displacement / PREVIEW_CAMERA_DISTANCE)); - - mAnimPreview->setZoom(camera_zoom); + LLVector3 temp = pelvis_bbox.getCenter(); + // only consider XY? + //temp.mV[VZ] = 0.f; + F32 pelvis_offset = temp.magVec(); + + temp = pelvis_bbox.getExtent(); + //temp.mV[VZ] = 0.f; + F32 pelvis_max_displacement = pelvis_offset + (temp.magVec() * 0.5f) + 1.f; + + F32 camera_zoom = LLViewerCamera::getInstance()->getDefaultFOV() / (2.f * atan(pelvis_max_displacement / PREVIEW_CAMERA_DISTANCE)); + + mAnimPreview->setZoom(camera_zoom); + } motionp->setName(childGetValue("name_form").asString()); - mAnimPreview->getDummyAvatar()->startMotion(mMotionID); + if (!mInWorld) + { + mAnimPreview->getDummyAvatar()->startMotion(mMotionID); + } childSetMinValue("playback_slider", 0.0); childSetMaxValue("playback_slider", 1.0); @@ -326,7 +352,6 @@ BOOL LLFloaterAnimPreview::postBuild() seconds_string = llformat(" - %.2f seconds", motionp->getDuration()); setTitle(mFilename + std::string(seconds_string)); - } else { @@ -372,13 +397,26 @@ BOOL LLFloaterAnimPreview::postBuild() //----------------------------------------------------------------------------- LLFloaterAnimPreview::~LLFloaterAnimPreview() { - if (mMotionID.notNull() && mAnimPreview) + if (mInWorld) { - mAnimPreview->getDummyAvatar()->deactivateAllMotions(); - mAnimPreview->getDummyAvatar()->removeMotion(mMotionID); - LLKeyframeDataCache::removeKeyframeData(mMotionID); + LLVOAvatar* avatarp = gAgent.getAvatarObject(); + if (avatarp) + { + if (mMotionID.notNull()) + { + avatarp->stopMotion(mMotionID, TRUE); + avatarp->removeMotion(mMotionID); + } + avatarp->deactivateAllMotions(); + avatarp->startMotion(ANIM_AGENT_HEAD_ROT); + avatarp->startMotion(ANIM_AGENT_EYE); + avatarp->startMotion(ANIM_AGENT_BODY_NOISE); + avatarp->startMotion(ANIM_AGENT_BREATHE_ROT); + avatarp->startMotion(ANIM_AGENT_HAND_MOTION); + avatarp->startMotion(ANIM_AGENT_PELVIS_FIX); + avatarp->startMotion(ANIM_AGENT_STAND, BASE_ANIM_TIME_OFFSET); + } } - delete mAnimPreview; mAnimPreview = NULL; @@ -395,9 +433,9 @@ void LLFloaterAnimPreview::draw() refresh(); - if (mMotionID.notNull() && mAnimPreview) + if (mMotionID.notNull() && mAnimPreview && !mInWorld) { -/* gGL.color3f(1.f, 1.f, 1.f); + gGL.color3f(1.f, 1.f, 1.f); gGL.getTexUnit(0)->bind(mAnimPreview->getTexture()); @@ -415,7 +453,7 @@ void LLFloaterAnimPreview::draw() gGL.end(); gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); -*/ + LLVOAvatar* avatarp = mAnimPreview->getDummyAvatar(); if (!avatarp->areAnimationsPaused()) { @@ -429,7 +467,20 @@ void LLFloaterAnimPreview::draw() //----------------------------------------------------------------------------- void LLFloaterAnimPreview::resetMotion() { - LLVOAvatar* avatarp = mAnimPreview->getDummyAvatar(); + LLVOAvatar* avatarp; + if (mInWorld) + { + avatarp = gAgent.getAvatarObject(); + } + else + { + avatarp = mAnimPreview->getDummyAvatar(); + } + if (!avatarp) + { + return; + } + BOOL paused = avatarp->areAnimationsPaused(); // *TODO: Fix awful casting hack @@ -459,13 +510,13 @@ void LLFloaterAnimPreview::resetMotion() mPauseRequest = NULL; } } -/* + //----------------------------------------------------------------------------- // handleMouseDown() //----------------------------------------------------------------------------- BOOL LLFloaterAnimPreview::handleMouseDown(S32 x, S32 y, MASK mask) { - if (mPreviewRect.pointInRect(x, y)) + if (!mInWorld && mPreviewRect.pointInRect(x, y)) { bringToFront( x, y ); gFocusMgr.setMouseCapture(this); @@ -483,8 +534,11 @@ BOOL LLFloaterAnimPreview::handleMouseDown(S32 x, S32 y, MASK mask) //----------------------------------------------------------------------------- BOOL LLFloaterAnimPreview::handleMouseUp(S32 x, S32 y, MASK mask) { - gFocusMgr.setMouseCapture(FALSE); - gViewerWindow->showCursor(); + if (!mInWorld) + { + gFocusMgr.setMouseCapture(FALSE); + gViewerWindow->showCursor(); + } return LLFloater::handleMouseUp(x, y, mask); } @@ -493,6 +547,11 @@ BOOL LLFloaterAnimPreview::handleMouseUp(S32 x, S32 y, MASK mask) //----------------------------------------------------------------------------- BOOL LLFloaterAnimPreview::handleHover(S32 x, S32 y, MASK mask) { + if (mInWorld) + { + return TRUE; + } + MASK local_mask = mask & ~MASK_ALT; if (mAnimPreview && hasMouseCapture()) @@ -548,9 +607,11 @@ BOOL LLFloaterAnimPreview::handleHover(S32 x, S32 y, MASK mask) //----------------------------------------------------------------------------- BOOL LLFloaterAnimPreview::handleScrollWheel(S32 x, S32 y, S32 clicks) { - mAnimPreview->zoom((F32)clicks * -0.2f); - mAnimPreview->requestUpdate(); - + if (!mInWorld) + { + mAnimPreview->zoom((F32)clicks * -0.2f); + mAnimPreview->requestUpdate(); + } return TRUE; } @@ -559,9 +620,12 @@ BOOL LLFloaterAnimPreview::handleScrollWheel(S32 x, S32 y, S32 clicks) //----------------------------------------------------------------------------- void LLFloaterAnimPreview::onMouseCaptureLost() { - gViewerWindow->showCursor(); + if (!mInWorld) + { + gViewerWindow->showCursor(); + } } -*/ + //----------------------------------------------------------------------------- // onBtnPlay() //----------------------------------------------------------------------------- @@ -571,9 +635,25 @@ void LLFloaterAnimPreview::onBtnPlay(void* user_data) if (!previewp->getEnabled()) return; - if (previewp->mMotionID.notNull() && previewp->mAnimPreview) + if (previewp->mMotionID.notNull()) { - LLVOAvatar* avatarp = previewp->mAnimPreview->getDummyAvatar(); + LLVOAvatar* avatarp; + if (previewp->mInWorld) + { + if (!gAgent.getAvatarObject()) + { + return; + } + avatarp = gAgent.getAvatarObject(); + } + else + { + if (!previewp->mAnimPreview) + { + return; + } + avatarp = previewp->mAnimPreview->getDummyAvatar(); + } if(!avatarp->isMotionActive(previewp->mMotionID)) { @@ -603,9 +683,25 @@ void LLFloaterAnimPreview::onBtnStop(void* user_data) if (!previewp->getEnabled()) return; - if (previewp->mMotionID.notNull() && previewp->mAnimPreview) + if (previewp->mMotionID.notNull()) { - LLVOAvatar* avatarp = previewp->mAnimPreview->getDummyAvatar(); + LLVOAvatar* avatarp; + if (previewp->mInWorld) + { + if (!gAgent.getAvatarObject()) + { + return; + } + avatarp = gAgent.getAvatarObject(); + } + else + { + if (!previewp->mAnimPreview) + { + return; + } + avatarp = previewp->mAnimPreview->getDummyAvatar(); + } previewp->resetMotion(); previewp->mPauseRequest = avatarp->requestPause(); } @@ -620,21 +716,33 @@ void LLFloaterAnimPreview::onSliderMove(LLUICtrl* ctrl, void*user_data) if (!previewp->getEnabled()) return; - if (previewp->mAnimPreview) - { - LLVOAvatar* avatarp = previewp->mAnimPreview->getDummyAvatar(); - F32 slider_value = (F32)previewp->childGetValue("playback_slider").asReal(); - LLUUID base_id = previewp->mIDList[previewp->childGetValue("preview_base_anim").asString()]; - LLMotion* motionp = avatarp->findMotion(previewp->mMotionID); - F32 duration = motionp->getDuration();// + motionp->getEaseOutDuration(); - F32 delta_time = duration * slider_value; - avatarp->deactivateAllMotions(); - avatarp->startMotion(base_id, delta_time + BASE_ANIM_TIME_OFFSET); - avatarp->startMotion(previewp->mMotionID, delta_time); - previewp->mPauseRequest = avatarp->requestPause(); - previewp->refresh(); + LLVOAvatar* avatarp; + if (previewp->mInWorld) + { + if (!gAgent.getAvatarObject()) + { + return; + } + avatarp = gAgent.getAvatarObject(); } - + else + { + if (!previewp->mAnimPreview) + { + return; + } + avatarp = previewp->mAnimPreview->getDummyAvatar(); + } + F32 slider_value = (F32)previewp->childGetValue("playback_slider").asReal(); + LLUUID base_id = previewp->mIDList[previewp->childGetValue("preview_base_anim").asString()]; + LLMotion* motionp = avatarp->findMotion(previewp->mMotionID); + F32 duration = motionp->getDuration();// + motionp->getEaseOutDuration(); + F32 delta_time = duration * slider_value; + avatarp->deactivateAllMotions(); + avatarp->startMotion(base_id, delta_time + BASE_ANIM_TIME_OFFSET); + avatarp->startMotion(previewp->mMotionID, delta_time); + previewp->mPauseRequest = avatarp->requestPause(); + previewp->refresh(); } //----------------------------------------------------------------------------- @@ -646,24 +754,37 @@ void LLFloaterAnimPreview::onCommitBaseAnim(LLUICtrl* ctrl, void* data) if (!previewp->getEnabled()) return; - if (previewp->mAnimPreview) + LLVOAvatar* avatarp; + if (previewp->mInWorld) { - LLVOAvatar* avatarp = previewp->mAnimPreview->getDummyAvatar(); + if (!gAgent.getAvatarObject()) + { + return; + } + avatarp = gAgent.getAvatarObject(); + } + else + { + if (!previewp->mAnimPreview) + { + return; + } + avatarp = previewp->mAnimPreview->getDummyAvatar(); + } - BOOL paused = avatarp->areAnimationsPaused(); + BOOL paused = avatarp->areAnimationsPaused(); - // stop all other possible base motions - avatarp->stopMotion(ANIM_AGENT_STAND, TRUE); - avatarp->stopMotion(ANIM_AGENT_WALK, TRUE); - avatarp->stopMotion(ANIM_AGENT_SIT, TRUE); - avatarp->stopMotion(ANIM_AGENT_HOVER, TRUE); + // stop all other possible base motions + avatarp->stopMotion(ANIM_AGENT_STAND, TRUE); + avatarp->stopMotion(ANIM_AGENT_WALK, TRUE); + avatarp->stopMotion(ANIM_AGENT_SIT, TRUE); + avatarp->stopMotion(ANIM_AGENT_HOVER, TRUE); - previewp->resetMotion(); + previewp->resetMotion(); - if (!paused) - { - previewp->mPauseRequest = NULL; - } + if (!paused) + { + previewp->mPauseRequest = NULL; } } @@ -676,7 +797,23 @@ void LLFloaterAnimPreview::onCommitLoop(LLUICtrl* ctrl, void* data) if (!previewp->getEnabled()) return; - LLVOAvatar* avatarp = previewp->mAnimPreview->getDummyAvatar(); + LLVOAvatar* avatarp; + if (previewp->mInWorld) + { + if (!gAgent.getAvatarObject()) + { + return; + } + avatarp = gAgent.getAvatarObject(); + } + else + { + if (!previewp->mAnimPreview) + { + return; + } + avatarp = previewp->mAnimPreview->getDummyAvatar(); + } LLKeyframeMotion* motionp = (LLKeyframeMotion*)avatarp->findMotion(previewp->mMotionID); if (motionp) @@ -696,7 +833,23 @@ void LLFloaterAnimPreview::onCommitLoopIn(LLUICtrl* ctrl, void* data) if (!previewp->getEnabled()) return; - LLVOAvatar* avatarp = previewp->mAnimPreview->getDummyAvatar(); + LLVOAvatar* avatarp; + if (previewp->mInWorld) + { + if (!gAgent.getAvatarObject()) + { + return; + } + avatarp = gAgent.getAvatarObject(); + } + else + { + if (!previewp->mAnimPreview) + { + return; + } + avatarp = previewp->mAnimPreview->getDummyAvatar(); + } LLKeyframeMotion* motionp = (LLKeyframeMotion*)avatarp->findMotion(previewp->mMotionID); if (motionp) @@ -717,7 +870,23 @@ void LLFloaterAnimPreview::onCommitLoopOut(LLUICtrl* ctrl, void* data) if (!previewp->getEnabled()) return; - LLVOAvatar* avatarp = previewp->mAnimPreview->getDummyAvatar(); + LLVOAvatar* avatarp; + if (previewp->mInWorld) + { + if (!gAgent.getAvatarObject()) + { + return; + } + avatarp = gAgent.getAvatarObject(); + } + else + { + if (!previewp->mAnimPreview) + { + return; + } + avatarp = previewp->mAnimPreview->getDummyAvatar(); + } LLKeyframeMotion* motionp = (LLKeyframeMotion*)avatarp->findMotion(previewp->mMotionID); if (motionp) @@ -738,7 +907,23 @@ void LLFloaterAnimPreview::onCommitName(LLUICtrl* ctrl, void* data) if (!previewp->getEnabled()) return; - LLVOAvatar* avatarp = previewp->mAnimPreview->getDummyAvatar(); + LLVOAvatar* avatarp; + if (previewp->mInWorld) + { + if (!gAgent.getAvatarObject()) + { + return; + } + avatarp = gAgent.getAvatarObject(); + } + else + { + if (!previewp->mAnimPreview) + { + return; + } + avatarp = previewp->mAnimPreview->getDummyAvatar(); + } LLKeyframeMotion* motionp = (LLKeyframeMotion*)avatarp->findMotion(previewp->mMotionID); if (motionp) @@ -782,7 +967,23 @@ void LLFloaterAnimPreview::onCommitPriority(LLUICtrl* ctrl, void* data) if (!previewp->getEnabled()) return; - LLVOAvatar* avatarp = previewp->mAnimPreview->getDummyAvatar(); + LLVOAvatar* avatarp; + if (previewp->mInWorld) + { + if (!gAgent.getAvatarObject()) + { + return; + } + avatarp = gAgent.getAvatarObject(); + } + else + { + if (!previewp->mAnimPreview) + { + return; + } + avatarp = previewp->mAnimPreview->getDummyAvatar(); + } LLKeyframeMotion* motionp = (LLKeyframeMotion*)avatarp->findMotion(previewp->mMotionID); motionp->setPriority(llfloor((F32)previewp->childGetValue("priority").asReal())); @@ -797,7 +998,23 @@ void LLFloaterAnimPreview::onCommitEaseIn(LLUICtrl* ctrl, void* data) if (!previewp->getEnabled()) return; - LLVOAvatar* avatarp = previewp->mAnimPreview->getDummyAvatar(); + LLVOAvatar* avatarp; + if (previewp->mInWorld) + { + if (!gAgent.getAvatarObject()) + { + return; + } + avatarp = gAgent.getAvatarObject(); + } + else + { + if (!previewp->mAnimPreview) + { + return; + } + avatarp = previewp->mAnimPreview->getDummyAvatar(); + } LLKeyframeMotion* motionp = (LLKeyframeMotion*)avatarp->findMotion(previewp->mMotionID); motionp->setEaseIn((F32)previewp->childGetValue("ease_in_time").asReal()); @@ -813,7 +1030,23 @@ void LLFloaterAnimPreview::onCommitEaseOut(LLUICtrl* ctrl, void* data) if (!previewp->getEnabled()) return; - LLVOAvatar* avatarp = previewp->mAnimPreview->getDummyAvatar(); + LLVOAvatar* avatarp; + if (previewp->mInWorld) + { + if (!gAgent.getAvatarObject()) + { + return; + } + avatarp = gAgent.getAvatarObject(); + } + else + { + if (!previewp->mAnimPreview) + { + return; + } + avatarp = previewp->mAnimPreview->getDummyAvatar(); + } LLKeyframeMotion* motionp = (LLKeyframeMotion*)avatarp->findMotion(previewp->mMotionID); motionp->setEaseOut((F32)previewp->childGetValue("ease_out_time").asReal()); @@ -829,7 +1062,23 @@ BOOL LLFloaterAnimPreview::validateEaseIn(LLUICtrl* spin, void* data) if (!previewp->getEnabled()) return FALSE; - LLVOAvatar* avatarp = previewp->mAnimPreview->getDummyAvatar(); + LLVOAvatar* avatarp; + if (previewp->mInWorld) + { + if (!gAgent.getAvatarObject()) + { + return FALSE; + } + avatarp = gAgent.getAvatarObject(); + } + else + { + if (!previewp->mAnimPreview) + { + return FALSE; + } + avatarp = previewp->mAnimPreview->getDummyAvatar(); + } LLKeyframeMotion* motionp = (LLKeyframeMotion*)avatarp->findMotion(previewp->mMotionID); if (!motionp->getLoop()) @@ -851,7 +1100,23 @@ BOOL LLFloaterAnimPreview::validateEaseOut(LLUICtrl* spin, void* data) if (!previewp->getEnabled()) return FALSE; - LLVOAvatar* avatarp = previewp->mAnimPreview->getDummyAvatar(); + LLVOAvatar* avatarp; + if (previewp->mInWorld) + { + if (!gAgent.getAvatarObject()) + { + return FALSE; + } + avatarp = gAgent.getAvatarObject(); + } + else + { + if (!previewp->mAnimPreview) + { + return FALSE; + } + avatarp = previewp->mAnimPreview->getDummyAvatar(); + } LLKeyframeMotion* motionp = (LLKeyframeMotion*)avatarp->findMotion(previewp->mMotionID); if (!motionp->getLoop()) @@ -936,9 +1201,20 @@ void LLFloaterAnimPreview::refresh() } else { - childHide("bad_animation_text"); + if (!mInWorld) + { + childHide("bad_animation_text"); + } mPlayButton->setEnabled(TRUE); - LLVOAvatar* avatarp = mAnimPreview->getDummyAvatar(); + LLVOAvatar* avatarp; + if (mInWorld) + { + avatarp = gAgent.getAvatarObject(); + } + else + { + avatarp = mAnimPreview->getDummyAvatar(); + } if (avatarp->isMotionActive(mMotionID)) { mStopButton->setEnabled(TRUE); @@ -971,7 +1247,10 @@ void LLFloaterAnimPreview::refresh() mStopButton->setEnabled(TRUE); // stop also resets, leave enabled. } childEnable("ok_btn"); - mAnimPreview->requestUpdate(); + if (!mInWorld) + { + mAnimPreview->requestUpdate(); + } } } @@ -983,9 +1262,17 @@ void LLFloaterAnimPreview::onBtnOK(void* userdata) LLFloaterAnimPreview* floaterp = (LLFloaterAnimPreview*)userdata; if (!floaterp->getEnabled()) return; - if (floaterp->mAnimPreview) + if ((!floaterp->mInWorld && floaterp->mAnimPreview) || (floaterp->mInWorld && gAgent.getAvatarObject())) { - LLKeyframeMotion* motionp = (LLKeyframeMotion*)floaterp->mAnimPreview->getDummyAvatar()->findMotion(floaterp->mMotionID); + LLKeyframeMotion* motionp; + if (floaterp->mInWorld) + { + motionp = (LLKeyframeMotion*)gAgent.getAvatarObject()->findMotion(floaterp->mMotionID); + } + else + { + motionp = (LLKeyframeMotion*)floaterp->mAnimPreview->getDummyAvatar()->findMotion(floaterp->mMotionID); + } S32 file_size = motionp->getFileSize(); U8* buffer = new U8[file_size]; @@ -1024,7 +1311,15 @@ void LLFloaterAnimPreview::onBtnOK(void* userdata) delete [] buffer; // clear out cache for motion data - floaterp->mAnimPreview->getDummyAvatar()->removeMotion(floaterp->mMotionID); + if (floaterp->mInWorld) + { + gAgent.getAvatarObject()->removeMotion(floaterp->mMotionID); + gAgent.getAvatarObject()->deactivateAllMotions(); + } + else + { + floaterp->mAnimPreview->getDummyAvatar()->removeMotion(floaterp->mMotionID); + } LLKeyframeDataCache::removeKeyframeData(floaterp->mMotionID); } diff --git a/linden/indra/newview/llfloateranimpreview.h b/linden/indra/newview/llfloateranimpreview.h index eaab186..e8f79e2 100644 --- a/linden/indra/newview/llfloateranimpreview.h +++ b/linden/indra/newview/llfloateranimpreview.h @@ -32,7 +32,7 @@ #ifndef LL_LLFLOATERANIMPREVIEW_H #define LL_LLFLOATERANIMPREVIEW_H -#include "llagent.h" + #include "llfloaternamedesc.h" #include "lldynamictexture.h" #include "llcharacter.h" @@ -55,10 +55,7 @@ public: void pan(F32 right, F32 up); virtual BOOL needsUpdate() { return mNeedsUpdate; } -// LLVOAvatar* getDummyAvatar() { return mDummyAvatar; } -// HACK:don't get a dummy... - LLVOAvatar* getDummyAvatar() { return gAgent.getAvatarObject();} - + LLVOAvatar* getDummyAvatar() { return mDummyAvatar; } protected: BOOL mNeedsUpdate; @@ -78,13 +75,13 @@ public: virtual ~LLFloaterAnimPreview(); BOOL postBuild(); -/* + BOOL handleMouseDown(S32 x, S32 y, MASK mask); BOOL handleMouseUp(S32 x, S32 y, MASK mask); BOOL handleHover(S32 x, S32 y, MASK mask); BOOL handleScrollWheel(S32 x, S32 y, S32 clicks); void onMouseCaptureLost(); -*/ + void refresh(); static void onBtnPlay(void*); @@ -127,6 +124,7 @@ protected: LLAssetID mMotionID; LLTransactionID mTransactionID; BOOL mEnabled; + BOOL mInWorld; LLAnimPauseRequest mPauseRequest; std::map<std::string, LLUUID> mIDList; diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_animation_preview.xml b/linden/indra/newview/skins/default/xui/en-us/floater_animation_preview.xml index e710d41..f2c5d34 100644 --- a/linden/indra/newview/skins/default/xui/en-us/floater_animation_preview.xml +++ b/linden/indra/newview/skins/default/xui/en-us/floater_animation_preview.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8" standalone="yes" ?> <floater can_close="true" can_drag_on_left="false" can_minimize="false" - can_resize="false" height="286" min_height="286" min_width="300" - name="Animation Preview" rect_control="PreviewAnimRect" title="" width="300"> + can_resize="false" height="556" min_height="256" min_width="300" + name="Animation Preview" title="" width="300"> <pad height="12" /> <text follows="top|left" height="15" left="10" name="name_label"> Name: @@ -180,7 +180,7 @@ <slider bottom_delta="0" follows="top|right" height="20" increment="0.0001" initial_val="0" label="" label_width="0" left="80" max_val="1" min_val="0" name="playback_slider" right="290" show_text="false" /> - <text bottom="250" follows="top|left" left="10" name="bad_animation_text"> + <text bottom="280" follows="top|left" left="20" name="bad_animation_text"> Unable to read animation file. We recommend BVH files exported from Poser 4. @@ -202,4 +202,7 @@ Maximum animation length is [MAX_LENGTH] seconds. [STATUS] </string> + <string name="in_world"> + The animation preview is played on your avatar. + </string> </floater> -- cgit v1.1