CreateNodeMimeEvent.cpp 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  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 <AzCore/Serialization/SerializeContext.h>
  9. #include <GraphCanvas/Components/GridBus.h>
  10. #include <GraphCanvas/Components/SceneBus.h>
  11. #include <GraphCanvas/Components/VisualBus.h>
  12. #include "CreateNodeMimeEvent.h"
  13. #include "ScriptCanvas/Bus/RequestBus.h"
  14. namespace ScriptCanvasEditor
  15. {
  16. ////////////////////////
  17. // CreateNodeMimeEvent
  18. ////////////////////////
  19. void CreateNodeMimeEvent::Reflect(AZ::ReflectContext* reflectContext)
  20. {
  21. AZ::SerializeContext* serializeContext = azrtti_cast<AZ::SerializeContext*>(reflectContext);
  22. if (serializeContext)
  23. {
  24. serializeContext->Class<CreateNodeMimeEvent, GraphCanvas::CreateSplicingNodeMimeEvent>()
  25. ->Version(0)
  26. ;
  27. }
  28. }
  29. const ScriptCanvasEditor::NodeIdPair& CreateNodeMimeEvent::GetCreatedPair() const
  30. {
  31. return m_nodeIdPair;
  32. }
  33. bool CreateNodeMimeEvent::ExecuteEvent(const AZ::Vector2&, AZ::Vector2& sceneDropPosition, const AZ::EntityId& graphCanvasGraphId)
  34. {
  35. ScriptCanvas::ScriptCanvasId scriptCanvasId;
  36. GeneralRequestBus::BroadcastResult(scriptCanvasId, &GeneralRequests::GetScriptCanvasId, graphCanvasGraphId);
  37. if (!scriptCanvasId.IsValid() || !graphCanvasGraphId.IsValid())
  38. {
  39. return false;
  40. }
  41. m_nodeIdPair = CreateNode(scriptCanvasId);
  42. if (m_nodeIdPair.m_graphCanvasId.IsValid() && m_nodeIdPair.m_scriptCanvasId.IsValid())
  43. {
  44. m_createdNodeId = m_nodeIdPair.m_graphCanvasId;
  45. GraphCanvas::SceneRequestBus::Event(graphCanvasGraphId, &GraphCanvas::SceneRequests::AddNode, m_nodeIdPair.m_graphCanvasId, sceneDropPosition, false);
  46. GraphCanvas::SceneMemberUIRequestBus::Event(m_nodeIdPair.m_graphCanvasId, &GraphCanvas::SceneMemberUIRequests::SetSelected, true);
  47. ScriptCanvasEditor::NodeCreationNotificationBus::Event(scriptCanvasId, &ScriptCanvasEditor::NodeCreationNotifications::OnGraphCanvasNodeCreated, m_nodeIdPair.m_graphCanvasId);
  48. AZ::EntityId gridId;
  49. GraphCanvas::SceneRequestBus::EventResult(gridId, graphCanvasGraphId, &GraphCanvas::SceneRequests::GetGrid);
  50. AZ_Assert(gridId.IsValid(), "Grid must be valid, graphCanvasGraphId is likely incorrect");
  51. AZ::Vector2 offset;
  52. GraphCanvas::GridRequestBus::EventResult(offset, gridId, &GraphCanvas::GridRequests::GetMinorPitch);
  53. sceneDropPosition += offset;
  54. return true;
  55. }
  56. else
  57. {
  58. if (m_nodeIdPair.m_graphCanvasId.IsValid())
  59. {
  60. AZ::ComponentApplicationBus::Broadcast(&AZ::ComponentApplicationBus::Events::DeleteEntity, m_nodeIdPair.m_graphCanvasId);
  61. }
  62. if (m_nodeIdPair.m_scriptCanvasId.IsValid())
  63. {
  64. AZ::ComponentApplicationBus::Broadcast(&AZ::ComponentApplicationBus::Events::DeleteEntity, m_nodeIdPair.m_scriptCanvasId);
  65. }
  66. }
  67. return false;
  68. }
  69. AZ::EntityId CreateNodeMimeEvent::CreateSplicingNode(const AZ::EntityId& graphCanvasGraphId)
  70. {
  71. ScriptCanvas::ScriptCanvasId scriptCanvasId;
  72. GeneralRequestBus::BroadcastResult(scriptCanvasId, &GeneralRequests::GetScriptCanvasId, graphCanvasGraphId);
  73. ScriptCanvasEditor::NodeIdPair idPair = CreateNode(scriptCanvasId);
  74. if (idPair.m_graphCanvasId.IsValid() && idPair.m_scriptCanvasId.IsValid())
  75. {
  76. return idPair.m_graphCanvasId;
  77. }
  78. return AZ::EntityId();
  79. }
  80. ///////////////////////////////////
  81. // SpecializedCreateNodeMimeEvent
  82. ///////////////////////////////////
  83. void SpecializedCreateNodeMimeEvent::Reflect(AZ::ReflectContext* reflectContext)
  84. {
  85. AZ::SerializeContext* serializeContext = azrtti_cast<AZ::SerializeContext*>(reflectContext);
  86. if (serializeContext)
  87. {
  88. serializeContext->Class<SpecializedCreateNodeMimeEvent, GraphCanvas::GraphCanvasMimeEvent>()
  89. ->Version(0)
  90. ;
  91. }
  92. }
  93. /////////////////////////////
  94. // MultiCreateNodeMimeEvent
  95. /////////////////////////////
  96. void MultiCreateNodeMimeEvent::Reflect(AZ::ReflectContext* reflectContext)
  97. {
  98. AZ::SerializeContext* serializeContext = azrtti_cast<AZ::SerializeContext*>(reflectContext);
  99. if (serializeContext)
  100. {
  101. serializeContext->Class<MultiCreateNodeMimeEvent, SpecializedCreateNodeMimeEvent>()
  102. ->Version(0)
  103. ;
  104. }
  105. }
  106. }