From a33efc61a2f280d81869dfce67f3ccf0482d01ec Mon Sep 17 00:00:00 2001 From: Inusaito Sayori Date: Sat, 19 Oct 2013 20:54:02 -0400 Subject: [PATCH] Feature request by StephiDreamEvermore Doune: Implement the convenience of being able to set view offsets while modifier keys are held during scroll in third person camera (Play with camera position/angle) --- indra/newview/llagentcamera.cpp | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index 05b3bd6df..3b81192f9 100644 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -2022,6 +2022,14 @@ LLVector3 LLAgentCamera::getCameraOffsetInitial() return convert_from_llsd(mCameraOffsetInitial[mCameraPreset]->get(), TYPE_VEC3, ""); } +// Adds change to vector CachedControl, vec, at idx +template +void change_vec(const T& change, LLCachedControl& vec, const U32& idx = VZ) +{ + Vec changed(vec); + changed[idx] += change; + vec = changed; +} //----------------------------------------------------------------------------- // handleScrollWheel() @@ -2057,6 +2065,24 @@ void LLAgentCamera::handleScrollWheel(S32 clicks) } else if (mFocusOnAvatar && (mCameraMode == CAMERA_MODE_THIRD_PERSON)) { + if (MASK mask = gKeyboard->currentMask(true)) // Singu Note: Conveniently set view offsets while modifier keys are held during scroll + { + if (mask & MASK_CONTROL|MASK_SHIFT) + { + const F32 change(static_cast(clicks) * 0.1f); + if (mask & MASK_SHIFT) + { + static LLCachedControl focus_offset("FocusOffsetRearView"); + change_vec(change, focus_offset); + } + if (mask & MASK_CONTROL) + { + static LLCachedControl camera_offset("CameraOffsetRearView"); + change_vec(change, camera_offset); + } + return; + } + } F32 camera_offset_initial_mag = getCameraOffsetInitial().magVec(); static const LLCachedControl camera_offset_scale("CameraOffsetScale");