Fix editor orbit camera (#1683)
* Add a way for the EditorViewportWidget to inform the legacy orbit camera of the calculated orbit distance. Signed-off-by: rgba16f <82187279+rgba16f@users.noreply.github.com>
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -26,6 +26,12 @@ namespace SandboxEditor
|
||||
LegacyViewportCameraControllerInstance::LegacyViewportCameraControllerInstance(AzFramework::ViewportId viewportId, LegacyViewportCameraController* controller)
|
||||
: AzFramework::MultiViewportControllerInstanceInterface<LegacyViewportCameraController>(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
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <AzCore/EBus/EBus.h>
|
||||
#include <AzFramework/Viewport/ViewportId.h>
|
||||
#include <AzFramework/Viewport/MultiViewportController.h>
|
||||
#include <AzCore/Math/Vector3.h>
|
||||
@@ -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<OrbitCameraControls>;
|
||||
|
||||
class LegacyViewportCameraControllerInstance;
|
||||
using LegacyViewportCameraController = AzFramework::MultiViewportController<LegacyViewportCameraControllerInstance>;
|
||||
|
||||
class LegacyViewportCameraControllerInstance final
|
||||
: public AzFramework::MultiViewportControllerInstanceInterface<LegacyViewportCameraController>
|
||||
, 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;
|
||||
|
||||
Reference in New Issue
Block a user