diff --git a/Code/Editor/EditorPreferencesPageViewportManipulator.cpp b/Code/Editor/EditorPreferencesPageViewportManipulator.cpp index ea00d6a7f0..32e0e5b573 100644 --- a/Code/Editor/EditorPreferencesPageViewportManipulator.cpp +++ b/Code/Editor/EditorPreferencesPageViewportManipulator.cpp @@ -10,6 +10,8 @@ #include "EditorPreferencesPageViewportManipulator.h" +#include + // Editor #include "EditorViewportSettings.h" #include "Settings.h" @@ -19,7 +21,17 @@ void CEditorPreferencesPage_ViewportManipulator::Reflect(AZ::SerializeContext& s serialize.Class() ->Version(1) ->Field("LineBoundWidth", &Manipulators::m_manipulatorLineBoundWidth) - ->Field("CircleBoundWidth", &Manipulators::m_manipulatorCircleBoundWidth); + ->Field("CircleBoundWidth", &Manipulators::m_manipulatorCircleBoundWidth) + ->Field("LinearManipulatorAxisLength", &Manipulators::m_linearManipulatorAxisLength) + ->Field("PlanarManipulatorAxisLength", &Manipulators::m_planarManipulatorAxisLength) + ->Field("SurfaceManipulatorRadius", &Manipulators::m_surfaceManipulatorRadius) + ->Field("SurfaceManipulatorOpacity", &Manipulators::m_surfaceManipulatorOpacity) + ->Field("LinearManipulatorConeLength", &Manipulators::m_linearManipulatorConeLength) + ->Field("LinearManipulatorConeRadius", &Manipulators::m_linearManipulatorConeRadius) + ->Field("ScaleManipulatorBoxHalfExtent", &Manipulators::m_scaleManipulatorBoxHalfExtent) + ->Field("RotationManipulatorRadius", &Manipulators::m_rotationManipulatorRadius) + ->Field("ManipulatorViewBaseScale", &Manipulators::m_manipulatorViewBaseScale) + ->Field("FlipManipulatorAxesTowardsView", &Manipulators::m_flipManipulatorAxesTowardsView); serialize.Class()->Version(2)->Field( "Manipulators", &CEditorPreferencesPage_ViewportManipulator::m_manipulators); @@ -36,7 +48,55 @@ void CEditorPreferencesPage_ViewportManipulator::Reflect(AZ::SerializeContext& s AZ::Edit::UIHandlers::SpinBox, &Manipulators::m_manipulatorCircleBoundWidth, "Circle Bound Width", "Manipulator Circle Bound Width") ->Attribute(AZ::Edit::Attributes::Min, 0.001f) - ->Attribute(AZ::Edit::Attributes::Max, 2.0f); + ->Attribute(AZ::Edit::Attributes::Max, 2.0f) + ->DataElement( + AZ::Edit::UIHandlers::SpinBox, &Manipulators::m_linearManipulatorAxisLength, "Linear Manipulator Axis Length", + "Length of default Linear Manipulator (for Translation and Scale Manipulators)") + ->Attribute(AZ::Edit::Attributes::Min, 0.1f) + ->Attribute(AZ::Edit::Attributes::Max, 5.0f) + ->DataElement( + AZ::Edit::UIHandlers::SpinBox, &Manipulators::m_planarManipulatorAxisLength, "Planar Manipulator Axis Length", + "Length of default Planar Manipulator (for Translation Manipulators)") + ->Attribute(AZ::Edit::Attributes::Min, 0.1f) + ->Attribute(AZ::Edit::Attributes::Max, 5.0f) + ->DataElement( + AZ::Edit::UIHandlers::SpinBox, &Manipulators::m_surfaceManipulatorRadius, "Surface Manipulator Radius", + "Radius of default Surface Manipulator (for Translation Manipulators)") + ->Attribute(AZ::Edit::Attributes::Min, 0.05f) + ->Attribute(AZ::Edit::Attributes::Max, 1.0f) + ->DataElement( + AZ::Edit::UIHandlers::SpinBox, &Manipulators::m_surfaceManipulatorOpacity, "Surface Manipulator Opacity", + "Opacity of default Surface Manipulator (for Translation Manipulators)") + ->Attribute(AZ::Edit::Attributes::Min, 0.01f) + ->Attribute(AZ::Edit::Attributes::Max, 1.0f) + ->DataElement( + AZ::Edit::UIHandlers::SpinBox, &Manipulators::m_linearManipulatorConeLength, "Linear Manipulator Cone Length", + "Length of cone for default Linear Manipulator (for Translation Manipulators)") + ->Attribute(AZ::Edit::Attributes::Min, 0.05f) + ->Attribute(AZ::Edit::Attributes::Max, 1.0f) + ->DataElement( + AZ::Edit::UIHandlers::SpinBox, &Manipulators::m_linearManipulatorConeRadius, "Linear Manipulator Cone Radius", + "Radius of cone for default Linear Manipulator (for Translation Manipulators)") + ->Attribute(AZ::Edit::Attributes::Min, 0.05f) + ->Attribute(AZ::Edit::Attributes::Max, 0.5f) + ->DataElement( + AZ::Edit::UIHandlers::SpinBox, &Manipulators::m_scaleManipulatorBoxHalfExtent, "Scale Manipulator Box Half Extent", + "Half extent of box for default Scale Manipulator") + ->Attribute(AZ::Edit::Attributes::Min, 0.05f) + ->Attribute(AZ::Edit::Attributes::Max, 1.0f) + ->DataElement( + AZ::Edit::UIHandlers::SpinBox, &Manipulators::m_rotationManipulatorRadius, "Rotation Manipulator Radius", + "Radius of default Angular Manipulators (for Rotation Manipulators)") + ->Attribute(AZ::Edit::Attributes::Min, 0.5f) + ->Attribute(AZ::Edit::Attributes::Max, 5.0f) + ->DataElement( + AZ::Edit::UIHandlers::SpinBox, &Manipulators::m_manipulatorViewBaseScale, "Manipulator View Base Scale", + "The base scale to apply to all Manipulator Views (default is 1.0)") + ->Attribute(AZ::Edit::Attributes::Min, 0.5f) + ->Attribute(AZ::Edit::Attributes::Max, 2.0f) + ->DataElement( + AZ::Edit::UIHandlers::CheckBox, &Manipulators::m_flipManipulatorAxesTowardsView, "Flip Manipulator Axes Towards View", + "Determines whether Planar and Linear Manipulators should switch to face the view (camera) in the Editor"); editContext ->Class("Manipulator Viewport Preferences", "Manipulator Viewport Preferences") @@ -82,10 +142,32 @@ void CEditorPreferencesPage_ViewportManipulator::OnApply() { SandboxEditor::SetManipulatorLineBoundWidth(m_manipulators.m_manipulatorLineBoundWidth); SandboxEditor::SetManipulatorCircleBoundWidth(m_manipulators.m_manipulatorCircleBoundWidth); + + AzToolsFramework::SetLinearManipulatorAxisLength(m_manipulators.m_linearManipulatorAxisLength); + AzToolsFramework::SetPlanarManipulatorAxisLength(m_manipulators.m_planarManipulatorAxisLength); + AzToolsFramework::SetSurfaceManipulatorRadius(m_manipulators.m_surfaceManipulatorRadius); + AzToolsFramework::SetSurfaceManipulatorOpacity(m_manipulators.m_surfaceManipulatorOpacity); + AzToolsFramework::SetLinearManipulatorConeLength(m_manipulators.m_linearManipulatorConeLength); + AzToolsFramework::SetLinearManipulatorConeRadius(m_manipulators.m_linearManipulatorConeRadius); + AzToolsFramework::SetScaleManipulatorBoxHalfExtent(m_manipulators.m_scaleManipulatorBoxHalfExtent); + AzToolsFramework::SetRotationManipulatorRadius(m_manipulators.m_rotationManipulatorRadius); + AzToolsFramework::SetFlipManipulatorAxesTowardsView(m_manipulators.m_flipManipulatorAxesTowardsView); + AzToolsFramework::SetManipulatorViewBaseScale(m_manipulators.m_manipulatorViewBaseScale); } void CEditorPreferencesPage_ViewportManipulator::InitializeSettings() { m_manipulators.m_manipulatorLineBoundWidth = SandboxEditor::ManipulatorLineBoundWidth(); m_manipulators.m_manipulatorCircleBoundWidth = SandboxEditor::ManipulatorCircleBoundWidth(); + + m_manipulators.m_linearManipulatorAxisLength = AzToolsFramework::LinearManipulatorAxisLength(); + m_manipulators.m_planarManipulatorAxisLength = AzToolsFramework::PlanarManipulatorAxisLength(); + m_manipulators.m_surfaceManipulatorRadius = AzToolsFramework::SurfaceManipulatorRadius(); + m_manipulators.m_surfaceManipulatorOpacity = AzToolsFramework::SurfaceManipulatorOpacity(); + m_manipulators.m_linearManipulatorConeLength = AzToolsFramework::LinearManipulatorConeLength(); + m_manipulators.m_linearManipulatorConeRadius = AzToolsFramework::LinearManipulatorConeRadius(); + m_manipulators.m_scaleManipulatorBoxHalfExtent = AzToolsFramework::ScaleManipulatorBoxHalfExtent(); + m_manipulators.m_rotationManipulatorRadius = AzToolsFramework::RotationManipulatorRadius(); + m_manipulators.m_flipManipulatorAxesTowardsView = AzToolsFramework::FlipManipulatorAxesTowardsView(); + m_manipulators.m_manipulatorViewBaseScale = AzToolsFramework::ManipulatorViewBaseScale(); } diff --git a/Code/Editor/EditorPreferencesPageViewportManipulator.h b/Code/Editor/EditorPreferencesPageViewportManipulator.h index 93db6a7035..eb76cec2c5 100644 --- a/Code/Editor/EditorPreferencesPageViewportManipulator.h +++ b/Code/Editor/EditorPreferencesPageViewportManipulator.h @@ -41,6 +41,16 @@ private: float m_manipulatorLineBoundWidth = 0.0f; float m_manipulatorCircleBoundWidth = 0.0f; + float m_linearManipulatorAxisLength = 0.0f; + float m_planarManipulatorAxisLength = 0.0f; + float m_surfaceManipulatorRadius = 0.0f; + float m_surfaceManipulatorOpacity = 0.0f; + float m_linearManipulatorConeLength = 0.0f; + float m_linearManipulatorConeRadius = 0.0f; + float m_scaleManipulatorBoxHalfExtent = 0.0f; + float m_rotationManipulatorRadius = 0.0f; + float m_manipulatorViewBaseScale = 0.0f; + bool m_flipManipulatorAxesTowardsView = false; }; Manipulators m_manipulators; diff --git a/Code/Editor/EditorViewportSettings.cpp b/Code/Editor/EditorViewportSettings.cpp index ae188c7d98..e06b9696e1 100644 --- a/Code/Editor/EditorViewportSettings.cpp +++ b/Code/Editor/EditorViewportSettings.cpp @@ -12,6 +12,7 @@ #include #include #include +#include namespace SandboxEditor { @@ -57,31 +58,6 @@ namespace SandboxEditor constexpr AZStd::string_view CameraDefaultStartingPositionY = "/Amazon/Preferences/Editor/Camera/DefaultStartingPosition/y"; constexpr AZStd::string_view CameraDefaultStartingPositionZ = "/Amazon/Preferences/Editor/Camera/DefaultStartingPosition/z"; - template - void SetRegistry(const AZStd::string_view setting, T&& value) - { - if (auto* registry = AZ::SettingsRegistry::Get()) - { - registry->Set(setting, AZStd::forward(value)); - } - } - - template - AZStd::remove_cvref_t GetRegistry(const AZStd::string_view setting, T&& defaultValue) - { - AZStd::remove_cvref_t value = AZStd::forward(defaultValue); - if (const auto* registry = AZ::SettingsRegistry::Get()) - { - T potentialValue; - if (registry->Get(potentialValue, setting)) - { - value = AZStd::move(potentialValue); - } - } - - return value; - } - struct EditorViewportSettingsCallbacksImpl : public EditorViewportSettingsCallbacks { EditorViewportSettingsCallbacksImpl() @@ -118,399 +94,409 @@ namespace SandboxEditor AZ::Vector3 CameraDefaultEditorPosition() { return AZ::Vector3( - aznumeric_cast(GetRegistry(CameraDefaultStartingPositionX, 0.0)), - aznumeric_cast(GetRegistry(CameraDefaultStartingPositionY, -10.0)), - aznumeric_cast(GetRegistry(CameraDefaultStartingPositionZ, 4.0))); + aznumeric_cast(AzToolsFramework::GetRegistry(CameraDefaultStartingPositionX, 0.0)), + aznumeric_cast(AzToolsFramework::GetRegistry(CameraDefaultStartingPositionY, -10.0)), + aznumeric_cast(AzToolsFramework::GetRegistry(CameraDefaultStartingPositionZ, 4.0))); } void SetCameraDefaultEditorPosition(const AZ::Vector3& defaultCameraPosition) { - SetRegistry(CameraDefaultStartingPositionX, defaultCameraPosition.GetX()); - SetRegistry(CameraDefaultStartingPositionY, defaultCameraPosition.GetY()); - SetRegistry(CameraDefaultStartingPositionZ, defaultCameraPosition.GetZ()); + AzToolsFramework::SetRegistry(CameraDefaultStartingPositionX, defaultCameraPosition.GetX()); + AzToolsFramework::SetRegistry(CameraDefaultStartingPositionY, defaultCameraPosition.GetY()); + AzToolsFramework::SetRegistry(CameraDefaultStartingPositionZ, defaultCameraPosition.GetZ()); } AZ::u64 MaxItemsShownInAssetBrowserSearch() { - return GetRegistry(AssetBrowserMaxItemsShownInSearchSetting, aznumeric_cast(50)); + return AzToolsFramework::GetRegistry(AssetBrowserMaxItemsShownInSearchSetting, aznumeric_cast(50)); } void SetMaxItemsShownInAssetBrowserSearch(const AZ::u64 numberOfItemsShown) { - SetRegistry(AssetBrowserMaxItemsShownInSearchSetting, numberOfItemsShown); + AzToolsFramework::SetRegistry(AssetBrowserMaxItemsShownInSearchSetting, numberOfItemsShown); } bool GridSnappingEnabled() { - return GetRegistry(GridSnappingSetting, false); + return AzToolsFramework::GetRegistry(GridSnappingSetting, false); } void SetGridSnapping(const bool enabled) { - SetRegistry(GridSnappingSetting, enabled); + AzToolsFramework::SetRegistry(GridSnappingSetting, enabled); } float GridSnappingSize() { - return aznumeric_cast(GetRegistry(GridSizeSetting, 0.1)); + return aznumeric_cast(AzToolsFramework::GetRegistry(GridSizeSetting, 0.1)); } void SetGridSnappingSize(const float size) { - SetRegistry(GridSizeSetting, size); + AzToolsFramework::SetRegistry(GridSizeSetting, size); } bool AngleSnappingEnabled() { - return GetRegistry(AngleSnappingSetting, false); + return AzToolsFramework::GetRegistry(AngleSnappingSetting, false); } void SetAngleSnapping(const bool enabled) { - SetRegistry(AngleSnappingSetting, enabled); + AzToolsFramework::SetRegistry(AngleSnappingSetting, enabled); } float AngleSnappingSize() { - return aznumeric_cast(GetRegistry(AngleSizeSetting, 5.0)); + return aznumeric_cast(AzToolsFramework::GetRegistry(AngleSizeSetting, 5.0)); } void SetAngleSnappingSize(const float size) { - SetRegistry(AngleSizeSetting, size); + AzToolsFramework::SetRegistry(AngleSizeSetting, size); } bool ShowingGrid() { - return GetRegistry(ShowGridSetting, false); + return AzToolsFramework::GetRegistry(ShowGridSetting, false); } void SetShowingGrid(const bool showing) { - SetRegistry(ShowGridSetting, showing); + AzToolsFramework::SetRegistry(ShowGridSetting, showing); } bool StickySelectEnabled() { - return GetRegistry(StickySelectSetting, false); + return AzToolsFramework::GetRegistry(StickySelectSetting, false); } void SetStickySelectEnabled(const bool enabled) { - SetRegistry(StickySelectSetting, enabled); + AzToolsFramework::SetRegistry(StickySelectSetting, enabled); } float ManipulatorLineBoundWidth() { - return aznumeric_cast(GetRegistry(ManipulatorLineBoundWidthSetting, 0.1)); + return aznumeric_cast(AzToolsFramework::GetRegistry(ManipulatorLineBoundWidthSetting, 0.1)); } void SetManipulatorLineBoundWidth(const float lineBoundWidth) { - SetRegistry(ManipulatorLineBoundWidthSetting, lineBoundWidth); + AzToolsFramework::SetRegistry(ManipulatorLineBoundWidthSetting, lineBoundWidth); } float ManipulatorCircleBoundWidth() { - return aznumeric_cast(GetRegistry(ManipulatorCircleBoundWidthSetting, 0.1)); + return aznumeric_cast(AzToolsFramework::GetRegistry(ManipulatorCircleBoundWidthSetting, 0.1)); } void SetManipulatorCircleBoundWidth(const float circleBoundWidth) { - SetRegistry(ManipulatorCircleBoundWidthSetting, circleBoundWidth); + AzToolsFramework::SetRegistry(ManipulatorCircleBoundWidthSetting, circleBoundWidth); } float CameraTranslateSpeed() { - return aznumeric_cast(GetRegistry(CameraTranslateSpeedSetting, 10.0)); + return aznumeric_cast(AzToolsFramework::GetRegistry(CameraTranslateSpeedSetting, 10.0)); } void SetCameraTranslateSpeed(const float speed) { - SetRegistry(CameraTranslateSpeedSetting, speed); + AzToolsFramework::SetRegistry(CameraTranslateSpeedSetting, speed); } float CameraBoostMultiplier() { - return aznumeric_cast(GetRegistry(CameraBoostMultiplierSetting, 3.0)); + return aznumeric_cast(AzToolsFramework::GetRegistry(CameraBoostMultiplierSetting, 3.0)); } void SetCameraBoostMultiplier(const float multiplier) { - SetRegistry(CameraBoostMultiplierSetting, multiplier); + AzToolsFramework::SetRegistry(CameraBoostMultiplierSetting, multiplier); } float CameraRotateSpeed() { - return aznumeric_cast(GetRegistry(CameraRotateSpeedSetting, 0.005)); + return aznumeric_cast(AzToolsFramework::GetRegistry(CameraRotateSpeedSetting, 0.005)); } void SetCameraRotateSpeed(const float speed) { - SetRegistry(CameraRotateSpeedSetting, speed); + AzToolsFramework::SetRegistry(CameraRotateSpeedSetting, speed); } float CameraScrollSpeed() { - return aznumeric_cast(GetRegistry(CameraScrollSpeedSetting, 0.02)); + return aznumeric_cast(AzToolsFramework::GetRegistry(CameraScrollSpeedSetting, 0.02)); } void SetCameraScrollSpeed(const float speed) { - SetRegistry(CameraScrollSpeedSetting, speed); + AzToolsFramework::SetRegistry(CameraScrollSpeedSetting, speed); } float CameraDollyMotionSpeed() { - return aznumeric_cast(GetRegistry(CameraDollyMotionSpeedSetting, 0.01)); + return aznumeric_cast(AzToolsFramework::GetRegistry(CameraDollyMotionSpeedSetting, 0.01)); } void SetCameraDollyMotionSpeed(const float speed) { - SetRegistry(CameraDollyMotionSpeedSetting, speed); + AzToolsFramework::SetRegistry(CameraDollyMotionSpeedSetting, speed); } bool CameraOrbitYawRotationInverted() { - return GetRegistry(CameraOrbitYawRotationInvertedSetting, false); + return AzToolsFramework::GetRegistry(CameraOrbitYawRotationInvertedSetting, false); } void SetCameraOrbitYawRotationInverted(const bool inverted) { - SetRegistry(CameraOrbitYawRotationInvertedSetting, inverted); + AzToolsFramework::SetRegistry(CameraOrbitYawRotationInvertedSetting, inverted); } bool CameraPanInvertedX() { - return GetRegistry(CameraPanInvertedXSetting, true); + return AzToolsFramework::GetRegistry(CameraPanInvertedXSetting, true); } void SetCameraPanInvertedX(const bool inverted) { - SetRegistry(CameraPanInvertedXSetting, inverted); + AzToolsFramework::SetRegistry(CameraPanInvertedXSetting, inverted); } bool CameraPanInvertedY() { - return GetRegistry(CameraPanInvertedYSetting, true); + return AzToolsFramework::GetRegistry(CameraPanInvertedYSetting, true); } void SetCameraPanInvertedY(const bool inverted) { - SetRegistry(CameraPanInvertedYSetting, inverted); + AzToolsFramework::SetRegistry(CameraPanInvertedYSetting, inverted); } float CameraPanSpeed() { - return aznumeric_cast(GetRegistry(CameraPanSpeedSetting, 0.01)); + return aznumeric_cast(AzToolsFramework::GetRegistry(CameraPanSpeedSetting, 0.01)); } void SetCameraPanSpeed(float speed) { - SetRegistry(CameraPanSpeedSetting, speed); + AzToolsFramework::SetRegistry(CameraPanSpeedSetting, speed); } float CameraRotateSmoothness() { - return aznumeric_cast(GetRegistry(CameraRotateSmoothnessSetting, 5.0)); + return aznumeric_cast(AzToolsFramework::GetRegistry(CameraRotateSmoothnessSetting, 5.0)); } void SetCameraRotateSmoothness(const float smoothness) { - SetRegistry(CameraRotateSmoothnessSetting, smoothness); + AzToolsFramework::SetRegistry(CameraRotateSmoothnessSetting, smoothness); } float CameraTranslateSmoothness() { - return aznumeric_cast(GetRegistry(CameraTranslateSmoothnessSetting, 5.0)); + return aznumeric_cast(AzToolsFramework::GetRegistry(CameraTranslateSmoothnessSetting, 5.0)); } void SetCameraTranslateSmoothness(const float smoothness) { - SetRegistry(CameraTranslateSmoothnessSetting, smoothness); + AzToolsFramework::SetRegistry(CameraTranslateSmoothnessSetting, smoothness); } bool CameraRotateSmoothingEnabled() { - return GetRegistry(CameraRotateSmoothingSetting, true); + return AzToolsFramework::GetRegistry(CameraRotateSmoothingSetting, true); } void SetCameraRotateSmoothingEnabled(const bool enabled) { - SetRegistry(CameraRotateSmoothingSetting, enabled); + AzToolsFramework::SetRegistry(CameraRotateSmoothingSetting, enabled); } bool CameraTranslateSmoothingEnabled() { - return GetRegistry(CameraTranslateSmoothingSetting, true); + return AzToolsFramework::GetRegistry(CameraTranslateSmoothingSetting, true); } void SetCameraTranslateSmoothingEnabled(const bool enabled) { - SetRegistry(CameraTranslateSmoothingSetting, enabled); + AzToolsFramework::SetRegistry(CameraTranslateSmoothingSetting, enabled); } bool CameraCaptureCursorForLook() { - return GetRegistry(CameraCaptureCursorLookSetting, true); + return AzToolsFramework::GetRegistry(CameraCaptureCursorLookSetting, true); } void SetCameraCaptureCursorForLook(const bool capture) { - SetRegistry(CameraCaptureCursorLookSetting, capture); + AzToolsFramework::SetRegistry(CameraCaptureCursorLookSetting, capture); } float CameraDefaultOrbitDistance() { - return aznumeric_cast(GetRegistry(CameraDefaultOrbitDistanceSetting, 20.0)); + return aznumeric_cast(AzToolsFramework::GetRegistry(CameraDefaultOrbitDistanceSetting, 20.0)); } void SetCameraDefaultOrbitDistance(const float distance) { - SetRegistry(CameraDefaultOrbitDistanceSetting, distance); + AzToolsFramework::SetRegistry(CameraDefaultOrbitDistanceSetting, distance); } AzFramework::InputChannelId CameraTranslateForwardChannelId() { return AzFramework::InputChannelId( - GetRegistry(CameraTranslateForwardIdSetting, AZStd::string("keyboard_key_alphanumeric_W")).c_str()); + AzToolsFramework::GetRegistry(CameraTranslateForwardIdSetting, AZStd::string("keyboard_key_alphanumeric_W")).c_str()); } void SetCameraTranslateForwardChannelId(AZStd::string_view cameraTranslateForwardId) { - SetRegistry(CameraTranslateForwardIdSetting, cameraTranslateForwardId); + AzToolsFramework::SetRegistry(CameraTranslateForwardIdSetting, cameraTranslateForwardId); } AzFramework::InputChannelId CameraTranslateBackwardChannelId() { return AzFramework::InputChannelId( - GetRegistry(CameraTranslateBackwardIdSetting, AZStd::string("keyboard_key_alphanumeric_S")).c_str()); + AzToolsFramework::GetRegistry(CameraTranslateBackwardIdSetting, AZStd::string("keyboard_key_alphanumeric_S")).c_str()); } void SetCameraTranslateBackwardChannelId(AZStd::string_view cameraTranslateBackwardId) { - SetRegistry(CameraTranslateBackwardIdSetting, cameraTranslateBackwardId); + AzToolsFramework::SetRegistry(CameraTranslateBackwardIdSetting, cameraTranslateBackwardId); } AzFramework::InputChannelId CameraTranslateLeftChannelId() { - return AzFramework::InputChannelId(GetRegistry(CameraTranslateLeftIdSetting, AZStd::string("keyboard_key_alphanumeric_A")).c_str()); + return AzFramework::InputChannelId( + AzToolsFramework::GetRegistry(CameraTranslateLeftIdSetting, AZStd::string("keyboard_key_alphanumeric_A")).c_str()); } void SetCameraTranslateLeftChannelId(AZStd::string_view cameraTranslateLeftId) { - SetRegistry(CameraTranslateLeftIdSetting, cameraTranslateLeftId); + AzToolsFramework::SetRegistry(CameraTranslateLeftIdSetting, cameraTranslateLeftId); } AzFramework::InputChannelId CameraTranslateRightChannelId() { return AzFramework::InputChannelId( - GetRegistry(CameraTranslateRightIdSetting, AZStd::string("keyboard_key_alphanumeric_D")).c_str()); + AzToolsFramework::GetRegistry(CameraTranslateRightIdSetting, AZStd::string("keyboard_key_alphanumeric_D")).c_str()); } void SetCameraTranslateRightChannelId(AZStd::string_view cameraTranslateRightId) { - SetRegistry(CameraTranslateRightIdSetting, cameraTranslateRightId); + AzToolsFramework::SetRegistry(CameraTranslateRightIdSetting, cameraTranslateRightId); } AzFramework::InputChannelId CameraTranslateUpChannelId() { - return AzFramework::InputChannelId(GetRegistry(CameraTranslateUpIdSetting, AZStd::string("keyboard_key_alphanumeric_E")).c_str()); + return AzFramework::InputChannelId( + AzToolsFramework::GetRegistry(CameraTranslateUpIdSetting, AZStd::string("keyboard_key_alphanumeric_E")).c_str()); } void SetCameraTranslateUpChannelId(AZStd::string_view cameraTranslateUpId) { - SetRegistry(CameraTranslateUpIdSetting, cameraTranslateUpId); + AzToolsFramework::SetRegistry(CameraTranslateUpIdSetting, cameraTranslateUpId); } AzFramework::InputChannelId CameraTranslateDownChannelId() { - return AzFramework::InputChannelId(GetRegistry(CameraTranslateDownIdSetting, AZStd::string("keyboard_key_alphanumeric_Q")).c_str()); + return AzFramework::InputChannelId( + AzToolsFramework::GetRegistry(CameraTranslateDownIdSetting, AZStd::string("keyboard_key_alphanumeric_Q")).c_str()); } void SetCameraTranslateDownChannelId(AZStd::string_view cameraTranslateDownId) { - SetRegistry(CameraTranslateDownIdSetting, cameraTranslateDownId); + AzToolsFramework::SetRegistry(CameraTranslateDownIdSetting, cameraTranslateDownId); } AzFramework::InputChannelId CameraTranslateBoostChannelId() { return AzFramework::InputChannelId( - GetRegistry(CameraTranslateBoostIdSetting, AZStd::string("keyboard_key_modifier_shift_l")).c_str()); + AzToolsFramework::GetRegistry(CameraTranslateBoostIdSetting, AZStd::string("keyboard_key_modifier_shift_l")).c_str()); } void SetCameraTranslateBoostChannelId(AZStd::string_view cameraTranslateBoostId) { - SetRegistry(CameraTranslateBoostIdSetting, cameraTranslateBoostId); + AzToolsFramework::SetRegistry(CameraTranslateBoostIdSetting, cameraTranslateBoostId); } AzFramework::InputChannelId CameraOrbitChannelId() { - return AzFramework::InputChannelId(GetRegistry(CameraOrbitIdSetting, AZStd::string("keyboard_key_modifier_alt_l")).c_str()); + return AzFramework::InputChannelId( + AzToolsFramework::GetRegistry(CameraOrbitIdSetting, AZStd::string("keyboard_key_modifier_alt_l")).c_str()); } void SetCameraOrbitChannelId(AZStd::string_view cameraOrbitId) { - SetRegistry(CameraOrbitIdSetting, cameraOrbitId); + AzToolsFramework::SetRegistry(CameraOrbitIdSetting, cameraOrbitId); } AzFramework::InputChannelId CameraFreeLookChannelId() { - return AzFramework::InputChannelId(GetRegistry(CameraFreeLookIdSetting, AZStd::string("mouse_button_right")).c_str()); + return AzFramework::InputChannelId( + AzToolsFramework::GetRegistry(CameraFreeLookIdSetting, AZStd::string("mouse_button_right")).c_str()); } void SetCameraFreeLookChannelId(AZStd::string_view cameraFreeLookId) { - SetRegistry(CameraFreeLookIdSetting, cameraFreeLookId); + AzToolsFramework::SetRegistry(CameraFreeLookIdSetting, cameraFreeLookId); } AzFramework::InputChannelId CameraFreePanChannelId() { - return AzFramework::InputChannelId(GetRegistry(CameraFreePanIdSetting, AZStd::string("mouse_button_middle")).c_str()); + return AzFramework::InputChannelId( + AzToolsFramework::GetRegistry(CameraFreePanIdSetting, AZStd::string("mouse_button_middle")).c_str()); } void SetCameraFreePanChannelId(AZStd::string_view cameraFreePanId) { - SetRegistry(CameraFreePanIdSetting, cameraFreePanId); + AzToolsFramework::SetRegistry(CameraFreePanIdSetting, cameraFreePanId); } AzFramework::InputChannelId CameraOrbitLookChannelId() { - return AzFramework::InputChannelId(GetRegistry(CameraOrbitLookIdSetting, AZStd::string("mouse_button_left")).c_str()); + return AzFramework::InputChannelId( + AzToolsFramework::GetRegistry(CameraOrbitLookIdSetting, AZStd::string("mouse_button_left")).c_str()); } void SetCameraOrbitLookChannelId(AZStd::string_view cameraOrbitLookId) { - SetRegistry(CameraOrbitLookIdSetting, cameraOrbitLookId); + AzToolsFramework::SetRegistry(CameraOrbitLookIdSetting, cameraOrbitLookId); } AzFramework::InputChannelId CameraOrbitDollyChannelId() { - return AzFramework::InputChannelId(GetRegistry(CameraOrbitDollyIdSetting, AZStd::string("mouse_button_right")).c_str()); + return AzFramework::InputChannelId( + AzToolsFramework::GetRegistry(CameraOrbitDollyIdSetting, AZStd::string("mouse_button_right")).c_str()); } void SetCameraOrbitDollyChannelId(AZStd::string_view cameraOrbitDollyId) { - SetRegistry(CameraOrbitDollyIdSetting, cameraOrbitDollyId); + AzToolsFramework::SetRegistry(CameraOrbitDollyIdSetting, cameraOrbitDollyId); } AzFramework::InputChannelId CameraOrbitPanChannelId() { - return AzFramework::InputChannelId(GetRegistry(CameraOrbitPanIdSetting, AZStd::string("mouse_button_middle")).c_str()); + return AzFramework::InputChannelId( + AzToolsFramework::GetRegistry(CameraOrbitPanIdSetting, AZStd::string("mouse_button_middle")).c_str()); } void SetCameraOrbitPanChannelId(AZStd::string_view cameraOrbitPanId) { - SetRegistry(CameraOrbitPanIdSetting, cameraOrbitPanId); + AzToolsFramework::SetRegistry(CameraOrbitPanIdSetting, cameraOrbitPanId); } AzFramework::InputChannelId CameraFocusChannelId() { - return AzFramework::InputChannelId(GetRegistry(CameraFocusIdSetting, AZStd::string("keyboard_key_alphanumeric_X")).c_str()); + return AzFramework::InputChannelId( + AzToolsFramework::GetRegistry(CameraFocusIdSetting, AZStd::string("keyboard_key_alphanumeric_X")).c_str()); } void SetCameraFocusChannelId(AZStd::string_view cameraFocusId) { - SetRegistry(CameraFocusIdSetting, cameraFocusId); + AzToolsFramework::SetRegistry(CameraFocusIdSetting, cameraFocusId); } } // namespace SandboxEditor diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/BaseManipulator.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/BaseManipulator.cpp index b514c3957f..0221d6db8a 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/BaseManipulator.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/BaseManipulator.cpp @@ -14,7 +14,7 @@ namespace AzToolsFramework { - AZ_CVAR(bool, cl_manipulatorDrawDebug, false, nullptr, AZ::ConsoleFunctorFlags::Null, "Enable debug drawing for Manipulators"); + AZ_CVAR(bool, ed_manipulatorDrawDebug, false, nullptr, AZ::ConsoleFunctorFlags::Null, "Enable debug drawing for Manipulators"); const AZ::Color BaseManipulator::s_defaultMouseOverColor = AZ::Color(1.0f, 1.0f, 0.0f, 1.0f); // yellow diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/BaseManipulator.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/BaseManipulator.h index 06e9c82e55..07a622c936 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/BaseManipulator.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/BaseManipulator.h @@ -28,7 +28,7 @@ namespace AzFramework namespace AzToolsFramework { - AZ_CVAR_EXTERNED(bool, cl_manipulatorDrawDebug); + AZ_CVAR_EXTERNED(bool, ed_manipulatorDrawDebug); namespace UndoSystem { diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/LinearManipulator.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/LinearManipulator.cpp index 2c85d9df38..ee63c5de47 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/LinearManipulator.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/LinearManipulator.cpp @@ -207,7 +207,7 @@ namespace AzToolsFramework ? AZ::Transform::CreateFromQuaternionAndTranslation(m_visualOrientationOverride, GetLocalPosition()) : GetLocalTransform(); - if (cl_manipulatorDrawDebug) + if (ed_manipulatorDrawDebug) { if (PerformingAction()) { diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/ManipulatorView.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/ManipulatorView.cpp index d3c94dc8ab..e36231032f 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/ManipulatorView.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/ManipulatorView.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include AZ_CVAR( @@ -30,6 +31,13 @@ AZ_CVAR( nullptr, AZ::ConsoleFunctorFlags::Null, "Display additional debug drawing for manipulator bounds"); +AZ_CVAR( + float, + ed_planarManipulatorBoundScaleFactor, + 1.75f, + nullptr, + AZ::ConsoleFunctorFlags::Null, + "The scale factor to apply to the planar manipulator bounds"); namespace AzToolsFramework { @@ -78,7 +86,8 @@ namespace AzToolsFramework { // check if we actually needed to flip the axis, if so, write to shouldCorrect // so we know and are able to draw it differently if we wish (e.g. hollow if flipped) - const bool correcting = ShouldFlipCameraAxis(worldFromLocal, localPosition, axis, cameraState); + const bool correcting = + FlipManipulatorAxesTowardsView() && ShouldFlipCameraAxis(worldFromLocal, localPosition, axis, cameraState); // the corrected axis, if no flip was required, output == input correctedAxis = correcting ? -axis : axis; @@ -325,7 +334,8 @@ namespace AzToolsFramework float ManipulatorView::ManipulatorViewScaleMultiplier( const AZ::Vector3& worldPosition, const AzFramework::CameraState& cameraState) const { - return ScreenSizeFixed() ? CalculateScreenToWorldMultiplier(worldPosition, cameraState) : 1.0f; + const float screenScale = ScreenSizeFixed() ? CalculateScreenToWorldMultiplier(worldPosition, cameraState) : 1.0f; + return screenScale * ManipulatorViewBaseScale(); } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -342,47 +352,77 @@ namespace AzToolsFramework const AZ::Vector3 axis1 = m_axis1; const AZ::Vector3 axis2 = m_axis2; - CameraCorrectAxis( - axis1, m_cameraCorrectedAxis1, managerState, mouseInteraction, manipulatorState.m_worldFromLocal, - manipulatorState.m_localPosition, cameraState); - CameraCorrectAxis( - axis2, m_cameraCorrectedAxis2, managerState, mouseInteraction, manipulatorState.m_worldFromLocal, - manipulatorState.m_localPosition, cameraState); + // support partial application of CameraCorrectAxis to reduce redundant call site parameters + auto cameraCorrectAxisPartialFn = + [&manipulatorState, &managerState, &mouseInteraction, &cameraState](const AZ::Vector3& inAxis, AZ::Vector3& outAxis) + { + CameraCorrectAxis( + inAxis, outAxis, managerState, mouseInteraction, manipulatorState.m_worldFromLocal, manipulatorState.m_localPosition, + cameraState); + }; - const Picking::BoundShapeQuad quadBound = CalculateQuadBound( - manipulatorState.m_localPosition, manipulatorState, m_cameraCorrectedAxis1, m_cameraCorrectedAxis2, - m_size * - ManipulatorViewScaleMultiplier( - manipulatorState.m_worldFromLocal.TransformPoint(manipulatorState.m_localPosition), cameraState)); + cameraCorrectAxisPartialFn(axis1, m_cameraCorrectedAxis1); + cameraCorrectAxisPartialFn(axis2, m_cameraCorrectedAxis2); + cameraCorrectAxisPartialFn(axis1 * axis1.Dot(m_offset), m_cameraCorrectedOffsetAxis1); + cameraCorrectAxisPartialFn(axis2 * axis2.Dot(m_offset), m_cameraCorrectedOffsetAxis2); + + const AZ::Vector3 totalScale = + manipulatorState.m_nonUniformScale * AZ::Vector3(manipulatorState.m_worldFromLocal.GetUniformScale()); + + const auto cameraCorrectedVisualOffset = (m_cameraCorrectedOffsetAxis1 + m_cameraCorrectedOffsetAxis2) * totalScale.GetReciprocal(); + const auto viewScale = + ManipulatorViewScaleMultiplier(manipulatorState.m_worldFromLocal.TransformPoint(manipulatorState.m_localPosition), cameraState); + const Picking::BoundShapeQuad quadBoundVisual = CalculateQuadBound( + manipulatorState.m_localPosition + (cameraCorrectedVisualOffset * viewScale), manipulatorState, m_cameraCorrectedAxis1, + m_cameraCorrectedAxis2, m_size * viewScale); debugDisplay.SetLineWidth(defaultLineWidth(manipulatorState.m_mouseOver)); debugDisplay.SetColor(ViewColor(manipulatorState.m_mouseOver, m_axis1Color, m_mouseOverColor).GetAsVector4()); - debugDisplay.DrawLine(quadBound.m_corner4, quadBound.m_corner3); + debugDisplay.DrawLine(quadBoundVisual.m_corner4, quadBoundVisual.m_corner3); + debugDisplay.DrawLine(quadBoundVisual.m_corner1, quadBoundVisual.m_corner2); debugDisplay.SetColor(ViewColor(manipulatorState.m_mouseOver, m_axis2Color, m_mouseOverColor).GetAsVector4()); - debugDisplay.DrawLine(quadBound.m_corner2, quadBound.m_corner3); + debugDisplay.DrawLine(quadBoundVisual.m_corner2, quadBoundVisual.m_corner3); + debugDisplay.DrawLine(quadBoundVisual.m_corner1, quadBoundVisual.m_corner4); if (manipulatorState.m_mouseOver) { debugDisplay.SetColor(Vector3ToVector4(m_mouseOverColor.GetAsVector3(), 0.5f)); debugDisplay.CullOff(); - debugDisplay.DrawQuad(quadBound.m_corner1, quadBound.m_corner2, quadBound.m_corner3, quadBound.m_corner4); + debugDisplay.DrawQuad( + quadBoundVisual.m_corner1, quadBoundVisual.m_corner2, quadBoundVisual.m_corner3, quadBoundVisual.m_corner4); debugDisplay.CullOn(); } - RefreshBoundInternal(managerId, manipulatorId, quadBound); + // total size of bounds to use for mouse intersection + const float hitSize = m_size * ed_planarManipulatorBoundScaleFactor; + // size of edge bounds (the 'margin/border' outside the visual representation) + const float edgeSize = (hitSize - m_size) * 0.5f; + const AZ::Vector3 edgeOffset = + ((m_cameraCorrectedAxis1 * edgeSize + m_cameraCorrectedAxis2 * edgeSize) * totalScale.GetReciprocal()); + const auto cameraCorrectedHitOffset = cameraCorrectedVisualOffset - edgeOffset; + const Picking::BoundShapeQuad quadBoundHit = CalculateQuadBound( + manipulatorState.m_localPosition + (cameraCorrectedHitOffset * viewScale), manipulatorState, m_cameraCorrectedAxis1, + m_cameraCorrectedAxis2, hitSize * viewScale); + + if (ed_manipulatorDisplayBoundDebug) + { + debugDisplay.DrawQuad(quadBoundHit.m_corner1, quadBoundHit.m_corner2, quadBoundHit.m_corner3, quadBoundHit.m_corner4); + } + + RefreshBoundInternal(managerId, manipulatorId, quadBoundHit); } void ManipulatorViewQuadBillboard::Draw( const ManipulatorManagerId managerId, - const ManipulatorManagerState& /*managerState*/, + [[maybe_unused]] const ManipulatorManagerState& managerState, const ManipulatorId manipulatorId, const ManipulatorState& manipulatorState, AzFramework::DebugDisplayRequests& debugDisplay, const AzFramework::CameraState& cameraState, - const ViewportInteraction::MouseInteraction& /*mouseInteraction*/) + [[maybe_unused]] const ViewportInteraction::MouseInteraction& mouseInteraction) { const Picking::BoundShapeQuad quadBound = CalculateQuadBoundBillboard( manipulatorState.m_localPosition, manipulatorState.m_worldFromLocal, @@ -442,7 +482,7 @@ namespace AzToolsFramework void ManipulatorViewLineSelect::Draw( const ManipulatorManagerId managerId, - const ManipulatorManagerState& /*managerState*/, + [[maybe_unused]] const ManipulatorManagerState& managerState, const ManipulatorId manipulatorId, const ManipulatorState& manipulatorState, AzFramework::DebugDisplayRequests& debugDisplay, @@ -570,7 +610,7 @@ namespace AzToolsFramework void ManipulatorViewSphere::Draw( const ManipulatorManagerId managerId, - const ManipulatorManagerState& /*managerState*/, + [[maybe_unused]] const ManipulatorManagerState& managerState, const ManipulatorId manipulatorId, const ManipulatorState& manipulatorState, AzFramework::DebugDisplayRequests& debugDisplay, @@ -599,12 +639,12 @@ namespace AzToolsFramework void ManipulatorViewCircle::Draw( const ManipulatorManagerId managerId, - const ManipulatorManagerState& /*managerState*/, + [[maybe_unused]] const ManipulatorManagerState& managerState, const ManipulatorId manipulatorId, const ManipulatorState& manipulatorState, AzFramework::DebugDisplayRequests& debugDisplay, const AzFramework::CameraState& cameraState, - const ViewportInteraction::MouseInteraction& /*mouseInteraction*/) + [[maybe_unused]] const ViewportInteraction::MouseInteraction& mouseInteraction) { const float viewScale = ManipulatorViewScaleMultiplier(manipulatorState.m_worldFromLocal.TransformPoint(manipulatorState.m_localPosition), cameraState); @@ -665,7 +705,7 @@ namespace AzToolsFramework void ManipulatorViewSplineSelect::Draw( const ManipulatorManagerId managerId, - const ManipulatorManagerState& /*managerState*/, + [[maybe_unused]] const ManipulatorManagerState& managerState, const ManipulatorId manipulatorId, const ManipulatorState& manipulatorState, AzFramework::DebugDisplayRequests& debugDisplay, @@ -698,12 +738,17 @@ namespace AzToolsFramework /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// AZStd::unique_ptr CreateManipulatorViewQuad( - const PlanarManipulator& planarManipulator, const AZ::Color& axis1Color, const AZ::Color& axis2Color, const float size) + const PlanarManipulator& planarManipulator, + const AZ::Color& axis1Color, + const AZ::Color& axis2Color, + const AZ::Vector3& offset, + const float size) { AZStd::unique_ptr viewQuad = AZStd::make_unique(); viewQuad->m_axis1 = planarManipulator.GetAxis1(); viewQuad->m_axis2 = planarManipulator.GetAxis2(); viewQuad->m_size = size; + viewQuad->m_offset = offset; viewQuad->m_axis1Color = axis1Color; viewQuad->m_axis2Color = axis2Color; return viewQuad; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/ManipulatorView.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/ManipulatorView.h index 9eb84c7e0b..6f94a9d253 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/ManipulatorView.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/ManipulatorView.h @@ -54,7 +54,7 @@ namespace AzToolsFramework AZ_RTTI(ManipulatorView, "{7529E3E9-39B3-4D15-899A-FA13770113B2}") ManipulatorView(); - ManipulatorView(bool screenSizeFixed); + explicit ManipulatorView(bool screenSizeFixed); virtual ~ManipulatorView(); ManipulatorView(ManipulatorView&&) = default; ManipulatorView& operator=(ManipulatorView&&) = default; @@ -117,13 +117,16 @@ namespace AzToolsFramework AZ::Vector3 m_axis1 = AZ::Vector3(1.0f, 0.0f, 0.0f); AZ::Vector3 m_axis2 = AZ::Vector3(0.0f, 1.0f, 0.0f); + AZ::Vector3 m_offset = AZ::Vector3::CreateZero(); AZ::Color m_axis1Color = AZ::Color(1.0f, 0.0f, 0.0f, 1.0f); AZ::Color m_axis2Color = AZ::Color(1.0f, 0.0f, 0.0f, 1.0f); float m_size = 0.06f; //!< size to render and do mouse ray intersection tests against. private: - AZ::Vector3 m_cameraCorrectedAxis1; - AZ::Vector3 m_cameraCorrectedAxis2; + AZ::Vector3 m_cameraCorrectedAxis1; //!< First axis of quad (should be orthogonal to second axis). + AZ::Vector3 m_cameraCorrectedAxis2; //!< Second axis of quad (should be orthogonal to first axis). + AZ::Vector3 m_cameraCorrectedOffsetAxis1; //!< Offset along first axis (parallel with first axis). + AZ::Vector3 m_cameraCorrectedOffsetAxis2; //!< Offset along second axis (parallel with second axis). }; //! A screen aligned quad, centered at the position of the manipulator, display filled. @@ -379,7 +382,11 @@ namespace AzToolsFramework // Helpers to create various manipulator views. AZStd::unique_ptr CreateManipulatorViewQuad( - const PlanarManipulator& planarManipulator, const AZ::Color& axis1Color, const AZ::Color& axis2Color, float size); + const PlanarManipulator& planarManipulator, + const AZ::Color& axis1Color, + const AZ::Color& axis2Color, + const AZ::Vector3& offset, + float size); AZStd::unique_ptr CreateManipulatorViewQuadBillboard(const AZ::Color& color, float size); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/MultiLinearManipulator.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/MultiLinearManipulator.cpp index cc8e5d4866..10c3a57749 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/MultiLinearManipulator.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/MultiLinearManipulator.cpp @@ -132,7 +132,7 @@ namespace AzToolsFramework const AzFramework::CameraState& cameraState, const ViewportInteraction::MouseInteraction& mouseInteraction) { - if (cl_manipulatorDrawDebug) + if (ed_manipulatorDrawDebug) { const AZ::Transform combined = TransformUniformScale(GetSpace()) * GetLocalTransform(); for (const auto& fixed : m_fixedAxes) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/PlanarManipulator.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/PlanarManipulator.cpp index 0326e4a07f..825edf6ba4 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/PlanarManipulator.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/PlanarManipulator.cpp @@ -171,7 +171,7 @@ namespace AzToolsFramework const AzFramework::CameraState& cameraState, const ViewportInteraction::MouseInteraction& mouseInteraction) { - if (cl_manipulatorDrawDebug) + if (ed_manipulatorDrawDebug) { if (PerformingAction()) { diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/ScaleManipulators.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/ScaleManipulators.cpp index d8c43ace9e..4b48512a5c 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/ScaleManipulators.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/ScaleManipulators.cpp @@ -9,6 +9,7 @@ #include "ScaleManipulators.h" #include +#include namespace AzToolsFramework { @@ -120,25 +121,25 @@ namespace AzToolsFramework void ScaleManipulators::ConfigureView( const float axisLength, const AZ::Color& axis1Color, const AZ::Color& axis2Color, const AZ::Color& axis3Color) { - const float boxSize = 0.1f; + const float boxHalfExtent = ScaleManipulatorBoxHalfExtent(); const AZ::Color colors[] = { axis1Color, axis2Color, axis3Color }; for (size_t manipulatorIndex = 0; manipulatorIndex < m_axisScaleManipulators.size(); ++manipulatorIndex) { - const auto lineLength = axisLength - boxSize; + const auto lineLength = axisLength - (2.0f * boxHalfExtent); ManipulatorViews views; - views.emplace_back( - CreateManipulatorViewLine(*m_axisScaleManipulators[manipulatorIndex], colors[manipulatorIndex], axisLength, m_lineBoundWidth)); + views.emplace_back(CreateManipulatorViewLine( + *m_axisScaleManipulators[manipulatorIndex], colors[manipulatorIndex], axisLength, m_lineBoundWidth)); views.emplace_back(CreateManipulatorViewBox( AZ::Transform::CreateIdentity(), colors[manipulatorIndex], - m_axisScaleManipulators[manipulatorIndex]->GetAxis() * lineLength, AZ::Vector3(boxSize))); + m_axisScaleManipulators[manipulatorIndex]->GetAxis() * (lineLength + boxHalfExtent), AZ::Vector3(boxHalfExtent))); m_axisScaleManipulators[manipulatorIndex]->SetViews(AZStd::move(views)); } ManipulatorViews views; views.emplace_back(CreateManipulatorViewBox( - AZ::Transform::CreateIdentity(), AZ::Color::CreateOne(), AZ::Vector3::CreateZero(), AZ::Vector3(boxSize))); + AZ::Transform::CreateIdentity(), AZ::Color::CreateOne(), AZ::Vector3::CreateZero(), AZ::Vector3(boxHalfExtent))); m_uniformScaleManipulator->SetViews(AZStd::move(views)); } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/TranslationManipulators.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/TranslationManipulators.cpp index 0efe310250..f6c0028546 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/TranslationManipulators.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/TranslationManipulators.cpp @@ -10,13 +10,10 @@ #include #include +#include namespace AzToolsFramework { - static const float SurfaceManipulatorTransparency = 0.75f; - static const float LinearManipulatorAxisLength = 2.0f; - static const float SurfaceManipulatorRadius = 0.1f; - static const AZ::Color LinearManipulatorXAxisColor = AZ::Color(1.0f, 0.0f, 0.0f, 1.0f); static const AZ::Color LinearManipulatorYAxisColor = AZ::Color(0.0f, 1.0f, 0.0f, 1.0f); static const AZ::Color LinearManipulatorZAxisColor = AZ::Color(0.0f, 0.0f, 1.0f, 1.0f); @@ -240,18 +237,16 @@ namespace AzToolsFramework const AZ::Color& axis2Color, const AZ::Color& axis3Color /*= AZ::Color(0.0f, 0.0f, 1.0f, 0.5f)*/) { - const float coneLength = 0.28f; - const float coneRadius = 0.07f; - const AZ::Color axesColor[] = { axis1Color, axis2Color, axis3Color }; - const auto configureLinearView = [lineBoundWidth = m_lineBoundWidth, coneLength, axisLength, - coneRadius](LinearManipulator* linearManipulator, const AZ::Color& color) + const auto configureLinearView = + [lineBoundWidth = m_lineBoundWidth, coneLength = LinearManipulatorConeLength(), axisLength, + coneRadius = LinearManipulatorConeRadius()](LinearManipulator* linearManipulator, const AZ::Color& color) { const auto lineLength = axisLength - coneLength; ManipulatorViews views; - views.emplace_back(CreateManipulatorViewLine(*linearManipulator, color, lineLength, lineBoundWidth)); + views.emplace_back(CreateManipulatorViewLine(*linearManipulator, color, axisLength, lineBoundWidth)); views.emplace_back( CreateManipulatorViewCone(*linearManipulator, color, linearManipulator->GetAxis() * lineLength, coneLength, coneRadius)); linearManipulator->SetViews(AZStd::move(views)); @@ -264,17 +259,23 @@ namespace AzToolsFramework } void TranslationManipulators::ConfigurePlanarView( + const float planeSize, const AZ::Color& plane1Color, const AZ::Color& plane2Color /*= AZ::Color(0.0f, 1.0f, 0.0f, 0.5f)*/, const AZ::Color& plane3Color /*= AZ::Color(0.0f, 0.0f, 1.0f, 0.5f)*/) { - const float planeSize = 0.6f; const AZ::Color planesColor[] = { plane1Color, plane2Color, plane3Color }; + const float linearAxisLength = LinearManipulatorAxisLength(); + const float linearConeLength = LinearManipulatorConeLength(); for (size_t manipulatorIndex = 0; manipulatorIndex < m_planarManipulators.size(); ++manipulatorIndex) { + const auto& planarManipulator = *m_planarManipulators[manipulatorIndex]; const AZStd::shared_ptr manipulatorView = CreateManipulatorViewQuad( - *m_planarManipulators[manipulatorIndex], planesColor[manipulatorIndex], planesColor[(manipulatorIndex + 1) % 3], planeSize); + *m_planarManipulators[manipulatorIndex], planesColor[manipulatorIndex], planesColor[(manipulatorIndex + 1) % 3], + (planarManipulator.GetAxis1() + planarManipulator.GetAxis2()) * + (((linearAxisLength - linearConeLength) * 0.5f) - (planeSize * 0.5f)), + planeSize); m_planarManipulators[manipulatorIndex]->SetViews(ManipulatorViews{ manipulatorView }); } @@ -286,12 +287,11 @@ namespace AzToolsFramework { m_surfaceManipulator->SetView(CreateManipulatorViewSphere( color, radius, - [](const ViewportInteraction::MouseInteraction& /*mouseInteraction*/, bool mouseOver, + []([[maybe_unused]] const ViewportInteraction::MouseInteraction& mouseInteraction, bool mouseOver, const AZ::Color& defaultColor) -> AZ::Color { const AZ::Color color[2] = { - defaultColor, - Vector3ToVector4(BaseManipulator::s_defaultMouseOverColor.GetAsVector3(), SurfaceManipulatorTransparency) + defaultColor, Vector3ToVector4(BaseManipulator::s_defaultMouseOverColor.GetAsVector3(), SurfaceManipulatorOpacity()) }; return color[mouseOver]; @@ -325,16 +325,19 @@ namespace AzToolsFramework void ConfigureTranslationManipulatorAppearance3d(TranslationManipulators* translationManipulators) { translationManipulators->SetAxes(AZ::Vector3::CreateAxisX(), AZ::Vector3::CreateAxisY(), AZ::Vector3::CreateAxisZ()); - translationManipulators->ConfigurePlanarView(LinearManipulatorXAxisColor, LinearManipulatorYAxisColor, LinearManipulatorZAxisColor); + translationManipulators->ConfigurePlanarView( + PlanarManipulatorAxisLength(), LinearManipulatorXAxisColor, LinearManipulatorYAxisColor, LinearManipulatorZAxisColor); translationManipulators->ConfigureLinearView( - LinearManipulatorAxisLength, LinearManipulatorXAxisColor, LinearManipulatorYAxisColor, LinearManipulatorZAxisColor); - translationManipulators->ConfigureSurfaceView(SurfaceManipulatorRadius, SurfaceManipulatorColor); + LinearManipulatorAxisLength(), LinearManipulatorXAxisColor, LinearManipulatorYAxisColor, LinearManipulatorZAxisColor); + translationManipulators->ConfigureSurfaceView(SurfaceManipulatorRadius(), SurfaceManipulatorColor); } void ConfigureTranslationManipulatorAppearance2d(TranslationManipulators* translationManipulators) { translationManipulators->SetAxes(AZ::Vector3::CreateAxisX(), AZ::Vector3::CreateAxisY()); - translationManipulators->ConfigurePlanarView(LinearManipulatorXAxisColor); - translationManipulators->ConfigureLinearView(LinearManipulatorAxisLength, LinearManipulatorXAxisColor, LinearManipulatorYAxisColor); + translationManipulators->ConfigurePlanarView( + PlanarManipulatorAxisLength(), LinearManipulatorXAxisColor, LinearManipulatorYAxisColor); + translationManipulators->ConfigureLinearView( + LinearManipulatorAxisLength(), LinearManipulatorXAxisColor, LinearManipulatorYAxisColor); } } // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/TranslationManipulators.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/TranslationManipulators.h index 65e53f0680..341bb2d4ac 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/TranslationManipulators.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Manipulators/TranslationManipulators.h @@ -53,6 +53,7 @@ namespace AzToolsFramework void SetAxes(const AZ::Vector3& axis1, const AZ::Vector3& axis2, const AZ::Vector3& axis3 = AZ::Vector3::CreateAxisZ()); void ConfigurePlanarView( + float planeSize, const AZ::Color& plane1Color, const AZ::Color& plane2Color = AZ::Color(0.0f, 1.0f, 0.0f, 0.5f), const AZ::Color& plane3Color = AZ::Color(0.0f, 0.0f, 1.0f, 0.5f)); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Viewport/ViewportSettings.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Viewport/ViewportSettings.cpp new file mode 100644 index 0000000000..f8550b1a29 --- /dev/null +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Viewport/ViewportSettings.cpp @@ -0,0 +1,123 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#include + +namespace AzToolsFramework +{ + constexpr AZStd::string_view FlipManipulatorAxesTowardsViewSetting = "/Amazon/Preferences/Editor/Manipulator/FlipManipulatorAxesTowardsView"; + constexpr AZStd::string_view LinearManipulatorAxisLengthSetting = "/Amazon/Preferences/Editor/Manipulator/LinearManipulatorAxisLength"; + constexpr AZStd::string_view PlanarManipulatorAxisLengthSetting = "/Amazon/Preferences/Editor/Manipulator/PlanarManipulatorAxisLength"; + constexpr AZStd::string_view SurfaceManipulatorRadiusSetting = "/Amazon/Preferences/Editor/Manipulator/SurfaceManipulatorRadius"; + constexpr AZStd::string_view SurfaceManipulatorOpacitySetting = "/Amazon/Preferences/Editor/Manipulator/SurfaceManipulatorOpacity"; + constexpr AZStd::string_view LinearManipulatorConeLengthSetting = "/Amazon/Preferences/Editor/Manipulator/LinearManipulatorConeLength"; + constexpr AZStd::string_view LinearManipulatorConeRadiusSetting = "/Amazon/Preferences/Editor/Manipulator/LinearManipulatorConeRadius"; + constexpr AZStd::string_view ScaleManipulatorBoxHalfExtentSetting = "/Amazon/Preferences/Editor/Manipulator/ScaleManipulatorBoxHalfExtent"; + constexpr AZStd::string_view RotationManipulatorRadiusSetting = "/Amazon/Preferences/Editor/Manipulator/RotationManipulatorRadius"; + constexpr AZStd::string_view ManipulatorViewBaseScaleSetting = "/Amazon/Preferences/Editor/Manipulator/ViewBaseScale"; + + bool FlipManipulatorAxesTowardsView() + { + return GetRegistry(FlipManipulatorAxesTowardsViewSetting, true); + } + + void SetFlipManipulatorAxesTowardsView(const bool enabled) + { + SetRegistry(FlipManipulatorAxesTowardsViewSetting, enabled); + } + + float LinearManipulatorAxisLength() + { + return aznumeric_cast(GetRegistry(LinearManipulatorAxisLengthSetting, 2.0)); + } + + void SetLinearManipulatorAxisLength(const float length) + { + SetRegistry(LinearManipulatorAxisLengthSetting, length); + } + + float PlanarManipulatorAxisLength() + { + return aznumeric_cast(GetRegistry(PlanarManipulatorAxisLengthSetting, 0.6)); + } + + void SetPlanarManipulatorAxisLength(const float length) + { + SetRegistry(PlanarManipulatorAxisLengthSetting, length); + } + + float SurfaceManipulatorRadius() + { + return aznumeric_cast(GetRegistry(SurfaceManipulatorRadiusSetting, 0.1)); + } + + void SetSurfaceManipulatorRadius(const float radius) + { + SetRegistry(SurfaceManipulatorRadiusSetting, radius); + } + + float SurfaceManipulatorOpacity() + { + return aznumeric_cast(GetRegistry(SurfaceManipulatorOpacitySetting, 0.75)); + } + + void SetSurfaceManipulatorOpacity(const float opacity) + { + SetRegistry(SurfaceManipulatorOpacitySetting, opacity); + } + + float LinearManipulatorConeLength() + { + return aznumeric_cast(GetRegistry(LinearManipulatorConeLengthSetting, 0.28)); + } + + void SetLinearManipulatorConeLength(const float length) + { + SetRegistry(LinearManipulatorConeLengthSetting, length); + } + + float LinearManipulatorConeRadius() + { + return aznumeric_cast(GetRegistry(LinearManipulatorConeRadiusSetting, 0.1)); + } + + void SetLinearManipulatorConeRadius(const float radius) + { + SetRegistry(LinearManipulatorConeRadiusSetting, radius); + } + + float ScaleManipulatorBoxHalfExtent() + { + return aznumeric_cast(GetRegistry(ScaleManipulatorBoxHalfExtentSetting, 0.1)); + } + + void SetScaleManipulatorBoxHalfExtent(const float size) + { + SetRegistry(ScaleManipulatorBoxHalfExtentSetting, size); + } + + float RotationManipulatorRadius() + { + return aznumeric_cast(GetRegistry(RotationManipulatorRadiusSetting, 2.0)); + } + + void SetRotationManipulatorRadius(const float radius) + { + SetRegistry(RotationManipulatorRadiusSetting, radius); + } + + float ManipulatorViewBaseScale() + { + return aznumeric_cast(GetRegistry(ManipulatorViewBaseScaleSetting, 1.0)); + } + + void SetManipulatorViewBaseScale(const float scale) + { + SetRegistry(ManipulatorViewBaseScaleSetting, scale); + } +} // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Viewport/ViewportSettings.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Viewport/ViewportSettings.h new file mode 100644 index 0000000000..f5371b6035 --- /dev/null +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Viewport/ViewportSettings.h @@ -0,0 +1,69 @@ +/* + * Copyright (c) Contributors to the Open 3D Engine Project. + * For complete copyright and license terms please see the LICENSE at the root of this distribution. + * + * SPDX-License-Identifier: Apache-2.0 OR MIT + * + */ + +#pragma once + +#include + +namespace AzToolsFramework +{ + template + void SetRegistry(const AZStd::string_view setting, T&& value) + { + if (auto* registry = AZ::SettingsRegistry::Get()) + { + registry->Set(setting, AZStd::forward(value)); + } + } + + template + AZStd::remove_cvref_t GetRegistry(const AZStd::string_view setting, T&& defaultValue) + { + AZStd::remove_cvref_t value = AZStd::forward(defaultValue); + if (const auto* registry = AZ::SettingsRegistry::Get()) + { + T potentialValue; + if (registry->Get(potentialValue, setting)) + { + value = AZStd::move(potentialValue); + } + } + + return value; + } + + bool FlipManipulatorAxesTowardsView(); + void SetFlipManipulatorAxesTowardsView(bool enabled); + + float LinearManipulatorAxisLength(); + void SetLinearManipulatorAxisLength(float length); + + float PlanarManipulatorAxisLength(); + void SetPlanarManipulatorAxisLength(float length); + + float SurfaceManipulatorRadius(); + void SetSurfaceManipulatorRadius(float radius); + + float SurfaceManipulatorOpacity(); + void SetSurfaceManipulatorOpacity(float opacity); + + float LinearManipulatorConeLength(); + void SetLinearManipulatorConeLength(float length); + + float LinearManipulatorConeRadius(); + void SetLinearManipulatorConeRadius(float radius); + + float ScaleManipulatorBoxHalfExtent(); + void SetScaleManipulatorBoxHalfExtent(float halfExtent); + + float RotationManipulatorRadius(); + void SetRotationManipulatorRadius(float radius); + + float ManipulatorViewBaseScale(); + void SetManipulatorViewBaseScale(float scale); +} // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp index d3cfed4665..f43e8225a6 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/EditorTransformComponentSelection.cpp @@ -33,6 +33,7 @@ #include #include #include +#include #include #include #include @@ -1376,7 +1377,7 @@ namespace AzToolsFramework // view rotationManipulators->SetLocalAxes(AZ::Vector3::CreateAxisX(), AZ::Vector3::CreateAxisY(), AZ::Vector3::CreateAxisZ()); rotationManipulators->ConfigureView( - 2.0f, AzFramework::ViewportColors::XAxisColor, AzFramework::ViewportColors::YAxisColor, + RotationManipulatorRadius(), AzFramework::ViewportColors::XAxisColor, AzFramework::ViewportColors::YAxisColor, AzFramework::ViewportColors::ZAxisColor); struct SharedRotationState @@ -1535,7 +1536,8 @@ namespace AzToolsFramework RecalculateAverageManipulatorTransform(m_entityIdManipulators.m_lookups, m_pivotOverrideFrame, m_pivotMode, m_referenceFrame)); scaleManipulators->SetAxes(AZ::Vector3::CreateAxisX(), AZ::Vector3::CreateAxisY(), AZ::Vector3::CreateAxisZ()); - scaleManipulators->ConfigureView(2.0f, AZ::Color::CreateOne(), AZ::Color::CreateOne(), AZ::Color::CreateOne()); + scaleManipulators->ConfigureView( + LinearManipulatorAxisLength(), AZ::Color::CreateOne(), AZ::Color::CreateOne(), AZ::Color::CreateOne()); struct SharedScaleState { diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake b/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake index a6c9adb19e..49eaa9b34a 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake @@ -506,6 +506,8 @@ set(FILES Viewport/ViewportMessages.cpp Viewport/ViewportTypes.h Viewport/ViewportTypes.cpp + Viewport/ViewportSettings.h + Viewport/ViewportSettings.cpp ViewportUi/Button.h ViewportUi/Button.cpp ViewportUi/ButtonGroup.h diff --git a/Gems/LmbrCentral/Code/Tests/EditorPolygonPrismShapeComponentTests.cpp b/Gems/LmbrCentral/Code/Tests/EditorPolygonPrismShapeComponentTests.cpp index a5802ce8d5..41fc6c5624 100644 --- a/Gems/LmbrCentral/Code/Tests/EditorPolygonPrismShapeComponentTests.cpp +++ b/Gems/LmbrCentral/Code/Tests/EditorPolygonPrismShapeComponentTests.cpp @@ -143,7 +143,7 @@ namespace LmbrCentral using EditorPolygonPrismShapeComponentManipulatorFixture = UnitTest::IndirectCallManipulatorViewportInteractionFixtureMixin; - TEST_F(EditorPolygonPrismShapeComponentManipulatorFixture, PolygonPrismNonUniformScale_ManipulatorsScaleCorrectly) + TEST_F(EditorPolygonPrismShapeComponentManipulatorFixture, PolygonPrismNonUniformScaleManipulatorsScaleCorrectly) { // set the non-uniform scale and enter the polygon prism shape component's component mode const AZ::Vector3 nonUniformScale(2.0f, 3.0f, 4.0f); @@ -171,8 +171,8 @@ namespace LmbrCentral const auto screenStart = AzFramework::WorldToScreen(worldStart, m_cameraState); const auto screenEnd = AzFramework::WorldToScreen(worldEnd, m_cameraState); - // small diagonal offset to ensure we interact with the planar manipulator and not one of the linear manipulators - const AzFramework::ScreenVector offset(5, -5); + // diagonal offset to ensure we interact with the planar manipulator and not one of the linear manipulators + const AzFramework::ScreenVector offset(50, -50); m_actionDispatcher ->CameraState(m_cameraState) diff --git a/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeAngleCone.cpp b/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeAngleCone.cpp index 11abe0fa2a..e942d6beaa 100644 --- a/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeAngleCone.cpp +++ b/Gems/PhysX/Code/Editor/Source/ComponentModes/Joints/JointsSubComponentModeAngleCone.cpp @@ -17,6 +17,7 @@ #include #include #include +#include #include #include @@ -34,22 +35,22 @@ namespace PhysX const float XRotationManipulatorWidth = 0.05f; } // namespace Internal - JointsSubComponentModeAngleCone::JointsSubComponentModeAngleCone( - const AZStd::string& propertyName, float max, float min) + JointsSubComponentModeAngleCone::JointsSubComponentModeAngleCone(const AZStd::string& propertyName, float max, float min) : m_propertyName(propertyName) , m_max(max) , m_min(min) { - } void JointsSubComponentModeAngleCone::Setup(const AZ::EntityComponentIdPair& idPair) { m_entityComponentIdPair = idPair; EditorJointRequestBus::EventResult( - m_resetPostion, m_entityComponentIdPair, &PhysX::EditorJointRequests::GetVector3Value, JointsComponentModeCommon::ParamaterNames::Position); + m_resetPostion, m_entityComponentIdPair, &PhysX::EditorJointRequests::GetVector3Value, + JointsComponentModeCommon::ParamaterNames::Position); EditorJointRequestBus::EventResult( - m_resetRotation, m_entityComponentIdPair, &PhysX::EditorJointRequests::GetVector3Value, JointsComponentModeCommon::ParamaterNames::Rotation); + m_resetRotation, m_entityComponentIdPair, &PhysX::EditorJointRequests::GetVector3Value, + JointsComponentModeCommon::ParamaterNames::Rotation); EditorJointRequestBus::EventResult( m_resetLimits, m_entityComponentIdPair, &EditorJointRequests::GetLinearValuePair, m_propertyName); @@ -57,7 +58,8 @@ namespace PhysX AZ::Transform localTransform = AZ::Transform::CreateIdentity(); EditorJointRequestBus::EventResult( - localTransform, m_entityComponentIdPair, &EditorJointRequests::GetTransformValue, JointsComponentModeCommon::ParamaterNames::Transform); + localTransform, m_entityComponentIdPair, &EditorJointRequests::GetTransformValue, + JointsComponentModeCommon::ParamaterNames::Transform); const AZ::Quaternion localRotation = localTransform.GetRotation(); // Initialize manipulators used to resize the base of the cone. @@ -105,10 +107,10 @@ namespace PhysX { AngleLimitsFloatPair m_startValues; }; - auto sharedState = AZStd::make_shared(); + auto sharedState = AZStd::make_shared(); m_yLinearManipulator->InstallLeftMouseDownCallback( - [this, sharedState](const AzToolsFramework::LinearManipulator::Action& /*action*/) mutable + [this, sharedState](const AzToolsFramework::LinearManipulator::Action& /*action*/) { AngleLimitsFloatPair currentValue; EditorJointRequestBus::EventResult( @@ -137,7 +139,7 @@ namespace PhysX }); m_zLinearManipulator->InstallLeftMouseDownCallback( - [this, sharedState](const AzToolsFramework::LinearManipulator::Action& /*action*/) mutable + [this, sharedState](const AzToolsFramework::LinearManipulator::Action& /*action*/) { AngleLimitsFloatPair currentValue; EditorJointRequestBus::EventResult( @@ -166,7 +168,7 @@ namespace PhysX }); m_yzPlanarManipulator->InstallLeftMouseDownCallback( - [this, sharedState]([[maybe_unused]]const AzToolsFramework::PlanarManipulator::Action& action) mutable + [this, sharedState]([[maybe_unused]] const AzToolsFramework::PlanarManipulator::Action& action) { AngleLimitsFloatPair currentValue; EditorJointRequestBus::EventResult( @@ -207,9 +209,8 @@ namespace PhysX { AZ::Transform m_startTM; }; - auto sharedStateXRotate = AZStd::make_shared(); - auto mouseDownCallback = [this, sharedRotationState](const AzToolsFramework::AngularManipulator::Action& action) mutable -> void + auto mouseDownCallback = [this, sharedRotationState](const AzToolsFramework::AngularManipulator::Action& action) { AZ::Quaternion normalizedStart = action.m_start.m_rotation.GetNormalized(); sharedRotationState->m_axis = AZ::Vector3(normalizedStart.GetX(), normalizedStart.GetY(), normalizedStart.GetZ()); @@ -222,8 +223,9 @@ namespace PhysX sharedRotationState->m_valuePair = currentValue; }; + auto sharedStateXRotate = AZStd::make_shared(); auto mouseDownRotateXCallback = - [this, sharedStateXRotate]([[maybe_unused]] const AzToolsFramework::AngularManipulator::Action& action) mutable -> void + [this, sharedStateXRotate]([[maybe_unused]] const AzToolsFramework::AngularManipulator::Action& action) { PhysX::EditorJointRequestBus::EventResult( sharedStateXRotate->m_startTM, m_entityComponentIdPair, &PhysX::EditorJointRequests::GetTransformValue, @@ -233,7 +235,7 @@ namespace PhysX m_xRotationManipulator->InstallLeftMouseDownCallback(mouseDownRotateXCallback); m_xRotationManipulator->InstallMouseMoveCallback( - [this, sharedStateXRotate](const AzToolsFramework::AngularManipulator::Action& action) mutable -> void + [this, sharedStateXRotate](const AzToolsFramework::AngularManipulator::Action& action) { const AZ::Quaternion manipulatorOrientation = action.m_start.m_rotation * action.m_current.m_delta; @@ -241,11 +243,11 @@ namespace PhysX newTransform = sharedStateXRotate->m_startTM * AZ::Transform::CreateFromQuaternion(action.m_current.m_delta); PhysX::EditorJointRequestBus::Event( - m_entityComponentIdPair, &PhysX::EditorJointRequests::SetVector3Value, JointsComponentModeCommon::ParamaterNames::Position, - newTransform.GetTranslation()); + m_entityComponentIdPair, &PhysX::EditorJointRequests::SetVector3Value, + JointsComponentModeCommon::ParamaterNames::Position, newTransform.GetTranslation()); PhysX::EditorJointRequestBus::Event( - m_entityComponentIdPair, &PhysX::EditorJointRequests::SetVector3Value, JointsComponentModeCommon::ParamaterNames::Rotation, - newTransform.GetRotation().GetEulerDegrees()); + m_entityComponentIdPair, &PhysX::EditorJointRequests::SetVector3Value, + JointsComponentModeCommon::ParamaterNames::Rotation, newTransform.GetRotation().GetEulerDegrees()); m_yLinearManipulator->SetLocalOrientation(manipulatorOrientation); m_zLinearManipulator->SetLocalOrientation(manipulatorOrientation); @@ -332,8 +334,7 @@ namespace PhysX { AzToolsFramework::ManipulatorViews views; views.emplace_back(CreateManipulatorViewLine( - *linearManipulator, color, axisLength, - AzToolsFramework::ManipulatorLineBoundWidth(AzFramework::InvalidViewportId))); + *linearManipulator, color, axisLength, AzToolsFramework::ManipulatorLineBoundWidth(AzFramework::InvalidViewportId))); views.emplace_back(CreateManipulatorViewCone( *linearManipulator, color, linearManipulator->GetAxis() * (axisLength - coneLength), coneLength, coneRadius)); linearManipulator->SetViews(AZStd::move(views)); @@ -345,9 +346,9 @@ namespace PhysX void JointsSubComponentModeAngleCone::ConfigurePlanarView(const AZ::Color& planeColor, const AZ::Color& plane2Color) { - const float planeSize = 0.6f; AzToolsFramework::ManipulatorViews views; - views.emplace_back(CreateManipulatorViewQuad(*m_yzPlanarManipulator, planeColor, plane2Color, planeSize)); + views.emplace_back(CreateManipulatorViewQuad( + *m_yzPlanarManipulator, planeColor, plane2Color, AZ::Vector3::CreateZero(), AzToolsFramework::PlanarManipulatorAxisLength())); m_yzPlanarManipulator->SetViews(AZStd::move(views)); }