3
0

AtomRenderPlugin.h 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #pragma once
  9. #if !defined(Q_MOC_RUN)
  10. #include <AzToolsFramework/Manipulators/TranslationManipulators.h>
  11. #include <AzToolsFramework/Manipulators/RotationManipulators.h>
  12. #include <AzToolsFramework/Manipulators/ScaleManipulators.h>
  13. #include <AzToolsFramework/Viewport/ViewportMessages.h>
  14. #include <AzCore/Debug/Timer.h>
  15. #include <MCore/Source/Command.h>
  16. #include <EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/DockWidgetPlugin.h>
  17. #include <EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderOptions.h>
  18. #include <EMStudio/AnimViewportWidget.h>
  19. #include <Editor/Picking.h>
  20. #include <QWidget>
  21. #include <QTimer>
  22. #endif
  23. namespace AZ
  24. {
  25. class Entity;
  26. }
  27. namespace EMStudio
  28. {
  29. class AtomRenderPlugin
  30. : public DockWidgetPlugin
  31. , private AzToolsFramework::ViewportInteraction::ViewportMouseRequestBus::Handler
  32. {
  33. public:
  34. AZ_CLASS_ALLOCATOR_DECL
  35. enum
  36. {
  37. CLASS_ID = 0x32b0c04d
  38. };
  39. AtomRenderPlugin();
  40. ~AtomRenderPlugin();
  41. // Plugin information
  42. const char* GetName() const override;
  43. uint32 GetClassID() const override;
  44. bool GetIsClosable() const override;
  45. bool GetIsFloatable() const override;
  46. bool GetIsVertical() const override;
  47. bool Init() override;
  48. EMStudioPlugin* Clone() const { return aznew AtomRenderPlugin(); }
  49. EMStudioPlugin::EPluginType GetPluginType() const override;
  50. QWidget* GetInnerWidget();
  51. void ReinitRenderer();
  52. void LoadRenderOptions();
  53. void SaveRenderOptions();
  54. RenderOptions* GetRenderOptions();
  55. PluginOptions* GetOptions() override;
  56. void Render(EMotionFX::ActorRenderFlags renderFlags) override;
  57. void SetManipulatorMode(RenderOptions::ManipulatorMode mode);
  58. void UpdatePickingRenderFlags(EMotionFX::ActorRenderFlags renderFlags);
  59. private:
  60. // AzToolsFramework::ViewportInteraction::ViewportMouseRequestBus overrides...
  61. bool HandleMouseInteraction(const AzToolsFramework::ViewportInteraction::MouseInteractionEvent& mouseInteractionEvent) override;
  62. void SetupMetrics();
  63. void UpdateMetrics();
  64. void SetupManipulators();
  65. void OnManipulatorMoved(const AZ::Vector3& position);
  66. QWidget* m_innerWidget = nullptr;
  67. AnimViewportWidget* m_animViewportWidget = nullptr;
  68. RenderOptions m_renderOptions;
  69. // Manipulators
  70. AzToolsFramework::TranslationManipulators m_translationManipulators;
  71. AzToolsFramework::RotationManipulators m_rotateManipulators;
  72. AzToolsFramework::ScaleManipulators m_scaleManipulators;
  73. AZStd::shared_ptr<AzToolsFramework::ManipulatorManager> m_manipulatorManager;
  74. AZ::Transform m_mouseDownStartTransform;
  75. AZStd::unique_ptr<EMotionFX::Picking> m_picking;
  76. // Atom performance metrics
  77. QTimer m_metricsTimer;
  78. AZStd::string m_fpsStr;
  79. MCORE_DEFINECOMMANDCALLBACK(ImportActorCallback);
  80. MCORE_DEFINECOMMANDCALLBACK(RemoveActorCallback);
  81. ImportActorCallback* m_importActorCallback = nullptr;
  82. RemoveActorCallback* m_removeActorCallback = nullptr;
  83. };
  84. extern const AzToolsFramework::ManipulatorManagerId g_animManipulatorManagerId;
  85. }// namespace EMStudio