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 /indra | |
| parent | 41f7f7a68ee3d9b3eee55437ef0ffcd1d0277227 (diff) | |
SL-714 - pause associated avatar when an animated object is selected. Handles the possibility that multiple avatars need to be paused.
Diffstat (limited to 'indra')
| -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 | 
