From d5ee6fb36fc5ee817340df095a6a40592d8f3f75 Mon Sep 17 00:00:00 2001 From: hultonha <82228511+hultonha@users.noreply.github.com> Date: Thu, 26 Aug 2021 10:01:22 +0100 Subject: [PATCH] Expose camera settings to the Editor UI (#3442) * expose camera settings to the ui Signed-off-by: hultonha * improve naming of visibility functions, remove duplication Signed-off-by: hultonha --- .../EditorPreferencesPageViewportMovement.cpp | 136 +++++++++++++----- .../EditorPreferencesPageViewportMovement.h | 58 ++++++-- 2 files changed, 146 insertions(+), 48 deletions(-) diff --git a/Code/Editor/EditorPreferencesPageViewportMovement.cpp b/Code/Editor/EditorPreferencesPageViewportMovement.cpp index 988b4954d1..06bcd13c60 100644 --- a/Code/Editor/EditorPreferencesPageViewportMovement.cpp +++ b/Code/Editor/EditorPreferencesPageViewportMovement.cpp @@ -5,6 +5,7 @@ * SPDX-License-Identifier: Apache-2.0 OR MIT * */ + #include "EditorDefs.h" #include "EditorPreferencesPageViewportMovement.h" @@ -12,44 +13,96 @@ #include // Editor -#include "Settings.h" #include "EditorViewportSettings.h" +#include "Settings.h" void CEditorPreferencesPage_ViewportMovement::Reflect(AZ::SerializeContext& serialize) { serialize.Class() - ->Version(1) - ->Field("MoveSpeed", &CameraMovementSettings::m_moveSpeed) + ->Version(2) + ->Field("TranslateSpeed", &CameraMovementSettings::m_translateSpeed) ->Field("RotateSpeed", &CameraMovementSettings::m_rotateSpeed) - ->Field("FastMoveSpeed", &CameraMovementSettings::m_fastMoveSpeed) - ->Field("WheelZoomSpeed", &CameraMovementSettings::m_wheelZoomSpeed) - ->Field("InvertYAxis", &CameraMovementSettings::m_invertYRotation) - ->Field("InvertPan", &CameraMovementSettings::m_invertPan); + ->Field("BoostMultiplier", &CameraMovementSettings::m_boostMultiplier) + ->Field("ScrollSpeed", &CameraMovementSettings::m_scrollSpeed) + ->Field("DollySpeed", &CameraMovementSettings::m_dollySpeed) + ->Field("PanSpeed", &CameraMovementSettings::m_panSpeed) + ->Field("RotateSmoothing", &CameraMovementSettings::m_rotateSmoothing) + ->Field("RotateSmoothness", &CameraMovementSettings::m_rotateSmoothness) + ->Field("TranslateSmoothing", &CameraMovementSettings::m_translateSmoothing) + ->Field("TranslateSmoothness", &CameraMovementSettings::m_translateSmoothness) + ->Field("CaptureCursorLook", &CameraMovementSettings::m_captureCursorLook) + ->Field("OrbitYawRotationInverted", &CameraMovementSettings::m_orbitYawRotationInverted) + ->Field("PanInvertedX", &CameraMovementSettings::m_panInvertedX) + ->Field("PanInvertedY", &CameraMovementSettings::m_panInvertedY); - serialize.Class() - ->Version(1) - ->Field("CameraMovementSettings", &CEditorPreferencesPage_ViewportMovement::m_cameraMovementSettings); + serialize.Class()->Version(1)->Field( + "CameraMovementSettings", &CEditorPreferencesPage_ViewportMovement::m_cameraMovementSettings); - - AZ::EditContext* editContext = serialize.GetEditContext(); - if (editContext) + if (AZ::EditContext* editContext = serialize.GetEditContext()) { - editContext->Class("Camera Movement Settings", "") - ->DataElement(AZ::Edit::UIHandlers::SpinBox, &CameraMovementSettings::m_moveSpeed, "Camera Movement Speed", "Camera Movement Speed") - ->DataElement(AZ::Edit::UIHandlers::SpinBox, &CameraMovementSettings::m_rotateSpeed, "Camera Rotation Speed", "Camera Rotation Speed") - ->DataElement(AZ::Edit::UIHandlers::SpinBox, &CameraMovementSettings::m_fastMoveSpeed, "Fast Movement Scale", "Fast Movement Scale (holding shift") - ->DataElement(AZ::Edit::UIHandlers::SpinBox, &CameraMovementSettings::m_wheelZoomSpeed, "Wheel Zoom Speed", "Wheel Zoom Speed") - ->DataElement(AZ::Edit::UIHandlers::CheckBox, &CameraMovementSettings::m_invertYRotation, "Invert Y Axis", "Invert Y Rotation (holding RMB)") - ->DataElement(AZ::Edit::UIHandlers::CheckBox, &CameraMovementSettings::m_invertPan, "Invert Pan", "Invert Pan (holding MMB)"); + editContext->Class("Camera Settings", "") + ->DataElement( + AZ::Edit::UIHandlers::SpinBox, &CameraMovementSettings::m_translateSpeed, "Camera Movement Speed", "Camera movement speed") + ->Attribute(AZ::Edit::Attributes::Min, 0.01f) + ->DataElement( + AZ::Edit::UIHandlers::SpinBox, &CameraMovementSettings::m_rotateSpeed, "Camera Rotation Speed", "Camera rotation speed") + ->Attribute(AZ::Edit::Attributes::Min, 0.01f) + ->DataElement( + AZ::Edit::UIHandlers::SpinBox, &CameraMovementSettings::m_boostMultiplier, "Camera Boost Multiplier", + "Camera boost multiplier to apply to movement speed") + ->Attribute(AZ::Edit::Attributes::Min, 0.01f) + ->DataElement( + AZ::Edit::UIHandlers::SpinBox, &CameraMovementSettings::m_scrollSpeed, "Camera Scroll Speed", + "Camera movement speed while using scroll/wheel input") + ->Attribute(AZ::Edit::Attributes::Min, 0.01f) + ->DataElement( + AZ::Edit::UIHandlers::SpinBox, &CameraMovementSettings::m_dollySpeed, "Camera Dolly Speed", + "Camera movement speed while using mouse motion to move in and out") + ->Attribute(AZ::Edit::Attributes::Min, 0.01f) + ->DataElement( + AZ::Edit::UIHandlers::SpinBox, &CameraMovementSettings::m_panSpeed, "Camera Pan Speed", + "Camera movement speed while panning using the mouse") + ->Attribute(AZ::Edit::Attributes::Min, 0.01f) + ->DataElement( + AZ::Edit::UIHandlers::CheckBox, &CameraMovementSettings::m_rotateSmoothing, "Camera Rotate Smoothing", + "Is camera rotation smoothing enabled or disabled") + ->Attribute(AZ::Edit::Attributes::ChangeNotify, AZ::Edit::PropertyRefreshLevels::EntireTree) + ->DataElement( + AZ::Edit::UIHandlers::SpinBox, &CameraMovementSettings::m_rotateSmoothness, "Camera Rotate Smoothness", + "Amount of camera smoothing to apply while rotating the camera") + ->Attribute(AZ::Edit::Attributes::Min, 0.01f) + ->Attribute(AZ::Edit::Attributes::Visibility, &CameraMovementSettings::RotateSmoothingVisibility) + ->DataElement( + AZ::Edit::UIHandlers::CheckBox, &CameraMovementSettings::m_translateSmoothing, "Camera Translate Smoothing", + "Is camera translation smoothing enabled or disabled") + ->Attribute(AZ::Edit::Attributes::ChangeNotify, AZ::Edit::PropertyRefreshLevels::EntireTree) + ->DataElement( + AZ::Edit::UIHandlers::SpinBox, &CameraMovementSettings::m_translateSmoothness, "Camera Translate Smoothness", + "Amount of camera smoothing to apply while translating the camera") + ->Attribute(AZ::Edit::Attributes::Min, 0.01f) + ->Attribute(AZ::Edit::Attributes::Visibility, &CameraMovementSettings::TranslateSmoothingVisibility) + ->DataElement( + AZ::Edit::UIHandlers::CheckBox, &CameraMovementSettings::m_orbitYawRotationInverted, "Camera Orbit Yaw Inverted", + "Inverted yaw rotation while orbiting") + ->DataElement( + AZ::Edit::UIHandlers::CheckBox, &CameraMovementSettings::m_panInvertedX, "Invert Pan X", + "Invert direction of pan in local X axis") + ->DataElement( + AZ::Edit::UIHandlers::CheckBox, &CameraMovementSettings::m_panInvertedY, "Invert Pan Y", + "Invert direction of pan in local Y axis") + ->DataElement( + AZ::Edit::UIHandlers::CheckBox, &CameraMovementSettings::m_captureCursorLook, "Camera Capture Look Cursor", + "Should the cursor be captured (hidden) while performing free look"); - editContext->Class("Gizmo Movement Preferences", "Gizmo Movement Preferences") + editContext->Class("Viewport Preferences", "Viewport Preferences") ->ClassElement(AZ::Edit::ClassElements::EditorData, "") ->Attribute(AZ::Edit::Attributes::Visibility, AZ_CRC("PropertyVisibility_ShowChildrenOnly", 0xef428f20)) - ->DataElement(AZ::Edit::UIHandlers::Default, &CEditorPreferencesPage_ViewportMovement::m_cameraMovementSettings, "Camera Movement Settings", "Camera Movement Settings"); + ->DataElement( + AZ::Edit::UIHandlers::Default, &CEditorPreferencesPage_ViewportMovement::m_cameraMovementSettings, + "Camera Movement Settings", "Camera Movement Settings"); } } - CEditorPreferencesPage_ViewportMovement::CEditorPreferencesPage_ViewportMovement() { InitializeSettings(); @@ -68,21 +121,36 @@ QIcon& CEditorPreferencesPage_ViewportMovement::GetIcon() void CEditorPreferencesPage_ViewportMovement::OnApply() { - SandboxEditor::SetCameraTranslateSpeed(m_cameraMovementSettings.m_moveSpeed); + SandboxEditor::SetCameraTranslateSpeed(m_cameraMovementSettings.m_translateSpeed); SandboxEditor::SetCameraRotateSpeed(m_cameraMovementSettings.m_rotateSpeed); - SandboxEditor::SetCameraBoostMultiplier(m_cameraMovementSettings.m_fastMoveSpeed); - SandboxEditor::SetCameraScrollSpeed(m_cameraMovementSettings.m_wheelZoomSpeed); - SandboxEditor::SetCameraOrbitYawRotationInverted(m_cameraMovementSettings.m_invertYRotation); - SandboxEditor::SetCameraPanInvertedX(m_cameraMovementSettings.m_invertPan); - SandboxEditor::SetCameraPanInvertedY(m_cameraMovementSettings.m_invertPan); + SandboxEditor::SetCameraBoostMultiplier(m_cameraMovementSettings.m_boostMultiplier); + SandboxEditor::SetCameraScrollSpeed(m_cameraMovementSettings.m_scrollSpeed); + SandboxEditor::SetCameraDollyMotionSpeed(m_cameraMovementSettings.m_dollySpeed); + SandboxEditor::SetCameraPanSpeed(m_cameraMovementSettings.m_panSpeed); + SandboxEditor::SetCameraRotateSmoothness(m_cameraMovementSettings.m_rotateSmoothness); + SandboxEditor::SetCameraRotateSmoothingEnabled(m_cameraMovementSettings.m_rotateSmoothing); + SandboxEditor::SetCameraTranslateSmoothness(m_cameraMovementSettings.m_translateSmoothness); + SandboxEditor::SetCameraTranslateSmoothingEnabled(m_cameraMovementSettings.m_translateSmoothing); + SandboxEditor::SetCameraCaptureCursorForLook(m_cameraMovementSettings.m_captureCursorLook); + SandboxEditor::SetCameraOrbitYawRotationInverted(m_cameraMovementSettings.m_orbitYawRotationInverted); + SandboxEditor::SetCameraPanInvertedX(m_cameraMovementSettings.m_panInvertedX); + SandboxEditor::SetCameraPanInvertedY(m_cameraMovementSettings.m_panInvertedY); } void CEditorPreferencesPage_ViewportMovement::InitializeSettings() { - m_cameraMovementSettings.m_moveSpeed = SandboxEditor::CameraTranslateSpeed(); + m_cameraMovementSettings.m_translateSpeed = SandboxEditor::CameraTranslateSpeed(); m_cameraMovementSettings.m_rotateSpeed = SandboxEditor::CameraRotateSpeed(); - m_cameraMovementSettings.m_fastMoveSpeed = SandboxEditor::CameraBoostMultiplier(); - m_cameraMovementSettings.m_wheelZoomSpeed = SandboxEditor::CameraScrollSpeed(); - m_cameraMovementSettings.m_invertYRotation = SandboxEditor::CameraOrbitYawRotationInverted(); - m_cameraMovementSettings.m_invertPan = SandboxEditor::CameraPanInvertedX() && SandboxEditor::CameraPanInvertedY(); + m_cameraMovementSettings.m_boostMultiplier = SandboxEditor::CameraBoostMultiplier(); + m_cameraMovementSettings.m_scrollSpeed = SandboxEditor::CameraScrollSpeed(); + m_cameraMovementSettings.m_dollySpeed = SandboxEditor::CameraDollyMotionSpeed(); + m_cameraMovementSettings.m_panSpeed = SandboxEditor::CameraPanSpeed(); + m_cameraMovementSettings.m_rotateSmoothness = SandboxEditor::CameraRotateSmoothness(); + m_cameraMovementSettings.m_rotateSmoothing = SandboxEditor::CameraRotateSmoothingEnabled(); + m_cameraMovementSettings.m_translateSmoothness = SandboxEditor::CameraTranslateSmoothness(); + m_cameraMovementSettings.m_translateSmoothing = SandboxEditor::CameraTranslateSmoothingEnabled(); + m_cameraMovementSettings.m_captureCursorLook = SandboxEditor::CameraCaptureCursorForLook(); + m_cameraMovementSettings.m_orbitYawRotationInverted = SandboxEditor::CameraOrbitYawRotationInverted(); + m_cameraMovementSettings.m_panInvertedX = SandboxEditor::CameraPanInvertedX(); + m_cameraMovementSettings.m_panInvertedY = SandboxEditor::CameraPanInvertedY(); } diff --git a/Code/Editor/EditorPreferencesPageViewportMovement.h b/Code/Editor/EditorPreferencesPageViewportMovement.h index 1373260e62..a973c34f1a 100644 --- a/Code/Editor/EditorPreferencesPageViewportMovement.h +++ b/Code/Editor/EditorPreferencesPageViewportMovement.h @@ -5,17 +5,21 @@ * SPDX-License-Identifier: Apache-2.0 OR MIT * */ + #pragma once #include "Include/IPreferencesPage.h" -#include -#include #include +#include +#include #include +inline AZ::Crc32 EditorPropertyVisibility(const bool enabled) +{ + return enabled ? AZ::Edit::PropertyVisibility::Show : AZ::Edit::PropertyVisibility::Hide; +} -class CEditorPreferencesPage_ViewportMovement - : public IPreferencesPage +class CEditorPreferencesPage_ViewportMovement : public IPreferencesPage { public: AZ_RTTI(CEditorPreferencesPage_ViewportMovement, "{BC593332-7EAF-4171-8A35-1C5DE5B40909}", IPreferencesPage) @@ -25,12 +29,22 @@ public: CEditorPreferencesPage_ViewportMovement(); virtual ~CEditorPreferencesPage_ViewportMovement() = default; - virtual const char* GetCategory() override { return "Viewports"; } + virtual const char* GetCategory() override + { + return "Viewports"; + } + virtual const char* GetTitle(); virtual QIcon& GetIcon() override; virtual void OnApply() override; - virtual void OnCancel() override {} - virtual bool OnQueryCancel() override { return true; } + virtual void OnCancel() override + { + } + + virtual bool OnQueryCancel() override + { + return true; + } private: void InitializeSettings(); @@ -39,16 +53,32 @@ private: { AZ_TYPE_INFO(CameraMovementSettings, "{60B8C07E-5F48-4171-A50B-F45558B5CCA1}") - float m_moveSpeed; + float m_translateSpeed; float m_rotateSpeed; - float m_fastMoveSpeed; - float m_wheelZoomSpeed; - bool m_invertYRotation; - bool m_invertPan; + float m_scrollSpeed; + float m_dollySpeed; + float m_panSpeed; + float m_boostMultiplier; + float m_rotateSmoothness; + bool m_rotateSmoothing; + float m_translateSmoothness; + bool m_translateSmoothing; + bool m_captureCursorLook; + bool m_orbitYawRotationInverted; + bool m_panInvertedX; + bool m_panInvertedY; + + AZ::Crc32 RotateSmoothingVisibility() const + { + return EditorPropertyVisibility(m_rotateSmoothing); + } + + AZ::Crc32 TranslateSmoothingVisibility() const + { + return EditorPropertyVisibility(m_translateSmoothing); + } }; CameraMovementSettings m_cameraMovementSettings; QIcon m_icon; }; - -