/* * 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 #include #include #include namespace ScriptCanvasEditor { namespace Nodes { namespace Internal { template struct PopulateHelper; template struct PopulateHelper { public: static void PopulateComponentDescriptors(AZStd::vector< AZ::Uuid >& componentDescriptors) { componentDescriptors.emplace_back(azrtti_typeid()); PopulateHelper::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 void PopulateComponentDescriptors() { m_customComponents.reserve(sizeof...(ComponentTypes)); Internal::PopulateHelper::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 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(sourceEntity); if (node == nullptr) { ScriptCanvas::SystemRequestBus::BroadcastResult(node, &ScriptCanvas::SystemRequests::CreateNodeOnEntity, sourceEntity->GetId(), scriptCanvasGraphId, azrtti_typeid()); } } return azrtti_cast(node); } } }