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>
This commit is contained in:
@@ -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();
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user