From f4d4fb2ad0927ebb8545bac1abd1b74918a006f5 Mon Sep 17 00:00:00 2001 From: maxim_productengine <mnikolenko@productengine.com> Date: Fri, 22 Nov 2019 14:34:20 +0200 Subject: [PATCH] SL-12288 Enhancement for Rotate and Track camera controls --- indra/newview/llagentcamera.cpp | 58 ++++++++++- indra/newview/llagentcamera.h | 13 ++- indra/newview/lljoystickbutton.cpp | 95 ++++++++++++++---- indra/newview/lljoystickbutton.h | 9 +- .../textures/bottomtray/Cam_Rotate_Center.png | Bin 0 -> 10689 bytes .../bottomtray/Cam_Tracking_Center.png | Bin 0 -> 1714 bytes .../skins/default/textures/textures.xml | 2 + 7 files changed, 155 insertions(+), 22 deletions(-) create mode 100644 indra/newview/skins/default/textures/bottomtray/Cam_Rotate_Center.png create mode 100644 indra/newview/skins/default/textures/bottomtray/Cam_Tracking_Center.png diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp index e5fba7f28f9..67b117657f0 100644 --- a/indra/newview/llagentcamera.cpp +++ b/indra/newview/llagentcamera.cpp @@ -184,6 +184,9 @@ LLAgentCamera::LLAgentCamera() : clearGeneralKeys(); clearOrbitKeys(); clearPanKeys(); + + resetPanDiff(); + resetOrbitDiff(); } // Requires gSavedSettings to be initialized. @@ -343,7 +346,8 @@ void LLAgentCamera::resetView(BOOL reset_camera, BOOL change_camera) mCameraFOVZoomFactor = 0.f; } - + resetPanDiff(); + resetOrbitDiff(); mHUDTargetZoom = 1.f; } @@ -822,6 +826,7 @@ void LLAgentCamera::cameraOrbitAround(const F32 radians) } else { + mOrbitAroundRadians += radians; mCameraFocusOffsetTarget.rotVec(radians, 0.f, 0.f, 1.f); cameraZoomIn(1.f); @@ -853,12 +858,34 @@ void LLAgentCamera::cameraOrbitOver(const F32 angle) LLVector3d left_axis; left_axis.setVec(LLViewerCamera::getInstance()->getLeftAxis()); F32 new_angle = llclamp(angle_from_up - angle, 1.f * DEG_TO_RAD, 179.f * DEG_TO_RAD); + mOrbitOverAngle += angle_from_up - new_angle; mCameraFocusOffsetTarget.rotVec(angle_from_up - new_angle, left_axis); cameraZoomIn(1.f); } } +void LLAgentCamera::resetCameraOrbit() +{ + LLVector3 camera_offset_unit(mCameraFocusOffsetTarget); + camera_offset_unit.normalize(); + + LLVector3d left_axis; + left_axis.setVec(LLViewerCamera::getInstance()->getLeftAxis()); + mCameraFocusOffsetTarget.rotVec(-mOrbitOverAngle, left_axis); + + mCameraFocusOffsetTarget.rotVec(-mOrbitAroundRadians, 0.f, 0.f, 1.f); + + cameraZoomIn(1.f); + resetOrbitDiff(); +} + +void LLAgentCamera::resetOrbitDiff() +{ + mOrbitAroundRadians = 0; + mOrbitOverAngle = 0; +} + //----------------------------------------------------------------------------- // cameraZoomIn() //----------------------------------------------------------------------------- @@ -997,6 +1024,8 @@ void LLAgentCamera::cameraPanIn(F32 meters) LLVector3d at_axis; at_axis.setVec(LLViewerCamera::getInstance()->getAtAxis()); + mPanFocusDiff += meters * at_axis; + mFocusTargetGlobal += meters * at_axis; mFocusGlobal = mFocusTargetGlobal; // don't enforce zoom constraints as this is the only way for users to get past them easily @@ -1013,6 +1042,8 @@ void LLAgentCamera::cameraPanLeft(F32 meters) LLVector3d left_axis; left_axis.setVec(LLViewerCamera::getInstance()->getLeftAxis()); + mPanFocusDiff += meters * left_axis; + mFocusTargetGlobal += meters * left_axis; mFocusGlobal = mFocusTargetGlobal; @@ -1033,6 +1064,8 @@ void LLAgentCamera::cameraPanUp(F32 meters) LLVector3d up_axis; up_axis.setVec(LLViewerCamera::getInstance()->getUpAxis()); + mPanFocusDiff += meters * up_axis; + mFocusTargetGlobal += meters * up_axis; mFocusGlobal = mFocusTargetGlobal; @@ -1045,6 +1078,26 @@ void LLAgentCamera::cameraPanUp(F32 meters) mCameraSmoothingLastPositionGlobal = calcCameraPositionTargetGlobal(); } +void LLAgentCamera::resetCameraPan() +{ + mFocusTargetGlobal -= mPanFocusDiff; + + mFocusGlobal = mFocusTargetGlobal; + mCameraSmoothingStop = true; + + cameraZoomIn(1.f); + updateFocusOffset(); + + mCameraSmoothingLastPositionGlobal = calcCameraPositionTargetGlobal(); + + resetPanDiff(); +} + +void LLAgentCamera::resetPanDiff() +{ + mPanFocusDiff.clear(); +} + //----------------------------------------------------------------------------- // updateLookAt() //----------------------------------------------------------------------------- @@ -2330,6 +2383,9 @@ void LLAgentCamera::switchCameraPreset(ECameraPreset preset) mCameraPreset = preset; + resetPanDiff(); + resetOrbitDiff(); + gSavedSettings.setU32("CameraPreset", mCameraPreset); } diff --git a/indra/newview/llagentcamera.h b/indra/newview/llagentcamera.h index 8a922bf6786..0608507d1ad 100644 --- a/indra/newview/llagentcamera.h +++ b/indra/newview/llagentcamera.h @@ -262,7 +262,8 @@ class LLAgentCamera void cameraOrbitAround(const F32 radians); // Rotate camera CCW radians about build focus point void cameraOrbitOver(const F32 radians); // Rotate camera forward radians over build focus point void cameraOrbitIn(const F32 meters); // Move camera in toward build focus point - + void resetCameraOrbit(); + void resetOrbitDiff(); //-------------------------------------------------------------------- // Zoom //-------------------------------------------------------------------- @@ -279,8 +280,9 @@ class LLAgentCamera public: void cameraPanIn(const F32 meters); void cameraPanLeft(const F32 meters); - void cameraPanUp(const F32 meters); - + void cameraPanUp(const F32 meters); + void resetCameraPan(); + void resetPanDiff(); //-------------------------------------------------------------------- // View //-------------------------------------------------------------------- @@ -367,6 +369,9 @@ class LLAgentCamera F32 mOrbitInKey; F32 mOrbitOutKey; + F32 mOrbitAroundRadians; + F32 mOrbitOverAngle; + //-------------------------------------------------------------------- // Pan //-------------------------------------------------------------------- @@ -394,6 +399,8 @@ class LLAgentCamera F32 mPanInKey; F32 mPanOutKey; + LLVector3d mPanFocusDiff; + /** Keys ** ** *******************************************************************************/ diff --git a/indra/newview/lljoystickbutton.cpp b/indra/newview/lljoystickbutton.cpp index 59e14e6cc01..eb4e4f4100d 100644 --- a/indra/newview/lljoystickbutton.cpp +++ b/indra/newview/lljoystickbutton.cpp @@ -37,6 +37,7 @@ #include "llui.h" #include "llagent.h" #include "llagentcamera.h" +#include "llviewercamera.h" #include "llviewertexture.h" #include "llviewertexturelist.h" #include "llviewerwindow.h" @@ -54,6 +55,8 @@ static LLDefaultChildRegistry::Register<LLJoystickCameraTrack> r5("joystick_trac const F32 NUDGE_TIME = 0.25f; // in seconds const F32 ORBIT_NUDGE_RATE = 0.05f; // fraction of normal speed +const S32 CENTER_DOT_RADIUS = 7; + // // Public Methods // @@ -138,9 +141,25 @@ bool LLJoystick::pointInCircle(S32 x, S32 y) const //center is x and y coordinates of center of joystick circle, and also its radius int center = this->getLocalRect().getHeight()/2; bool in_circle = (x - center) * (x - center) + (y - center) * (y - center) <= center * center; + return in_circle; } +bool LLJoystick::pointInCenterDot(S32 x, S32 y, S32 radius) const +{ + if (this->getLocalRect().getHeight() != this->getLocalRect().getWidth()) + { + LL_WARNS() << "Joystick shape is not square" << LL_ENDL; + return true; + } + + S32 center = this->getLocalRect().getHeight() / 2; + + bool in_center_circle = (x - center) * (x - center) + (y - center) * (y - center) <= radius * radius; + + return in_center_circle; +} + BOOL LLJoystick::handleMouseDown(S32 x, S32 y, MASK mask) { //LL_INFOS() << "joystick mouse down " << x << ", " << y << LL_ENDL; @@ -403,8 +422,11 @@ LLJoystickCameraRotate::LLJoystickCameraRotate(const LLJoystickCameraRotate::Par mInLeft( FALSE ), mInTop( FALSE ), mInRight( FALSE ), - mInBottom( FALSE ) -{ } + mInBottom( FALSE ), + mInCenter( FALSE ) +{ + mCenterImageName = "Cam_Rotate_Center"; +} void LLJoystickCameraRotate::updateSlop() @@ -434,7 +456,16 @@ BOOL LLJoystickCameraRotate::handleMouseDown(S32 x, S32 y, MASK mask) S32 dx = x - horiz_center; S32 dy = y - vert_center; - if (dy > dx && dy > -dx) + if (pointInCenterDot(x, y, CENTER_DOT_RADIUS)) + { + mInitialOffset.mX = 0; + mInitialOffset.mY = 0; + mInitialQuadrant = JQ_ORIGIN; + mInCenter = TRUE; + + resetJoystickCamera(); + } + else if (dy > dx && dy > -dx) { // top mInitialOffset.mX = 0; @@ -469,9 +500,20 @@ BOOL LLJoystickCameraRotate::handleMouseDown(S32 x, S32 y, MASK mask) BOOL LLJoystickCameraRotate::handleMouseUp(S32 x, S32 y, MASK mask) { gAgent.setMovementLocked(FALSE); + mInCenter = FALSE; return LLJoystick::handleMouseUp(x, y, mask); } +BOOL LLJoystickCameraRotate::handleHover(S32 x, S32 y, MASK mask) +{ + if (!pointInCenterDot(x, y, CENTER_DOT_RADIUS)) + { + mInCenter = FALSE; + } + + return LLJoystick::handleHover(x, y, mask); +} + void LLJoystickCameraRotate::onHeldDown() { updateSlop(); @@ -504,6 +546,11 @@ void LLJoystickCameraRotate::onHeldDown() } } +void LLJoystickCameraRotate::resetJoystickCamera() +{ + gAgentCamera.resetCameraOrbit(); +} + F32 LLJoystickCameraRotate::getOrbitRate() { F32 time = getElapsedHeldDownTime(); @@ -536,24 +583,31 @@ void LLJoystickCameraRotate::draw() getImageUnselected()->draw( 0, 0 ); LLPointer<LLUIImage> image = getImageSelected(); - if( mInTop ) + if (mInCenter) { - drawRotatedImage( getImageSelected(), 0 ); + drawRotatedImage(LLUI::getUIImage(mCenterImageName), 0); } - - if( mInRight ) + else { - drawRotatedImage( getImageSelected(), 1 ); - } + if (mInTop) + { + drawRotatedImage(getImageSelected(), 0); + } - if( mInBottom ) - { - drawRotatedImage( getImageSelected(), 2 ); - } + if (mInRight) + { + drawRotatedImage(getImageSelected(), 1); + } - if( mInLeft ) - { - drawRotatedImage( getImageSelected(), 3 ); + if (mInBottom) + { + drawRotatedImage(getImageSelected(), 2); + } + + if (mInLeft) + { + drawRotatedImage(getImageSelected(), 3); + } } } @@ -613,7 +667,9 @@ LLJoystickCameraTrack::Params::Params() LLJoystickCameraTrack::LLJoystickCameraTrack(const LLJoystickCameraTrack::Params& p) : LLJoystickCameraRotate(p) -{} +{ + mCenterImageName = "Cam_Tracking_Center"; +} void LLJoystickCameraTrack::onHeldDown() @@ -646,3 +702,8 @@ void LLJoystickCameraTrack::onHeldDown() gAgentCamera.setPanDownKey(getOrbitRate()); } } + +void LLJoystickCameraTrack::resetJoystickCamera() +{ + gAgentCamera.resetCameraPan(); +} diff --git a/indra/newview/lljoystickbutton.h b/indra/newview/lljoystickbutton.h index 4e6c774cadf..3e29215f61b 100644 --- a/indra/newview/lljoystickbutton.h +++ b/indra/newview/lljoystickbutton.h @@ -79,7 +79,8 @@ class LLJoystick * Image containing circle is square and this square has adherent points with joystick * circle. Make sure to change method according to shape other than square. */ - bool pointInCircle(S32 x, S32 y) const; + bool pointInCircle(S32 x, S32 y) const; + bool pointInCenterDot(S32 x, S32 y, S32 radius) const; static std::string nameFromQuadrant(const EJoystickQuadrant quadrant); static EJoystickQuadrant quadrantFromName(const std::string& name); @@ -147,7 +148,9 @@ class LLJoystickCameraRotate virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask); virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); + virtual BOOL handleHover(S32 x, S32 y, MASK mask); virtual void onHeldDown(); + virtual void resetJoystickCamera(); virtual void draw(); protected: @@ -160,6 +163,9 @@ class LLJoystickCameraRotate BOOL mInTop; BOOL mInRight; BOOL mInBottom; + BOOL mInCenter; + + std::string mCenterImageName; }; @@ -176,6 +182,7 @@ class LLJoystickCameraTrack LLJoystickCameraTrack(const LLJoystickCameraTrack::Params&); virtual void onHeldDown(); + virtual void resetJoystickCamera(); }; #endif // LL_LLJOYSTICKBUTTON_H diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Rotate_Center.png b/indra/newview/skins/default/textures/bottomtray/Cam_Rotate_Center.png new file mode 100644 index 0000000000000000000000000000000000000000..ffc3c85ea2a96cb82eeb487625eac03bb1c90aa2 GIT binary patch literal 10689 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 literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Tracking_Center.png b/indra/newview/skins/default/textures/bottomtray/Cam_Tracking_Center.png new file mode 100644 index 0000000000000000000000000000000000000000..2812d614e6abc12f8f3ec1bcbad8f2f445e6f3e2 GIT binary patch literal 1714 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 IM6N<$f~LqfN&o-= literal 0 HcmV?d00001 diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index b086f7dfa87..2a4171f11bb 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -113,8 +113,10 @@ with the same filename but different name <texture name="Cam_Rotate_In" file_name="bottomtray/Cam_Rotate_In.png" preload="false" /> <texture name="Cam_Rotate_Out" file_name="bottomtray/Cam_Rotate_Out.png" preload="false" /> + <texture name="Cam_Rotate_Center" file_name="bottomtray/Cam_Rotate_Center.png" preload="false" /> <texture name="Cam_Tracking_In" file_name="bottomtray/Cam_Tracking_In.png" preload="false" /> <texture name="Cam_Tracking_Out" file_name="bottomtray/Cam_Tracking_Out.png" preload="false" /> + <texture name="Cam_Tracking_Center" file_name="bottomtray/Cam_Tracking_Center.png" preload="false" /> <texture name="Checkbox_Off_Disabled" file_name="widgets/Checkbox_Disabled.png" preload="true" /> <texture name="Checkbox_On_Disabled" file_name="widgets/Checkbox_On_Disabled.png" preload="true" /> -- GitLab