EditorModeFeedbackSystemComponent.cpp 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  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. #include <EditorModeFeedbackSystemComponent.h>
  9. #include <EditorModeFeedbackFeatureProcessor.h>
  10. #include <Atom/RPI.Public/FeatureProcessorFactory.h>
  11. #include <Atom/RPI.Public/Scene.h>
  12. #include <AzCore/Component/ComponentBus.h>
  13. #include <AzCore/Serialization/SerializeContext.h>
  14. #include <AzCore/Serialization/EditContext.h>
  15. #include <AzFramework/API/ApplicationAPI.h>
  16. #include <AzFramework/Scene/SceneSystemInterface.h>
  17. namespace AZ
  18. {
  19. namespace Render
  20. {
  21. void EditorModeFeedbackSystemComponent::Reflect(AZ::ReflectContext* context)
  22. {
  23. if (auto* serialize = azrtti_cast<AZ::SerializeContext*>(context))
  24. {
  25. serialize->Class<EditorModeFeedbackSystemComponent, AzToolsFramework::Components::EditorComponentBase>()
  26. ->Version(0)
  27. ;
  28. if (auto* editContext = serialize->GetEditContext())
  29. {
  30. editContext->Class<EditorModeFeedbackSystemComponent>(
  31. "Editor Mode Feedback System", "Manages discovery of Editor Mode Feedback effects")
  32. ->ClassElement(AZ::Edit::ClassElements::EditorData, "")
  33. ->Attribute(AZ::Edit::Attributes::AutoExpand, true)
  34. ;
  35. }
  36. }
  37. EditorModeFeatureProcessor::Reflect(context);
  38. }
  39. void EditorModeFeedbackSystemComponent::Activate()
  40. {
  41. AzFramework::ApplicationRequests::Bus::Broadcast(
  42. [this](AzFramework::ApplicationRequests::Bus::Events* ebus)
  43. {
  44. m_registeryEnabled = ebus->IsEditorModeFeedbackEnabled();
  45. });
  46. if (!m_registeryEnabled)
  47. {
  48. return;
  49. }
  50. AzToolsFramework::Components::EditorComponentBase::Activate();
  51. AZ::Interface<EditorModeFeedbackInterface>::Register(this);
  52. AZ::RPI::FeatureProcessorFactory::Get()->RegisterFeatureProcessor<EditorModeFeatureProcessor>();
  53. AzToolsFramework::EditorEntityContextNotificationBus::Handler::BusConnect();
  54. }
  55. void EditorModeFeedbackSystemComponent::Deactivate()
  56. {
  57. if (!m_registeryEnabled)
  58. {
  59. return;
  60. }
  61. AzToolsFramework::EditorEntityContextNotificationBus::Handler::BusDisconnect();
  62. AzToolsFramework::Components::EditorComponentBase::Deactivate();
  63. AZ::RPI::FeatureProcessorFactory::Get()->UnregisterFeatureProcessor<EditorModeFeatureProcessor>();
  64. AZ::Interface<EditorModeFeedbackInterface>::Unregister(this);
  65. }
  66. bool EditorModeFeedbackSystemComponent::IsEnabled() const
  67. {
  68. return m_registeryEnabled;
  69. }
  70. void EditorModeFeedbackSystemComponent::OnStartPlayInEditorBegin()
  71. {
  72. SetEnableRender(false);
  73. }
  74. void EditorModeFeedbackSystemComponent::OnStopPlayInEditor()
  75. {
  76. SetEnableRender(true);
  77. }
  78. void EditorModeFeedbackSystemComponent::SetEnableRender(bool enableRender)
  79. {
  80. auto sceneSystem = AzFramework::SceneSystemInterface::Get();
  81. if (!sceneSystem)
  82. {
  83. return;
  84. }
  85. AZStd::shared_ptr<AzFramework::Scene> mainScene = sceneSystem->GetScene(AzFramework::Scene::MainSceneName);
  86. if (!mainScene)
  87. {
  88. return;
  89. }
  90. AZ::RPI::ScenePtr* rpiScene = mainScene->FindSubsystem<AZ::RPI::ScenePtr>();
  91. if (!rpiScene)
  92. {
  93. return;
  94. }
  95. if (AZ::Render::EditorModeFeatureProcessor* fp = (*rpiScene)->GetFeatureProcessor<AZ::Render::EditorModeFeatureProcessor>())
  96. {
  97. fp->SetEnableRender(enableRender);
  98. }
  99. }
  100. } // namespace Render
  101. } // namespace AZ