diff options
author | Brad Payne (Vir Linden) <vir@lindenlab.com> | 2017-07-17 21:02:16 +0100 |
---|---|---|
committer | Brad Payne (Vir Linden) <vir@lindenlab.com> | 2017-07-17 21:02:16 +0100 |
commit | c4bc677a407049e406bde925df1537f157bda0c3 (patch) | |
tree | 27bdbe8a785222d051033f41ae63bce5acff5be0 | |
parent | 41f7f7a68ee3d9b3eee55437ef0ffcd1d0277227 (diff) |
SL-714 - pause associated avatar when an animated object is selected. Handles the possibility that multiple avatars need to be paused.
-rw-r--r-- | indra/newview/llselectmgr.cpp | 63 | ||||
-rw-r--r-- | indra/newview/llselectmgr.h | 4 |
2 files changed, 46 insertions, 21 deletions
diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index 4a12d03f74..7bf60d6ffb 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -6629,7 +6629,10 @@ S32 get_family_count(LLViewerObject *parent) //----------------------------------------------------------------------------- // updateSelectionCenter -//----------------------------------------------------------------------------- +// +// FIXME this is a grab bag of functionality only some of which has to do +// with the selection center +// ----------------------------------------------------------------------------- void LLSelectMgr::updateSelectionCenter() { const F32 MOVE_SELECTION_THRESHOLD = 1.f; // Movement threshold in meters for updating selection @@ -6647,31 +6650,12 @@ void LLSelectMgr::updateSelectionCenter() mSelectionCenterGlobal.clearVec(); mShowSelection = FALSE; mSelectionBBox = LLBBox(); - mPauseRequest = NULL; resetAgentHUDZoom(); - } else { mSelectedObjects->mSelectType = getSelectTypeForObject(object); - if (mSelectedObjects->mSelectType == SELECT_TYPE_ATTACHMENT && isAgentAvatarValid() && object->getParent() != NULL) - { - mPauseRequest = gAgentAvatarp->requestPause(); - } - else - { - LLVOVolume *volp = dynamic_cast<LLVOVolume*>(object); - if (volp && volp->isAnimatedObject() && volp->getControlAvatar()) - { - mPauseRequest = volp->getControlAvatar()->requestPause(); - } - else - { - mPauseRequest = NULL; - } - } - if (mSelectedObjects->mSelectType != SELECT_TYPE_HUD && isAgentAvatarValid()) { // reset hud ZOOM @@ -6748,6 +6732,45 @@ void LLSelectMgr::updateSelectionCenter() { gEditMenuHandler = NULL; } + + pauseAssociatedAvatars(); +} + +//----------------------------------------------------------------------------- +// pauseAssociatedAvatars +// +// If the selection includes an attachment or an animated object, the +// associated avatars should pause their animations until they are no +// longer selected. +//----------------------------------------------------------------------------- +void LLSelectMgr::pauseAssociatedAvatars() +{ + mPauseRequests.clear(); + + for (LLObjectSelection::iterator iter = mSelectedObjects->begin(); + iter != mSelectedObjects->end(); iter++) + { + LLSelectNode* node = *iter; + LLViewerObject* object = node->getObject(); + if (!object) + continue; + + mSelectedObjects->mSelectType = getSelectTypeForObject(object); + + if (mSelectedObjects->mSelectType == SELECT_TYPE_ATTACHMENT && + isAgentAvatarValid() && object->getParent() != NULL) + { + mPauseRequests.push_back(gAgentAvatarp->requestPause()); + } + else + { + LLVOVolume *volp = dynamic_cast<LLVOVolume*>(object); + if (volp && volp->isAnimatedObject() && volp->getControlAvatar()) + { + mPauseRequests.push_back(volp->getControlAvatar()->requestPause()); + } + } + } } void LLSelectMgr::updatePointAt() diff --git a/indra/newview/llselectmgr.h b/indra/newview/llselectmgr.h index 7ef0032645..fc4b920c51 100644 --- a/indra/newview/llselectmgr.h +++ b/indra/newview/llselectmgr.h @@ -742,6 +742,8 @@ public: LLVector3d getSelectionCenterGlobal() const { return mSelectionCenterGlobal; } void updateSelectionCenter(); + void pauseAssociatedAvatars(); + void resetAgentHUDZoom(); void setAgentHUDZoom(F32 target_zoom, F32 current_zoom); void getAgentHUDZoom(F32 &target_zoom, F32 ¤t_zoom) const; @@ -843,7 +845,7 @@ private: LLFrameTimer mEffectsTimer; BOOL mForceSelection; - LLAnimPauseRequest mPauseRequest; + std::vector<LLAnimPauseRequest> mPauseRequests; }; // *DEPRECATED: For callbacks or observers, use |