diff --git a/Code/Editor/EditorViewportWidget.cpp b/Code/Editor/EditorViewportWidget.cpp index abca9ce15b..017d6876d1 100644 --- a/Code/Editor/EditorViewportWidget.cpp +++ b/Code/Editor/EditorViewportWidget.cpp @@ -2368,6 +2368,7 @@ void EditorViewportWidget::CenterOnAABB(const AABB& aabb) m_orbitDistance = fabs(m_orbitDistance); SetViewTM(newTM); + SandboxEditor::OrbitCameraControlsBus::Event(GetViewportId(), &SandboxEditor::OrbitCameraControlsBus::Events::SetOrbitDistance, m_orbitDistance); } void EditorViewportWidget::CenterOnSliceInstance() diff --git a/Code/Editor/LegacyViewportCameraController.cpp b/Code/Editor/LegacyViewportCameraController.cpp index 8ed3f02228..3dbb650469 100644 --- a/Code/Editor/LegacyViewportCameraController.cpp +++ b/Code/Editor/LegacyViewportCameraController.cpp @@ -26,6 +26,12 @@ namespace SandboxEditor LegacyViewportCameraControllerInstance::LegacyViewportCameraControllerInstance(AzFramework::ViewportId viewportId, LegacyViewportCameraController* controller) : AzFramework::MultiViewportControllerInstanceInterface(viewportId, controller) { + OrbitCameraControlsBus::Handler::BusConnect(viewportId); +} + +LegacyViewportCameraControllerInstance::~LegacyViewportCameraControllerInstance() +{ + OrbitCameraControlsBus::Handler::BusDisconnect(); } bool LegacyViewportCameraControllerInstance::JustAltHeld() const @@ -59,6 +65,12 @@ bool LegacyViewportCameraControllerInstance::InvertPan() const return JustAltHeld(); } +void LegacyViewportCameraControllerInstance::SetOrbitDistance(float orbitDistance) +{ + m_orbitDistance = orbitDistance; +} + + AZ::RPI::ViewportContextPtr LegacyViewportCameraControllerInstance::GetViewportContext() { // This could be cached, if needed diff --git a/Code/Editor/LegacyViewportCameraController.h b/Code/Editor/LegacyViewportCameraController.h index 24df6a2a9c..d9598e5719 100644 --- a/Code/Editor/LegacyViewportCameraController.h +++ b/Code/Editor/LegacyViewportCameraController.h @@ -7,6 +7,7 @@ #pragma once +#include #include #include #include @@ -23,19 +24,38 @@ namespace AzFramework namespace SandboxEditor { + class OrbitCameraControls + : public AZ::EBusTraits + { + public: + ////////////////////////////////////////////////////////////////////////// + // EBusTraits overrides + static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Multiple; + static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::ById; + using BusIdType = AzFramework::ViewportId; + ////////////////////////////////////////////////////////////////////////// + + virtual void SetOrbitDistance(float orbitDistance [[maybe_unused]]) {;} + }; + using OrbitCameraControlsBus = AZ::EBus; + class LegacyViewportCameraControllerInstance; using LegacyViewportCameraController = AzFramework::MultiViewportController; class LegacyViewportCameraControllerInstance final : public AzFramework::MultiViewportControllerInstanceInterface + , public OrbitCameraControlsBus::Handler { public: LegacyViewportCameraControllerInstance(AzFramework::ViewportId viewport, LegacyViewportCameraController* controller); + ~LegacyViewportCameraControllerInstance(); bool HandleInputChannelEvent(const AzFramework::ViewportControllerInputEvent& event) override; void ResetInputChannels() override; void UpdateViewport(const AzFramework::ViewportControllerUpdateEvent& event) override; + void SetOrbitDistance(float orbitDistance) override; + private: bool JustAltHeld() const; bool NoModifierHeld() const;