diff options
| -rwxr-xr-x | indra/newview/llagentcamera.cpp | 6 | ||||
| -rwxr-xr-x | indra/newview/llagentcamera.h | 4 | ||||
| -rwxr-xr-x | indra/newview/llfloatertools.cpp | 7 | ||||
| -rwxr-xr-x | indra/newview/llfloatertools.h | 2 | ||||
| -rwxr-xr-x | indra/newview/llviewermenu.cpp | 1 | 
5 files changed, 18 insertions, 2 deletions
diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index b0b2cfd435..4f064b68f3 100755 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -147,6 +147,7 @@ LLAgentCamera::LLAgentCamera() :  	mCameraUpVector(LLVector3::z_axis), // default is straight up  	mFocusOnAvatar(TRUE), +	mAllowChangeToFollow(FALSE),  	mFocusGlobal(),  	mFocusTargetGlobal(),  	mFocusObject(NULL), @@ -1154,8 +1155,10 @@ void LLAgentCamera::updateCamera()  		mCameraUpVector = mCameraUpVector * gAgentAvatarp->getRenderRotation();  	} -	if (cameraThirdPerson() && mFocusOnAvatar && LLFollowCamMgr::getActiveFollowCamParams()) +	if (cameraThirdPerson() && (mFocusOnAvatar || mAllowChangeToFollow) && LLFollowCamMgr::getActiveFollowCamParams())  	{ +		mAllowChangeToFollow = FALSE; +		mFocusOnAvatar = TRUE;  		changeCameraToFollow();  	} @@ -2612,6 +2615,7 @@ void LLAgentCamera::setFocusOnAvatar(BOOL focus_on_avatar, BOOL animate)  	{  		// keep camera focus point consistent, even though it is now unlocked  		setFocusGlobal(gAgent.getPositionGlobal() + calcThirdPersonFocusOffset(), gAgent.getID()); +		mAllowChangeToFollow = FALSE;  	}  	mFocusOnAvatar = focus_on_avatar; diff --git a/indra/newview/llagentcamera.h b/indra/newview/llagentcamera.h index 4d0f9a80de..ab793ff316 100755 --- a/indra/newview/llagentcamera.h +++ b/indra/newview/llagentcamera.h @@ -206,13 +206,15 @@ public:  	void			setCameraPosAndFocusGlobal(const LLVector3d& pos, const LLVector3d& focus, const LLUUID &object_id);  	void			clearFocusObject();  	void			setFocusObject(LLViewerObject* object); +	void			setAllowChangeToFollow(BOOL focus) 	{ mAllowChangeToFollow = focus; }  	void			setObjectTracking(BOOL track) 	{ mTrackFocusObject = track; }  	const LLVector3d &getFocusGlobal() const		{ return mFocusGlobal; }  	const LLVector3d &getFocusTargetGlobal() const	{ return mFocusTargetGlobal; }  private:  	LLVector3d		mCameraFocusOffset;				// Offset from focus point in build mode  	LLVector3d		mCameraFocusOffsetTarget;		// Target towards which we are lerping the camera's focus offset -	BOOL			mFocusOnAvatar;					 +	BOOL			mFocusOnAvatar; +	BOOL			mAllowChangeToFollow;  	LLVector3d		mFocusGlobal;  	LLVector3d		mFocusTargetGlobal;  	LLPointer<LLViewerObject> mFocusObject; diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp index 7477b02867..6dbb202c9d 100755 --- a/indra/newview/llfloatertools.cpp +++ b/indra/newview/llfloatertools.cpp @@ -92,6 +92,7 @@  // Globals  LLFloaterTools *gFloaterTools = NULL;  bool LLFloaterTools::sShowObjectCost = true; +bool LLFloaterTools::sPreviousFocusOnAvatar = false;  const std::string PANEL_NAMES[LLFloaterTools::PANEL_COUNT] =  { @@ -891,6 +892,12 @@ void LLFloaterTools::onClose(bool app_quitting)  	// prepare content for next call  	mPanelContents->clearContents(); + +	if(sPreviousFocusOnAvatar) +	{ +		sPreviousFocusOnAvatar = false; +		gAgentCamera.setAllowChangeToFollow(TRUE); +	}  }  void click_popup_info(void*) diff --git a/indra/newview/llfloatertools.h b/indra/newview/llfloatertools.h index 189bae46c2..df481b8d4c 100755 --- a/indra/newview/llfloatertools.h +++ b/indra/newview/llfloatertools.h @@ -201,11 +201,13 @@ private:  	std::map<std::string, std::string> mStatusText; +  protected:  	LLSD				mMediaSettings;  public:  	static bool		sShowObjectCost; +	static bool		sPreviousFocusOnAvatar;  }; diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index b77d3ca1be..22a032563e 100755 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -2695,6 +2695,7 @@ void handle_object_edit()  	if (gAgentCamera.getFocusOnAvatar() && !LLToolMgr::getInstance()->inEdit())  	{ +		LLFloaterTools::sPreviousFocusOnAvatar = true;  		LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection();  		if (selection->getSelectType() == SELECT_TYPE_HUD || !gSavedSettings.getBOOL("EditCameraMovement"))  | 
