Mock.h 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  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 <GraphCanvas/Components/Nodes/NodeBus.h>
  10. #include <GraphCanvas/Components/SceneBus.h>
  11. #include <ScriptCanvas/Core/Node.h>
  12. #include <ScriptCanvas/Bus/EditorScriptCanvasBus.h>
  13. #include <ScriptCanvasDeveloperEditor/MockBus.h>
  14. namespace ScriptCanvas::Developer
  15. {
  16. namespace Nodes
  17. {
  18. enum class SlotConfigState : AZ::u8
  19. {
  20. New,
  21. Unmodified
  22. };
  23. class Mock;
  24. struct SlotConfig
  25. {
  26. AZ_TYPE_INFO(SlotConfig, "{10B5DF2F-1105-4BDD-B8C0-24684AA4ECB3}");
  27. AZ_CLASS_ALLOCATOR(SlotConfig, AZ::SystemAllocator);
  28. static void Reflect(AZ::ReflectContext* context);
  29. AZ::Crc32 OnSlotNameChanged();
  30. AZ::Crc32 OnSlotToolTipChanged();
  31. void OnSlotDataTypeChanged(const Data::Type& dataType);
  32. AZStd::vector<AZStd::pair<Data::Type, AZStd::string>> GetCreatableTypes();
  33. SlotConfig();
  34. ~SlotConfig();
  35. AZStd::string m_name;
  36. AZStd::string m_toolTip;
  37. Data::Type m_type;
  38. SlotId m_slotId;
  39. Mock* m_owner{};
  40. SlotConfigState m_state = SlotConfigState::New;
  41. };
  42. struct MockNodeConfig
  43. : public AZ::ComponentConfig
  44. {
  45. AZ_RTTI(MockNodeConfig, "{6FA19B08-186D-4308-BAE3-530367D902E0}");
  46. AZ_CLASS_ALLOCATOR(MockNodeConfig, AZ::SystemAllocator);
  47. static constexpr AZ::TypeId GetComponentTypeId()
  48. {
  49. return AZ::TypeId("{91B3D89A-4A4B-49FF-AD91-CAAC49E141A8}");
  50. }
  51. AZ::EntityId m_uiEntityId;
  52. };
  53. class Mock
  54. : public Node
  55. , protected ScriptCanvasEditor::EditorNodeNotificationBus::Handler
  56. , protected GraphCanvas::NodeNotificationBus::Handler
  57. , protected GraphCanvas::SceneMemberNotificationBus::Handler
  58. , protected MockDescriptorRequestBus::Handler
  59. {
  60. public:
  61. AZ_COMPONENT(Mock, MockNodeConfig::GetComponentTypeId(), Node);
  62. static void Reflect(AZ::ReflectContext* context);
  63. Mock();
  64. ~Mock();
  65. friend struct SlotConfig;
  66. AZ::Crc32 OnNodeTitleChanged();
  67. AZ::Crc32 OnNodeSubTitleChanged();
  68. AZ::Crc32 OnNodeColorPaletteChanged();
  69. AZ::Crc32 OnDataInSlotArrayChanged();
  70. AZ::Crc32 OnDataOutSlotArrayChanged();
  71. AZ::Crc32 OnExecutionInSlotArrayChanged();
  72. AZ::Crc32 OnExecutionOutSlotArrayChanged();
  73. //// GraphCanvas::NodeNotificationBus
  74. void OnSlotAddedToNode(const AZ::EntityId& slotId) override;
  75. void OnSlotRemovedFromNode(const AZ::EntityId& slotId) override;
  76. void OnAddedToScene(const AZ::EntityId& sceneId) override;
  77. ////
  78. // SceneMemberNotifications
  79. void OnSceneMemberDeserialized(const GraphCanvas::GraphId& grpahId, const GraphCanvas::GraphSerialization& serialization) override;
  80. ////
  81. // MockDescriptorRequestBus
  82. AZ::EntityId GetGraphCanvasNodeId() const override { return m_graphCanvasNodeId; }
  83. ////
  84. protected:
  85. void OnInit() override;
  86. void SetUiEntityId(AZ::EntityId uiEntityId);
  87. void Clear();
  88. AZStd::vector<AZStd::string> GetColorPaletteList() const;
  89. virtual void OnClear();
  90. virtual void OnNodeDisplayed(const GraphCanvas::NodeId& graphCanvasEntityId);
  91. private:
  92. //// ScriptCanvasEditor::EditorGraphNotificationBus
  93. void OnGraphCanvasNodeDisplayed(AZ::EntityId graphCanvasEntityId) override;
  94. ////
  95. AZStd::string m_nodeTitle;
  96. AZStd::string m_nodeSubTitle;
  97. AZStd::string m_nodeColorPaletteOverride;
  98. AZStd::list<SlotConfig> m_dataInConfigArray;
  99. AZStd::list<SlotConfig> m_dataOutConfigArray;
  100. AZStd::list<SlotConfig> m_executionInConfigArray;
  101. AZStd::list<SlotConfig> m_executionOutConfigArray;
  102. AZ::EntityId m_graphCanvasNodeId;
  103. AZStd::vector<AZ::EntityId> m_graphCanvasSlotIds;
  104. ///< Contains slotIds from deleted SlotConfigs that needs the slots removed from the Mock
  105. AZStd::vector<SlotId> m_pendingConfigRemovals;
  106. };
  107. }
  108. }