SlotComponent.h 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  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/Entity.h>
  10. #include <AzCore/std/string/string.h>
  11. #include <GraphCanvas/Components/SceneBus.h>
  12. #include <GraphCanvas/Components/Slots/SlotBus.h>
  13. #include <GraphCanvas/Utils/StateControllers/StateController.h>
  14. namespace AZ
  15. {
  16. class ReflectContext;
  17. }
  18. namespace GraphCanvas
  19. {
  20. class Connection;
  21. class SlotComponent
  22. : public AZ::Component
  23. , public SlotRequestBus::Handler
  24. , public SceneMemberRequestBus::Handler
  25. , public SceneMemberNotificationBus::Handler
  26. {
  27. public:
  28. AZ_COMPONENT(SlotComponent, "{EACFC8FB-C75B-4ABA-988D-89C964B9A4E4}");
  29. static void Reflect(AZ::ReflectContext* context);
  30. static AZ::Entity* CreateCoreSlotEntity();
  31. SlotComponent();
  32. explicit SlotComponent(const SlotType& slotType);
  33. SlotComponent(const SlotType& slotType, const SlotConfiguration& slotConfiguration);
  34. ~SlotComponent() override = default;
  35. // AZ::Component
  36. static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided)
  37. {
  38. provided.push_back(kSlotServiceProviderId);
  39. provided.push_back(AZ_CRC_CE("GraphCanvas_SceneMemberService"));
  40. }
  41. static void GetDependentServices(AZ::ComponentDescriptor::DependencyArrayType& /*dependent*/)
  42. {
  43. }
  44. static void GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& /*required*/)
  45. {
  46. }
  47. void Activate() override;
  48. void Deactivate() override;
  49. ////
  50. // SceneMemberRequestBus
  51. void SetScene(const AZ::EntityId& sceneId) override;
  52. void ClearScene(const AZ::EntityId& oldSceneId) override;
  53. void SignalMemberSetupComplete() override;
  54. AZ::EntityId GetScene() const override;
  55. ////
  56. // SceneMemberNotificationBus
  57. void OnSceneSet(const AZ::EntityId&) override;
  58. void OnSceneReady() override;
  59. ////
  60. // SlotRequestBus
  61. const AZ::EntityId& GetNode() const override;
  62. void SetNode(const AZ::EntityId&) override;
  63. Endpoint GetEndpoint() const override;
  64. const AZStd::string GetName() const override { return m_slotConfiguration.m_name; }
  65. void SetName(const AZStd::string& name) override;
  66. void SetDetails(const AZStd::string& name, const AZStd::string& tooltip) override;
  67. const AZStd::string GetTooltip() const override { return m_slotConfiguration.m_tooltip; }
  68. void SetTooltip(const AZStd::string& tooltip) override;
  69. void DisplayProposedConnection(const AZ::EntityId& connectionId, const Endpoint& endpoint) override;
  70. void RemoveProposedConnection(const AZ::EntityId& connectionId, const Endpoint& endpoint) override;
  71. void AddConnectionId(const AZ::EntityId& connectionId, const Endpoint& endpoint) override;
  72. void RemoveConnectionId(const AZ::EntityId& connectionId, const Endpoint& endpoint) override;
  73. ConnectionType GetConnectionType() const override { return m_slotConfiguration.m_connectionType; }
  74. SlotGroup GetSlotGroup() const override { return m_slotConfiguration.m_slotGroup; }
  75. SlotType GetSlotType() const override { return m_slotType; }
  76. void SetDisplayOrdering(int ordering) override;
  77. int GetDisplayOrdering() const override;
  78. bool IsConnectedTo(const Endpoint& endpoint) const override;
  79. void FindConnectionsForEndpoints(const AZStd::unordered_set<GraphCanvas::Endpoint>& searchEndpoints, AZStd::unordered_set<ConnectionId>& connections) override;
  80. bool CanDisplayConnectionTo(const Endpoint& endpoint) const override;
  81. bool CanCreateConnectionTo(const Endpoint& endpoint) const override;
  82. AZ::EntityId CreateConnectionWithEndpoint(const Endpoint& endpoint) override;
  83. AZ::EntityId DisplayConnection() override;
  84. AZ::EntityId DisplayConnectionWithEndpoint(const Endpoint& endpoint) override;
  85. AZStd::any* GetUserData() override;
  86. bool HasConnections() const override;
  87. bool IsNameHidden() const;
  88. AZ::EntityId GetLastConnection() const override;
  89. AZStd::vector<AZ::EntityId> GetConnections() const override;
  90. void SetConnectionDisplayState(RootGraphicsItemDisplayState displayState) override;
  91. void ReleaseConnectionDisplayState() override;
  92. void ClearConnections() override;
  93. const SlotConfiguration& GetSlotConfiguration() const override;
  94. SlotConfiguration* CloneSlotConfiguration() const override;
  95. void RemapSlotForModel(const Endpoint& endpoint) override;
  96. bool HasModelRemapping() const override;
  97. AZStd::vector< Endpoint > GetRemappedModelEndpoints() const override;
  98. int GetLayoutPriority() const override;
  99. void SetLayoutPriority(int priority) override;
  100. void Show() { m_visible = true; }
  101. void Hide() { m_visible = false; }
  102. ////
  103. bool IsVisible() const { return m_visible; }
  104. protected:
  105. void PopulateSlotConfiguration(SlotConfiguration& slotConfiguration) const;
  106. AZ::EntityId CreateConnectionHelper(const Endpoint& otherEndpoint, bool createConnection);
  107. SlotComponent(const SlotComponent&) = delete;
  108. const SlotComponent& operator=(const SlotComponent&) = delete;
  109. virtual AZ::Entity* ConstructConnectionEntity(const Endpoint& sourceEndpoint, const Endpoint& targetEndpoint, bool createModelConnection);
  110. void FinalizeDisplay();
  111. virtual void OnFinalizeDisplay();
  112. AZStd::vector< Endpoint > m_modelRedirections;
  113. //! The Node this Slot belongs to.
  114. AZ::EntityId m_nodeId;
  115. SlotType m_slotType;
  116. SlotConfiguration m_slotConfiguration;
  117. // The actual display ordering this slot is in
  118. int m_displayOrdering;
  119. // The priority with which to layout this slot
  120. int m_layoutPriority;
  121. //! Keeps track of connections to this slot
  122. AZStd::vector<AZ::EntityId> m_connections;
  123. StateSetter<RootGraphicsItemDisplayState> m_connectionDisplayStateStateSetter;
  124. //! Stores custom user data for this slot
  125. AZStd::any m_userData;
  126. bool m_visible;
  127. };
  128. }