//----------------------------------------------------------------------------- // onSliderMove() //----------------------------------------------------------------------------- void LLFloaterAnimPreview::onSliderMove(LLUICtrl* ctrl, void*user_data) { LLFloaterAnimPreview* previewp = (LLFloaterAnimPreview*)user_data; if (!previewp->getEnabled()) return; 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(); }
//----------------------------------------------------------------------------- // resetMotion() //----------------------------------------------------------------------------- void LLFloaterAnimPreview::resetMotion() { LLVOAvatar* avatarp = mAnimPreview->getPreviewAvatar(); BOOL paused = avatarp->areAnimationsPaused(); // *TODO: Fix awful casting hack LLKeyframeMotion* motionp = (LLKeyframeMotion*)avatarp->findMotion(mMotionID); // Set emotion std::string emote = getChild<LLUICtrl>("emote_combo")->getValue().asString(); motionp->setEmote(mIDList[emote]); LLUUID base_id = mIDList[getChild<LLUICtrl>("preview_base_anim")->getValue().asString()]; avatarp->deactivateAllMotions(); avatarp->startMotion(mMotionID, 0.0f); avatarp->startMotion(base_id, BASE_ANIM_TIME_OFFSET); getChild<LLUICtrl>("playback_slider")->setValue(0.0f); // Set pose std::string handpose = getChild<LLUICtrl>("hand_pose_combo")->getValue().asString(); avatarp->startMotion( ANIM_AGENT_HAND_MOTION, 0.0f ); motionp->setHandPose(LLHandMotion::getHandPose(handpose)); if (paused) { mPauseRequest = avatarp->requestPause(); } else { mPauseRequest = NULL; } }
//static void LLAO::runAnims(BOOL enabled) { LLVOAvatar* avatarp = gAgent.getAvatarObject(); if (avatarp) { for ( LLVOAvatar::AnimIterator anim_it = avatarp->mPlayingAnimations.begin(); anim_it != avatarp->mPlayingAnimations.end(); anim_it++) { if(LLAO::mOverrides.find(anim_it->first) != LLAO::mOverrides.end()) { LLUUID anim_id = mOverrides[anim_it->first]; // this is an override anim if(enabled) { // make override start avatarp->startMotion(anim_id); } else { avatarp->stopMotion(anim_id); gAgent.sendAnimationRequest(anim_id, ANIM_REQUEST_STOP); } } } if(mTimer) { if(enabled) mTimer->resume(); else mTimer->pause(); } } }
BOOL LLAOStandTimer::tick() { if(!mPaused && LLAO::isEnabled() && !LLAO::mStandOverrides.empty()) { LLVOAvatar* avatarp = gAgent.getAvatarObject(); if (avatarp) { for ( LLVOAvatar::AnimIterator anim_it = avatarp->mPlayingAnimations.begin(); anim_it != avatarp->mPlayingAnimations.end(); anim_it++) { if(LLAO::isStand(anim_it->first)) { //back is always last played, front is next avatarp->stopMotion(LLAO::mStandOverrides.back()); avatarp->startMotion(LLAO::mStandOverrides.front()); LLAO::mStandOverrides.push_back(LLAO::mStandOverrides.front()); LLAO::mStandOverrides.pop_front(); LLFloaterAO* ao = LLFloaterAO::sInstance; if(ao) { ao->mStandsCombo->setSimple(LLStringExplicit(LLAO::mStandOverrides.back().asString())); } break; } } } } return FALSE; }
//----------------------------------------------------------------------------- // resetMotion() //----------------------------------------------------------------------------- void LLFloaterAnimPreview::resetMotion() { LLVOAvatar* avatarp; if (mInWorld) { avatarp = gAgent.getAvatarObject(); } else { avatarp = mAnimPreview->getDummyAvatar(); } if (!avatarp) { return; } BOOL paused = avatarp->areAnimationsPaused(); // *TODO: Fix awful casting hack LLKeyframeMotion* motionp = (LLKeyframeMotion*)avatarp->findMotion(mMotionID); // Set emotion std::string emote = childGetValue("emote_combo").asString(); motionp->setEmote(mIDList[emote]); LLUUID base_id = mIDList[childGetValue("preview_base_anim").asString()]; avatarp->deactivateAllMotions(); avatarp->startMotion(base_id, BASE_ANIM_TIME_OFFSET); avatarp->startMotion(mMotionID, 0.0f); childSetValue("playback_slider", 0.0f); // Set pose std::string handpose = childGetValue("hand_pose_combo").asString(); avatarp->startMotion( ANIM_AGENT_HAND_MOTION, 0.0f ); motionp->setHandPose(LLHandMotion::getHandPose(handpose)); if (paused) { mPauseRequest = avatarp->requestPause(); } else { mPauseRequest = NULL; } }
//----------------------------------------------------------------------------- // onSliderMove() //----------------------------------------------------------------------------- void LLFloaterAnimPreview::onSliderMove() { if (!getEnabled()) return; if (mAnimPreview) { LLVOAvatar* avatarp = mAnimPreview->getPreviewAvatar(); F32 slider_value = (F32)getChild<LLUICtrl>("playback_slider")->getValue().asReal(); LLUUID base_id = mIDList[getChild<LLUICtrl>("preview_base_anim")->getValue().asString()]; LLMotion* motionp = avatarp->findMotion(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(mMotionID, delta_time); mPauseRequest = avatarp->requestPause(); refresh(); } }
//----------------------------------------------------------------------------- // LLFloaterAnimPreview() //----------------------------------------------------------------------------- LLFloaterAnimPreview::~LLFloaterAnimPreview() { if (mInWorld) { 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; setEnabled(FALSE); }
//----------------------------------------------------------------------------- // shutdown() //----------------------------------------------------------------------------- void LLMorphView::shutdown() { LLVOAvatar::onCustomizeEnd(); LLVOAvatar *avatarp = gAgent.getAvatarObject(); if(avatarp && !avatarp->isDead()) { avatarp->startMotion( ANIM_AGENT_BODY_NOISE ); avatarp->mSpecialRenderMode = 0; // reset camera LLViewerCamera::getInstance()->setNear(mOldCameraNearClip); } }
void LLAOStandTimer::resume() { if(!mPaused) return; LLVOAvatar* avatarp = gAgent.getAvatarObject(); if (avatarp) { gAgent.sendAnimationRequest(LLAO::mStandOverrides.back(), ANIM_REQUEST_START); avatarp->startMotion(LLAO::mStandOverrides.back()); } mEventTimer.reset(); mEventTimer.start(); mPaused = FALSE; }
//static void LLFloaterAO::onClickStandAdd(void* user_data) { LLFloaterAO* floater = (LLFloaterAO*)user_data; LLUUID id = LLUUID(floater->mStandsCombo->getValue()); std::list<LLUUID>::iterator itr = std::find(LLAO::mStandOverrides.begin(),LLAO::mStandOverrides.end(),id); LLVOAvatar* avatarp = gAgent.getAvatarObject(); if(id.notNull() && itr == LLAO::mStandOverrides.end()) { //back is always last played avatarp->stopMotion(LLAO::mStandOverrides.back()); avatarp->startMotion(id); LLAO::mStandOverrides.push_back(id); floater->refresh(); LLAO::mTimer->reset(); } onCommitAnim(NULL,user_data); }