123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- /*
- * Copyright (c) Contributors to the Open 3D Engine Project.
- * For complete copyright and license terms please see the LICENSE at the root of this distribution.
- *
- * SPDX-License-Identifier: Apache-2.0 OR MIT
- *
- */
- #pragma once
- #include <AzCore/Component/EntityId.h>
- #include <Editor/Translation/TranslationHelper.h>
- #include <ScriptCanvas/Bus/NodeIdPair.h>
- #include <ScriptCanvas/Core/ScriptCanvasBus.h>
- namespace ScriptCanvasEditor
- {
- namespace Nodes
- {
- namespace Internal
- {
- template<class... ComponentTypes>
- struct PopulateHelper;
- template<class ComponentType, class... ComponentTypes>
- struct PopulateHelper<ComponentType, ComponentTypes...>
- {
- public:
- static void PopulateComponentDescriptors(AZStd::vector< AZ::Uuid >& componentDescriptors)
- {
- componentDescriptors.emplace_back(azrtti_typeid<ComponentType>());
- PopulateHelper<ComponentTypes...>::PopulateComponentDescriptors(componentDescriptors);
- }
- };
- template<>
- struct PopulateHelper<>
- {
- public:
- static void PopulateComponentDescriptors([[maybe_unused]] AZStd::vector< AZ::Uuid >& componentDescriptors)
- {
- }
- };
- }
- enum class NodeType
- {
- WrapperNode,
- GeneralNode
- };
- struct NodeReplacementConfiguration
- {
- NodeReplacementConfiguration()
- : m_nodeType(NodeType::GeneralNode)
- {
- }
- template<class... ComponentTypes>
- void PopulateComponentDescriptors()
- {
- m_customComponents.reserve(sizeof...(ComponentTypes));
- Internal::PopulateHelper<ComponentTypes...>::PopulateComponentDescriptors(m_customComponents);
- }
- NodeType m_nodeType;
- AZStd::string m_nodeSubStyle;
- AZStd::string m_titlePalette;
- AZStd::vector< AZ::Uuid > m_customComponents;
- AZ::EntityId m_scriptCanvasId;
- };
- struct StyleConfiguration
- {
- AZStd::string m_nodeSubStyle;
- AZStd::string m_titlePalette;
- };
- // Copies the slot name to the underlying ScriptCanvas Data Slot which matches the slot Id
- void UpdateSlotDatumLabels(AZ::EntityId graphCanvasNodeId);
- void UpdateSlotDatumLabel(const AZ::EntityId& graphCanvasNodeId, ScriptCanvas::SlotId scSlotId, const AZStd::string& name);
- template <typename NodeType>
- NodeType* GetNode(AZ::EntityId scriptCanvasGraphId, NodeIdPair nodeIdPair)
- {
- ScriptCanvas::Node* node = nullptr;
- AZ::Entity* sourceEntity = nullptr;
- AZ::ComponentApplicationBus::BroadcastResult(sourceEntity, &AZ::ComponentApplicationRequests::FindEntity, nodeIdPair.m_scriptCanvasId);
- if (sourceEntity)
- {
- node = AZ::EntityUtils::FindFirstDerivedComponent<ScriptCanvas::Node>(sourceEntity);
- if (node == nullptr)
- {
- ScriptCanvas::SystemRequestBus::BroadcastResult(node, &ScriptCanvas::SystemRequests::CreateNodeOnEntity, sourceEntity->GetId(), scriptCanvasGraphId, azrtti_typeid<NodeType>());
- }
- }
- return azrtti_cast<NodeType*>(node);
- }
- }
- }
|