NodeComponent.h 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  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. #include <AzCore/Component/Component.h>
  10. #include <AzCore/Component/EntityBus.h>
  11. #include <AzCore/std/string/string_view.h>
  12. #include <GraphCanvas/Components/GeometryBus.h>
  13. #include <GraphCanvas/Components/GraphCanvasPropertyBus.h>
  14. #include <GraphCanvas/Components/Nodes/Group/NodeGroupBus.h>
  15. #include <GraphCanvas/Components/Nodes/NodeBus.h>
  16. #include <GraphCanvas/Components/Nodes/NodeConfiguration.h>
  17. #include <GraphCanvas/Components/SceneBus.h>
  18. #include <GraphCanvas/Components/StyleBus.h>
  19. #include <GraphCanvas/Components/VisualBus.h>
  20. #include <GraphCanvas/Types/ComponentSaveDataInterface.h>
  21. namespace GraphCanvas
  22. {
  23. class NodeComponent
  24. : public GraphCanvasPropertyComponent
  25. , public NodeRequestBus::Handler
  26. , public SceneMemberRequestBus::Handler
  27. , public SceneMemberNotificationBus::Handler
  28. , public SceneNotificationBus::Handler
  29. , public AZ::EntityBus::Handler
  30. , public SlotNotificationBus::MultiHandler
  31. , public ComponentSaveDataInterface<NodeSaveData>
  32. , public ConnectionNotificationBus::Handler
  33. , public GroupableSceneMemberRequestBus::Handler
  34. {
  35. friend class NodeSerializer;
  36. public:
  37. AZ_COMPONENT(NodeComponent, "{7385AAC3-18F0-4BCE-BD9B-C17798C899EC}", GraphCanvasPropertyComponent);
  38. static void Reflect(AZ::ReflectContext*);
  39. static AZ::Entity* CreateCoreNodeEntity(const NodeConfiguration& config = NodeConfiguration());
  40. NodeComponent();
  41. NodeComponent(const NodeConfiguration& config);
  42. ~NodeComponent() override;
  43. // AZ::Component
  44. static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided)
  45. {
  46. provided.push_back(AZ_CRC("GraphCanvas_NodeService", 0xcc0f32cc));
  47. provided.push_back(AZ_CRC("GraphCanvas_SceneMemberService", 0xe9759a2d));
  48. }
  49. static void GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible)
  50. {
  51. incompatible.push_back(AZ_CRC("GraphCanvas_NodeService", 0xcc0f32cc));
  52. }
  53. static void GetDependentServices(AZ::ComponentDescriptor::DependencyArrayType& dependent)
  54. {
  55. (void)dependent;
  56. }
  57. static void GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& required)
  58. {
  59. required.push_back(AZ_CRC("GraphCanvas_GeometryService", 0x80981600));
  60. required.push_back(StyledGraphicItemServiceCrc);
  61. }
  62. void Init() override;
  63. void Activate() override;
  64. void Deactivate() override;
  65. ////
  66. // SlotNotificationBus
  67. void OnConnectedTo(const AZ::EntityId& connectionId, const Endpoint& endpoint) override;
  68. void OnDisconnectedFrom(const AZ::EntityId& connectionId, const Endpoint& endpoint) override;
  69. ////
  70. // AZ::EntityBus
  71. void OnEntityExists(const AZ::EntityId&) override;
  72. void OnEntityActivated(const AZ::EntityId&) override;
  73. ////
  74. // SceneMemberRequestBus
  75. void SetScene(const AZ::EntityId& sceneId) override;
  76. void ClearScene(const AZ::EntityId& oldSceneId) override;
  77. void SignalMemberSetupComplete() override;
  78. AZ::EntityId GetScene() const override;
  79. ////
  80. // SceneMemberNotificationsBus
  81. void OnSceneReady() override;
  82. ////
  83. // SceneNotificationsBus
  84. void OnStylesChanged() override;
  85. void OnGraphLoadComplete() override;
  86. void OnPasteEnd() override;
  87. ////
  88. // NodeRequestBus
  89. void SetTooltip(const AZStd::string& tooltip) override;
  90. const AZStd::string GetTooltip() const override { return m_configuration.GetTooltip(); }
  91. void SetShowInOutliner(bool showInOutliner) override { m_configuration.SetShowInOutliner(showInOutliner); }
  92. bool ShowInOutliner() const override { return m_configuration.GetShowInOutliner(); }
  93. void AddSlot(const AZ::EntityId& slotId) override;
  94. void RemoveSlot(const AZ::EntityId& slotId) override;
  95. AZStd::vector<AZ::EntityId> GetSlotIds() const override;
  96. AZStd::vector<SlotId> GetVisibleSlotIds() const override;
  97. AZStd::vector<SlotId> FindVisibleSlotIdsByType(const ConnectionType& connectionType, const SlotType& slotType) const override;
  98. bool HasConnections() const override;
  99. AZStd::any* GetUserData() override;
  100. bool IsWrapped() const override;
  101. void SetWrappingNode(const AZ::EntityId& wrappingNode) override;
  102. AZ::EntityId GetWrappingNode() const override;
  103. void SignalBatchedConnectionManipulationBegin() override;
  104. void SignalBatchedConnectionManipulationEnd() override;
  105. void SignalConnectionMoveBegin(const ConnectionId& connectionId) override;
  106. RootGraphicsItemEnabledState UpdateEnabledState() override;
  107. bool HasHideableSlots() const override;
  108. bool IsHidingUnusedSlots() const override;
  109. void ShowAllSlots() override;
  110. void HideUnusedSlots() override;
  111. void SignalNodeAboutToBeDeleted() override;
  112. ////
  113. // ConnectionNotificationBus
  114. void OnMoveFinalized(bool isValidConnection) override;
  115. ////
  116. // GroupableSceneMemberRequests
  117. bool IsGrouped() const override;
  118. const AZ::EntityId& GetGroupId() const override;
  119. void RegisterToGroup(const AZ::EntityId& groupId) override;
  120. void UnregisterFromGroup(const AZ::EntityId& groupId) override;
  121. void RemoveFromGroup() override;
  122. ////
  123. protected:
  124. void HideUnusedSlotsImpl();
  125. void UpdateDisabledStateVisuals();
  126. //! The ID of the scene this node belongs to.
  127. AZ::EntityId m_sceneId;
  128. //! This node's slots
  129. AZStd::vector<AZ::Entity*> m_slots;
  130. //! Serialized configuration settings
  131. NodeConfiguration m_configuration;
  132. AZ::EntityId m_wrappingNode;
  133. AZ::EntityId m_owningGroupId;
  134. //! Stores custom user data for this node
  135. AZStd::any m_userData;
  136. bool m_updateSlotState = false;
  137. };
  138. }