diff --git a/Code/Sandbox/Editor/EditorViewportCamera.cpp b/Code/Sandbox/Editor/EditorViewportCamera.cpp index 30fce566e5..aa1d3d6bb4 100644 --- a/Code/Sandbox/Editor/EditorViewportCamera.cpp +++ b/Code/Sandbox/Editor/EditorViewportCamera.cpp @@ -14,9 +14,15 @@ #include #include +#include namespace SandboxEditor { + static AZ::Quaternion CameraRotation(const float pitch, const float yaw) + { + return AZ::Quaternion::CreateRotationZ(yaw) * AZ::Quaternion::CreateRotationX(pitch); + } + void SetDefaultViewportCameraPosition(const AZ::Vector3& position) { auto viewportContextManager = AZ::Interface::Get(); @@ -33,10 +39,20 @@ namespace SandboxEditor auto viewportContextManager = AZ::Interface::Get(); if (auto viewportContext = viewportContextManager->GetDefaultViewportContext()) { - const auto rotation = AZ::Quaternion::CreateRotationZ(yaw) * AZ::Quaternion::CreateRotationX(pitch); const auto& currentCameraTransform = viewportContext->GetCameraTransform(); viewportContext->SetCameraTransform( - AZ::Transform::CreateFromQuaternionAndTranslation(rotation, currentCameraTransform.GetTranslation())); + AZ::Transform::CreateFromQuaternionAndTranslation(CameraRotation(pitch, yaw), currentCameraTransform.GetTranslation())); + } + } + + void InterpolateDefaultViewportCameraToTransform(const AZ::Vector3& position, const float pitch, const float yaw) + { + auto viewportContextManager = AZ::Interface::Get(); + if (auto viewportContext = viewportContextManager->GetDefaultViewportContext()) + { + AtomToolsFramework::ModularViewportCameraControllerRequestBus::Event( + viewportContext->GetId(), &AtomToolsFramework::ModularViewportCameraControllerRequestBus::Events::InterpolateToTransform, + AZ::Transform::CreateFromQuaternionAndTranslation(CameraRotation(pitch, yaw), position), 0.0f); } } diff --git a/Code/Sandbox/Editor/EditorViewportCamera.h b/Code/Sandbox/Editor/EditorViewportCamera.h index 97c37e337e..e589784e4a 100644 --- a/Code/Sandbox/Editor/EditorViewportCamera.h +++ b/Code/Sandbox/Editor/EditorViewportCamera.h @@ -30,6 +30,12 @@ namespace SandboxEditor //! @param yaw Amount of yaw in radians. SANDBOX_API void SetDefaultViewportCameraRotation(float pitch, float yaw); + //! Set the camera to interpolate to the given position and orientation. + //! @param position The new position of the camera. + //! @param pitch Amount of pitch in radians. + //! @param yaw Amount of yaw in radians. + SANDBOX_API void InterpolateDefaultViewportCameraToTransform(const AZ::Vector3& position, float pitch, float yaw); + //! Get the default viewport camera transform. SANDBOX_API AZ::Transform GetDefaultViewportCameraTransform(); } // namespace SandboxEditor diff --git a/Code/Sandbox/Editor/GotoPositionDlg.cpp b/Code/Sandbox/Editor/GotoPositionDlg.cpp index 967c2d032b..399db179e4 100644 --- a/Code/Sandbox/Editor/GotoPositionDlg.cpp +++ b/Code/Sandbox/Editor/GotoPositionDlg.cpp @@ -16,6 +16,7 @@ // Editor #include "EditorViewportCamera.h" +#include "EditorViewportSettings.h" #include "GameEngine.h" #include "ViewManager.h" @@ -111,12 +112,24 @@ void GotoPositionDialog::OnUpdateNumbers() void GotoPositionDialog::accept() { - SandboxEditor::SetDefaultViewportCameraPosition(AZ::Vector3( - aznumeric_cast(m_ui->m_dymX->value()), aznumeric_cast(m_ui->m_dymY->value()), - aznumeric_cast(m_ui->m_dymZ->value()))); - SandboxEditor::SetDefaultViewportCameraRotation( - AZ::DegToRad(aznumeric_cast(m_ui->m_dymAnglePitch->value())), - AZ::DegToRad(aznumeric_cast(m_ui->m_dymAngleYaw->value()))); + if (SandboxEditor::UsingNewCameraSystem()) + { + SandboxEditor::InterpolateDefaultViewportCameraToTransform( + AZ::Vector3( + aznumeric_cast(m_ui->m_dymX->value()), aznumeric_cast(m_ui->m_dymY->value()), + aznumeric_cast(m_ui->m_dymZ->value())), + AZ::DegToRad(aznumeric_cast(m_ui->m_dymAnglePitch->value())), + AZ::DegToRad(aznumeric_cast(m_ui->m_dymAngleYaw->value()))); + } + else + { + SandboxEditor::SetDefaultViewportCameraPosition(AZ::Vector3( + aznumeric_cast(m_ui->m_dymX->value()), aznumeric_cast(m_ui->m_dymY->value()), + aznumeric_cast(m_ui->m_dymZ->value()))); + SandboxEditor::SetDefaultViewportCameraRotation( + AZ::DegToRad(aznumeric_cast(m_ui->m_dymAnglePitch->value())), + AZ::DegToRad(aznumeric_cast(m_ui->m_dymAngleYaw->value()))); + } QDialog::accept(); } diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Viewport/ModularViewportCameraController.cpp b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Viewport/ModularViewportCameraController.cpp index f92c177759..adfa2d3d1d 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Viewport/ModularViewportCameraController.cpp +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Viewport/ModularViewportCameraController.cpp @@ -32,7 +32,7 @@ namespace AtomToolsFramework nullptr, AZ::ConsoleFunctorFlags::Null, ""); - AZ_CVAR(float, ed_cameraSystemOrbitPointSize, 0.5f, nullptr, AZ::ConsoleFunctorFlags::Null, ""); + AZ_CVAR(float, ed_cameraSystemOrbitPointSize, 0.1f, nullptr, AZ::ConsoleFunctorFlags::Null, ""); // debug void DrawPreviewAxis(AzFramework::DebugDisplayRequests& display, const AZ::Transform& transform, const float axisLength)