/* * 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 #include #include #include #include #include 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 m_renderer; AZStd::shared_ptr m_rotateCamera; AZStd::shared_ptr m_translateCamera; AZStd::shared_ptr m_lookScrollCamera; AZStd::shared_ptr m_orbitDollyScrollCamera; AZStd::shared_ptr m_orbitCamera; AZStd::shared_ptr m_orbitRotateCamera; AZ::Vector3 m_defaultOrbitPoint = AZ::Vector3::CreateZero(); }; }