6ffc2620e4
* initial wip change to help resolve EMFX camera viewport issue Signed-off-by: Tom Hulton-Harrop <82228511+hultonha@users.noreply.github.com> * some updates to add/remove camera input API Signed-off-by: Tom Hulton-Harrop <82228511+hultonha@users.noreply.github.com> * add additional comments and remove some optimize off calls Signed-off-by: Tom Hulton-Harrop <82228511+hultonha@users.noreply.github.com> * improvements to camera behavior in EMFX editor Signed-off-by: Tom Hulton-Harrop <82228511+hultonha@users.noreply.github.com> * add some tests for add/remove logic for cameras Signed-off-by: Tom Hulton-Harrop <82228511+hultonha@users.noreply.github.com>
77 lines
3.0 KiB
C++
77 lines
3.0 KiB
C++
/*
|
|
* Copyright (c) Contributors to the Open 3D Engine Project.
|
|
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0 OR MIT
|
|
*
|
|
*/
|
|
#pragma once
|
|
|
|
#include <QSettings>
|
|
#include <AtomToolsFramework/Viewport/RenderViewportWidget.h>
|
|
#include <AzFramework/Viewport/CameraInput.h>
|
|
|
|
#include <EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/ViewportPluginBus.h>
|
|
#include <EMStudio/AnimViewportRequestBus.h>
|
|
#include <Integration/Rendering/RenderFlag.h>
|
|
|
|
namespace EMStudio
|
|
{
|
|
class AtomRenderPlugin;
|
|
class AnimViewportRenderer;
|
|
|
|
class AnimViewportWidget
|
|
: public AtomToolsFramework::RenderViewportWidget
|
|
, private AnimViewportRequestBus::Handler
|
|
, private ViewportPluginRequestBus::Handler
|
|
{
|
|
public:
|
|
AnimViewportWidget(AtomRenderPlugin* parentPlugin);
|
|
~AnimViewportWidget() override;
|
|
AnimViewportRenderer* GetAnimViewportRenderer() { return m_renderer.get(); }
|
|
|
|
void Reinit(bool resetCamera = true);
|
|
|
|
private:
|
|
void OnTick(float deltaTime, AZ::ScriptTimePoint time) override;
|
|
|
|
void CalculateCameraProjection();
|
|
void RenderCustomPluginData();
|
|
void FollowCharacter();
|
|
|
|
void SetupCameras();
|
|
void SetupCameraController();
|
|
|
|
// AnimViewportRequestBus::Handler overrides
|
|
void UpdateCameraViewMode(RenderOptions::CameraViewMode mode);
|
|
void UpdateCameraFollowUp(bool follow);
|
|
void UpdateRenderFlags(EMotionFX::ActorRenderFlags renderFlags);
|
|
|
|
// ViewportPluginRequestBus::Handler overrides
|
|
AZ::s32 GetViewportId() const;
|
|
|
|
static constexpr float CameraDistance = 2.0f;
|
|
|
|
AtomRenderPlugin* m_plugin;
|
|
AZStd::unique_ptr<AnimViewportRenderer> m_renderer;
|
|
|
|
AZStd::shared_ptr<AzFramework::RotateCameraInput> m_lookRotateCamera;
|
|
AZStd::shared_ptr<AzFramework::TranslateCameraInput> m_lookTranslateCamera;
|
|
AZStd::shared_ptr<AzFramework::LookScrollTranslationCameraInput> m_lookScrollTranslationCamera;
|
|
AZStd::shared_ptr<AzFramework::PanCameraInput> m_lookPanCamera;
|
|
|
|
AZStd::shared_ptr<AzFramework::OrbitCameraInput> m_orbitCamera;
|
|
AZStd::shared_ptr<AzFramework::OrbitScrollDollyCameraInput> m_orbitScrollDollyCamera;
|
|
AZStd::shared_ptr<AzFramework::RotateCameraInput> m_orbitRotateCamera;
|
|
AZStd::shared_ptr<AzFramework::TranslateCameraInput> m_orbitTranslateCamera;
|
|
AZStd::shared_ptr<AzFramework::OrbitMotionDollyCameraInput> m_orbitMotionDollyCamera;
|
|
AZStd::shared_ptr<AzFramework::PanCameraInput> m_orbitPanCamera;
|
|
|
|
AZStd::shared_ptr<AzFramework::RotateCameraInput> m_followRotateCamera;
|
|
AZStd::shared_ptr<AzFramework::OrbitScrollDollyCameraInput> m_followScrollDollyCamera;
|
|
AZStd::shared_ptr<AzFramework::OrbitMotionDollyCameraInput> m_followScrollMotionCamera;
|
|
|
|
AZ::Vector3 m_defaultOrbitPoint = AZ::Vector3::CreateZero();
|
|
};
|
|
}
|