Change rotation camera to use RMB, and add orbit rotation camera using LMB + alt (#7610)

* Change rotation camera to use RMB, and add orbit rotation camera using LMB + Alt

Signed-off-by: rhhong <rhhong@amazon.com>

* add lookScrollCamera

Signed-off-by: rhhong <rhhong@amazon.com>
monroegm-disable-blank-issue-2
Roman 4 years ago committed by GitHub
parent ba48ef3949
commit f72c7da4a3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -22,8 +22,10 @@ namespace EMStudio::ViewportUtil
constexpr AZStd::string_view CameraTranslateUpIdSetting = "/Amazon/Preferences/Editor/Camera/CameraTranslateUpId";
constexpr AZStd::string_view CameraTranslateDownIdSetting = "/Amazon/Preferences/Editor/Camera/CameraTranslateUpDownId";
constexpr AZStd::string_view CameraTranslateBoostIdSetting = "/Amazon/Preferences/Editor/Camera/TranslateBoostId";
constexpr AZStd::string_view CameraOrbitIdSetting = "/Amazon/Preferences/Editor/Camera/OrbitId";
constexpr AZStd::string_view CameraDefaultOrbitDistanceSetting = "/Amazon/Preferences/Editor/Camera/DefaultOrbitDistance";
AzFramework::TranslateCameraInputChannelIds BuildTranslateCameraInputChannelIds()
AzFramework::TranslateCameraInputChannelIds TranslateCameraInputChannelIds()
{
AzFramework::TranslateCameraInputChannelIds translateCameraInputChannelIds;
translateCameraInputChannelIds.m_leftChannelId =
@ -64,7 +66,23 @@ namespace EMStudio::ViewportUtil
return GetRegistry(CameraTranslateSmoothingSetting, true);
}
AzFramework::InputChannelId BuildRotateCameraInputId()
float CameraDefaultOrbitDistance()
{
return aznumeric_cast<float>(GetRegistry(CameraDefaultOrbitDistanceSetting, 5.0));
}
AzFramework::InputChannelId RotateCameraInputChannelId()
{
return AzFramework::InputChannelId(GetRegistry(CameraOrbitLookIdSetting, AZStd::string("mouse_button_right")).c_str());
}
AzFramework::InputChannelId OrbitCameraInputChannelId()
{
return AzFramework::InputChannelId(
GetRegistry(CameraOrbitIdSetting, AZStd::string("keyboard_key_modifier_alt_l")).c_str());
}
AzFramework::InputChannelId OrbitLookCameraInputChannelId()
{
return AzFramework::InputChannelId(GetRegistry(CameraOrbitLookIdSetting, AZStd::string("mouse_button_left")).c_str());
}

@ -31,7 +31,10 @@ namespace EMStudio::ViewportUtil
float CameraTranslateSmoothness();
bool CameraRotateSmoothingEnabled();
bool CameraTranslateSmoothingEnabled();
float CameraDefaultOrbitDistance();
AzFramework::TranslateCameraInputChannelIds BuildTranslateCameraInputChannelIds();
AzFramework::InputChannelId BuildRotateCameraInputId();
AzFramework::TranslateCameraInputChannelIds TranslateCameraInputChannelIds();
AzFramework::InputChannelId RotateCameraInputChannelId();
AzFramework::InputChannelId OrbitCameraInputChannelId();
AzFramework::InputChannelId OrbitLookCameraInputChannelId();
}

@ -64,17 +64,31 @@ namespace EMStudio
void AnimViewportWidget::SetupCameras()
{
m_rotateCamera = AZStd::make_shared<AzFramework::RotateCameraInput>(EMStudio::ViewportUtil::BuildRotateCameraInputId());
m_rotateCamera = AZStd::make_shared<AzFramework::RotateCameraInput>(EMStudio::ViewportUtil::RotateCameraInputChannelId());
const auto translateCameraInputChannelIds = EMStudio::ViewportUtil::BuildTranslateCameraInputChannelIds();
const auto translateCameraInputChannelIds = EMStudio::ViewportUtil::TranslateCameraInputChannelIds();
m_translateCamera = AZStd::make_shared<AzFramework::TranslateCameraInput>(
translateCameraInputChannelIds, AzFramework::LookTranslation, AzFramework::TranslatePivotLook);
m_translateCamera.get()->m_translateSpeedFn = []
{
return 3.0f;
};
m_lookScrollCamera = AZStd::make_shared<AzFramework::LookScrollTranslationCameraInput>();
m_orbitCamera = AZStd::make_shared<AzFramework::OrbitCameraInput>(EMStudio::ViewportUtil::OrbitCameraInputChannelId());
m_orbitCamera->SetPivotFn(
[this](const AZ::Vector3& position, const AZ::Vector3& direction)
{
if (m_orbitCamera->Beginning())
{
m_defaultOrbitPoint = position + direction * EMStudio::ViewportUtil::CameraDefaultOrbitDistance();
}
return m_defaultOrbitPoint;
});
m_orbitRotateCamera = AZStd::make_shared<AzFramework::RotateCameraInput>(EMStudio::ViewportUtil::OrbitLookCameraInputChannelId());
m_orbitDollyScrollCamera = AZStd::make_shared<AzFramework::OrbitDollyScrollCameraInput>();
m_orbitCamera->m_orbitCameras.AddCamera(m_orbitRotateCamera);
m_orbitCamera->m_orbitCameras.AddCamera(m_orbitDollyScrollCamera);
}
void AnimViewportWidget::SetupCameraController()
@ -122,7 +136,8 @@ namespace EMStudio
{
cameras.AddCamera(m_rotateCamera);
cameras.AddCamera(m_translateCamera);
cameras.AddCamera(m_orbitDollyScrollCamera);
cameras.AddCamera(m_lookScrollCamera);
cameras.AddCamera(m_orbitCamera);
});
GetControllerList()->Add(controller);
}

@ -54,8 +54,13 @@ namespace EMStudio
AtomRenderPlugin* m_plugin;
AZStd::unique_ptr<AnimViewportRenderer> m_renderer;
AZStd::shared_ptr<AzFramework::RotateCameraInput> m_rotateCamera;
AZStd::shared_ptr<AzFramework::TranslateCameraInput> m_translateCamera;
AZStd::shared_ptr<AzFramework::LookScrollTranslationCameraInput> m_lookScrollCamera;
AZStd::shared_ptr<AzFramework::OrbitDollyScrollCameraInput> m_orbitDollyScrollCamera;
AZStd::shared_ptr<AzFramework::OrbitCameraInput> m_orbitCamera;
AZStd::shared_ptr<AzFramework::RotateCameraInput> m_orbitRotateCamera;
AZ::Vector3 m_defaultOrbitPoint = AZ::Vector3::CreateZero();
};
}

Loading…
Cancel
Save