summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
Diffstat (limited to 'indra')
-rwxr-xr-xindra/newview/llagentcamera.cpp6
-rwxr-xr-xindra/newview/llagentcamera.h4
-rwxr-xr-xindra/newview/llfloatertools.cpp7
-rwxr-xr-xindra/newview/llfloatertools.h2
-rwxr-xr-xindra/newview/llviewermenu.cpp1
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"))