Update modular viewport camera controller interface (#6282)
* update modular viewport camera controller interface to make follow behaviors easier Signed-off-by: Tom Hulton-Harrop <82228511+hultonha@users.noreply.github.com> * updates following PR feedback Signed-off-by: Tom Hulton-Harrop <82228511+hultonha@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
2ac049eacd
commit
633a9e939a
@@ -170,11 +170,32 @@ namespace EMStudio
|
||||
targetPosition.GetX() - CameraDistance, targetPosition.GetY() + CameraDistance, targetPosition.GetZ() + CameraDistance);
|
||||
break;
|
||||
}
|
||||
|
||||
GetViewportContext()->SetCameraTransform(AZ::Transform::CreateLookAt(cameraPosition, targetPosition));
|
||||
|
||||
AtomToolsFramework::ModularViewportCameraControllerRequestBus::Event(
|
||||
GetViewportId(), &AtomToolsFramework::ModularViewportCameraControllerRequestBus::Events::SetCameraOffset,
|
||||
AZ::Vector3::CreateAxisY(-CameraDistance));
|
||||
}
|
||||
|
||||
void AnimViewportWidget::SetFollowCharacter(bool follow)
|
||||
{
|
||||
if (follow)
|
||||
{
|
||||
AtomToolsFramework::ModularViewportCameraControllerRequestBus::Event(
|
||||
GetViewportId(), &AtomToolsFramework::ModularViewportCameraControllerRequestBus::Events::SetCameraOffset,
|
||||
AZ::Vector3::CreateAxisY(-CameraDistance));
|
||||
}
|
||||
else
|
||||
{
|
||||
AtomToolsFramework::ModularViewportCameraControllerRequestBus::Event(
|
||||
GetViewportId(), &AtomToolsFramework::ModularViewportCameraControllerRequestBus::Events::SetCameraOffset,
|
||||
AZ::Vector3::CreateZero());
|
||||
AtomToolsFramework::ModularViewportCameraControllerRequestBus::Event(
|
||||
GetViewportId(), &AtomToolsFramework::ModularViewportCameraControllerRequestBus::Events::SetCameraPivotAttached,
|
||||
GetViewportContext()->GetCameraTransform().GetTranslation());
|
||||
}
|
||||
|
||||
m_followCharacter = follow;
|
||||
}
|
||||
|
||||
@@ -190,7 +211,7 @@ namespace EMStudio
|
||||
{
|
||||
auto viewportContext = GetViewportContext();
|
||||
auto windowSize = viewportContext->GetViewportSize();
|
||||
// Prevent devided by zero
|
||||
// Prevent division by zero
|
||||
const float height = AZStd::max<float>(aznumeric_cast<float>(windowSize.m_height), 1.0f);
|
||||
const float aspectRatio = aznumeric_cast<float>(windowSize.m_width) / height;
|
||||
|
||||
@@ -216,14 +237,10 @@ namespace EMStudio
|
||||
{
|
||||
if (m_followCharacter)
|
||||
{
|
||||
// When follow charater move is enabled, we are adding the delta of the character movement to the camera per frame.
|
||||
AZ::Vector3 camPos = GetViewportContext()->GetCameraTransform().GetTranslation();
|
||||
camPos += m_renderer->GetCharacterCenter() - m_prevCharacterPos;
|
||||
AZ::Transform newCamTransform = GetViewportContext()->GetCameraTransform();
|
||||
newCamTransform.SetTranslation(camPos);
|
||||
GetViewportContext()->SetCameraTransform(newCamTransform);
|
||||
AtomToolsFramework::ModularViewportCameraControllerRequestBus::Event(
|
||||
GetViewportId(), &AtomToolsFramework::ModularViewportCameraControllerRequestBus::Events::SetCameraPivotAttached,
|
||||
m_renderer->GetCharacterCenter());
|
||||
}
|
||||
m_prevCharacterPos = m_renderer->GetCharacterCenter();
|
||||
}
|
||||
|
||||
void AnimViewportWidget::ToggleRenderFlag(EMotionFX::ActorRenderFlag flag)
|
||||
|
||||
@@ -64,6 +64,5 @@ namespace EMStudio
|
||||
AZStd::shared_ptr<AzFramework::OrbitDollyScrollCameraInput> m_orbitDollyScrollCamera;
|
||||
EMotionFX::ActorRenderFlagBitset m_renderFlags;
|
||||
bool m_followCharacter = false;
|
||||
AZ::Vector3 m_prevCharacterPos;
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user