Integrating up through commit 90f050496
This commit is contained in:
@@ -15,6 +15,7 @@
|
||||
#include <Editor/Nodes/NodeCreateUtils.h>
|
||||
#include <Editor/Nodes/NodeDisplayUtils.h>
|
||||
|
||||
#include <GraphCanvas/Components/Nodes/NodeBus.h>
|
||||
#include <GraphCanvas/Components/Nodes/NodeTitleBus.h>
|
||||
|
||||
#include <ScriptCanvas/Bus/EditorScriptCanvasBus.h>
|
||||
@@ -23,7 +24,7 @@
|
||||
#include <ScriptCanvas/Libraries/Core/AzEventHandler.h>
|
||||
#include <ScriptCanvas/Libraries/Core/EBusEventHandler.h>
|
||||
#include <ScriptCanvas/Libraries/Core/FunctionDefinitionNode.h>
|
||||
#include <ScriptCanvas/Libraries/Core/FunctionNode.h>
|
||||
#include <ScriptCanvas/Libraries/Core/FunctionCallNode.h>
|
||||
#include <ScriptCanvas/Libraries/Core/GetVariable.h>
|
||||
#include <ScriptCanvas/Libraries/Core/Method.h>
|
||||
#include <ScriptCanvas/Libraries/Core/MethodOverloaded.h>
|
||||
@@ -34,12 +35,15 @@
|
||||
|
||||
namespace ScriptCanvasEditor::Nodes
|
||||
{
|
||||
NodeIdPair CreateExecutionNodeling(const ScriptCanvas::ScriptCanvasId& scriptCanvasId, AZStd::string_view rootName)
|
||||
NodeIdPair CreateFunctionDefinitionNode(const ScriptCanvas::ScriptCanvasId& scriptCanvasId, bool isInput, AZStd::string rootName)
|
||||
{
|
||||
ScriptCanvasEditor::Nodes::StyleConfiguration styleConfiguration;
|
||||
NodeIdPair createdPair = CreateNode(azrtti_typeid<ScriptCanvas::Nodes::Core::FunctionDefinitionNode>(), scriptCanvasId, styleConfiguration);
|
||||
auto nodeAndPair = CreateAndGetNode(azrtti_typeid<ScriptCanvas::Nodes::Core::FunctionDefinitionNode>(), scriptCanvasId, styleConfiguration);
|
||||
NodeIdPair createdPair = nodeAndPair.second;
|
||||
|
||||
if (createdPair.m_scriptCanvasId.IsValid())
|
||||
auto functionDefinitionNode = azrtti_cast<ScriptCanvas::Nodes::Core::FunctionDefinitionNode*>(nodeAndPair.first);
|
||||
|
||||
if (functionDefinitionNode && createdPair.m_scriptCanvasId.IsValid())
|
||||
{
|
||||
AZStd::unordered_set<AZStd::string> nodelingNames;
|
||||
|
||||
@@ -71,12 +75,43 @@ namespace ScriptCanvasEditor::Nodes
|
||||
nodelingId.m_scriptCanvasId = scriptCanvasId;
|
||||
|
||||
ScriptCanvas::NodelingRequestBus::Event(nodelingId, &ScriptCanvas::NodelingRequests::SetDisplayName, nodelingName);
|
||||
|
||||
if (!isInput)
|
||||
{
|
||||
functionDefinitionNode->MarkExecutionExit();
|
||||
}
|
||||
|
||||
GraphCanvas::NodeTitleRequestBus::Event(createdPair.m_graphCanvasId, &GraphCanvas::NodeTitleRequests::SetSubTitle, "Function");
|
||||
|
||||
|
||||
|
||||
// Because of how the extender slots are registered, there isn't an easy way to only create one or the other based on
|
||||
// the type of nodeling, so instead they both get created and we need to remove the inapplicable one
|
||||
GraphCanvas::ConnectionType typeToRemove = (isInput) ? GraphCanvas::CT_Input : GraphCanvas::CT_Output;
|
||||
|
||||
AZStd::vector<GraphCanvas::SlotId> extenderSlotIds, executionSlotIds;
|
||||
GraphCanvas::NodeRequestBus::EventResult(extenderSlotIds, createdPair.m_graphCanvasId, &GraphCanvas::NodeRequests::FindVisibleSlotIdsByType, typeToRemove, GraphCanvas::SlotTypes::ExtenderSlot);
|
||||
if (!extenderSlotIds.empty())
|
||||
{
|
||||
GraphCanvas::NodeRequestBus::Event(createdPair.m_graphCanvasId, &GraphCanvas::NodeRequests::RemoveSlot, *extenderSlotIds.begin());
|
||||
}
|
||||
|
||||
GraphCanvas::NodeRequestBus::EventResult(executionSlotIds, createdPair.m_graphCanvasId, &GraphCanvas::NodeRequests::FindVisibleSlotIdsByType, typeToRemove, GraphCanvas::SlotTypes::ExecutionSlot);
|
||||
if (!executionSlotIds.empty())
|
||||
{
|
||||
GraphCanvas::NodeRequestBus::Event(createdPair.m_graphCanvasId, &GraphCanvas::NodeRequests::RemoveSlot, *executionSlotIds.begin());
|
||||
}
|
||||
}
|
||||
|
||||
return createdPair;
|
||||
}
|
||||
|
||||
NodeIdPair CreateNode(const AZ::Uuid& classId, const ScriptCanvas::ScriptCanvasId& scriptCanvasId, const StyleConfiguration& styleConfiguration)
|
||||
{
|
||||
return CreateAndGetNode(classId, scriptCanvasId, styleConfiguration).second;
|
||||
}
|
||||
|
||||
AZStd::pair<ScriptCanvas::Node*, NodeIdPair> CreateAndGetNode(const AZ::Uuid& classId, const ScriptCanvas::ScriptCanvasId& scriptCanvasId, const StyleConfiguration& styleConfiguration)
|
||||
{
|
||||
AZ_PROFILE_TIMER("ScriptCanvas", __FUNCTION__);
|
||||
NodeIdPair nodeIdPair;
|
||||
@@ -104,7 +139,7 @@ namespace ScriptCanvasEditor::Nodes
|
||||
//nodeConfiguration.m_nodeSubStyle = styleConfiguration.m_nodeSubStyle;
|
||||
}
|
||||
|
||||
return nodeIdPair;
|
||||
return AZStd::make_pair(node, nodeIdPair);
|
||||
}
|
||||
|
||||
NodeIdPair CreateEntityNode(const AZ::EntityId& sourceId, const ScriptCanvas::ScriptCanvasId& scriptCanvasId)
|
||||
@@ -367,7 +402,7 @@ namespace ScriptCanvasEditor::Nodes
|
||||
return nodeIds;
|
||||
}
|
||||
|
||||
NodeIdPair CreateFunctionNode(const ScriptCanvas::ScriptCanvasId& scriptCanvasGraphId, const AZ::Data::AssetId& assetId)
|
||||
NodeIdPair CreateFunctionNode(const ScriptCanvas::ScriptCanvasId& scriptCanvasGraphId, const AZ::Data::AssetId& assetId, const ScriptCanvas::Grammar::FunctionSourceId& sourceId)
|
||||
{
|
||||
AZ_Assert(assetId.IsValid(), "CreateFunctionNode source asset Id must be valid");
|
||||
|
||||
@@ -381,11 +416,9 @@ namespace ScriptCanvasEditor::Nodes
|
||||
scriptCanvasEntity->Init();
|
||||
|
||||
ScriptCanvas::Node* node = nullptr;
|
||||
ScriptCanvas::SystemRequestBus::BroadcastResult(node, &ScriptCanvas::SystemRequests::CreateNodeOnEntity, scriptCanvasEntity->GetId(), scriptCanvasGraphId, ScriptCanvas::Nodes::Core::FunctionNode::RTTI_Type());
|
||||
auto* functionNode = azrtti_cast<ScriptCanvas::Nodes::Core::FunctionNode*>(node);
|
||||
functionNode->Initialize(assetId);
|
||||
functionNode->ConfigureNode(assetId);
|
||||
|
||||
ScriptCanvas::SystemRequestBus::BroadcastResult(node, &ScriptCanvas::SystemRequests::CreateNodeOnEntity, scriptCanvasEntity->GetId(), scriptCanvasGraphId, ScriptCanvas::Nodes::Core::FunctionCallNode::RTTI_Type());
|
||||
auto functionNode = azrtti_cast<ScriptCanvas::Nodes::Core::FunctionCallNode*>(node);
|
||||
functionNode->Initialize(assetId, sourceId);
|
||||
functionNode->BuildNode();
|
||||
|
||||
nodeIdPair.m_scriptCanvasId = scriptCanvasEntity->GetId();
|
||||
|
||||
@@ -13,12 +13,16 @@
|
||||
#pragma once
|
||||
|
||||
#include <AzCore/Component/EntityId.h>
|
||||
|
||||
#include <Editor/Nodes/NodeUtils.h>
|
||||
|
||||
#include <ScriptCanvas/Bus/NodeIdPair.h>
|
||||
#include <ScriptCanvas/Core/SubgraphInterfaceUtility.h>
|
||||
#include <ScriptCanvas/Variable/VariableCore.h>
|
||||
|
||||
namespace ScriptCanvas
|
||||
{
|
||||
class Node;
|
||||
}
|
||||
|
||||
namespace ScriptEvents
|
||||
{
|
||||
class Method;
|
||||
@@ -27,6 +31,7 @@ namespace ScriptEvents
|
||||
namespace ScriptCanvasEditor::Nodes
|
||||
{
|
||||
// Specific create methods which will also handle displaying the node.
|
||||
AZStd::pair<ScriptCanvas::Node*, NodeIdPair> CreateAndGetNode(const AZ::Uuid& classData, const ScriptCanvas::ScriptCanvasId& scriptCanvasId, const StyleConfiguration& styleConfiguration);
|
||||
NodeIdPair CreateNode(const AZ::Uuid& classData, const ScriptCanvas::ScriptCanvasId& scriptCanvasId, const StyleConfiguration& styleConfiguration);
|
||||
NodeIdPair CreateEntityNode(const AZ::EntityId& sourceId, const ScriptCanvas::ScriptCanvasId& scriptCanvasId);
|
||||
NodeIdPair CreateObjectMethodNode(AZStd::string_view className, AZStd::string_view methodName, const ScriptCanvas::ScriptCanvasId& scriptCanvasId);
|
||||
@@ -42,10 +47,8 @@ namespace ScriptCanvasEditor::Nodes
|
||||
NodeIdPair CreateSetVariableNode(const ScriptCanvas::VariableId& variableId, ScriptCanvas::ScriptCanvasId scriptCanvasGraphId);
|
||||
|
||||
// Functions
|
||||
NodeIdPair CreateFunctionNode(const ScriptCanvas::ScriptCanvasId& scriptCanvasGraphId, const AZ::Data::AssetId& assetId);
|
||||
|
||||
// Nodelings
|
||||
NodeIdPair CreateExecutionNodeling(const ScriptCanvas::ScriptCanvasId& scriptCanvasId, AZStd::string_view rootName = "New Nodeling");
|
||||
NodeIdPair CreateFunctionNode(const ScriptCanvas::ScriptCanvasId& scriptCanvasGraphId, const AZ::Data::AssetId& assetId, const ScriptCanvas::Grammar::FunctionSourceId& sourceId);
|
||||
NodeIdPair CreateFunctionDefinitionNode(const ScriptCanvas::ScriptCanvasId& scriptCanvasId, bool isInput, AZStd::string rootName = "New Nodeling");
|
||||
|
||||
// AZ Event
|
||||
NodeIdPair CreateAzEventHandlerNode(const AZ::BehaviorMethod& methodWithAzEventReturn, ScriptCanvas::ScriptCanvasId scriptCanvasId,
|
||||
|
||||
@@ -30,6 +30,8 @@
|
||||
#include <GraphCanvas/Components/NodeDescriptors/ScriptEventReceiverNodeDescriptorComponent.h>
|
||||
#include <GraphCanvas/Components/NodeDescriptors/ScriptEventSenderNodeDescriptorComponent.h>
|
||||
#include <GraphCanvas/Components/NodeDescriptors/UserDefinedNodeDescriptorComponent.h>
|
||||
#include <GraphCanvas/Components/NodeDescriptors/FunctionDefinitionNodeDescriptorComponent.h>
|
||||
|
||||
#include <GraphCanvas/Components/Nodes/NodeTitleBus.h>
|
||||
#include <GraphCanvas/GraphCanvasBus.h>
|
||||
#include <GraphCanvas/Components/Slots/Extender/ExtenderSlotBus.h>
|
||||
@@ -39,7 +41,7 @@
|
||||
#include <ScriptCanvas/Libraries/Core/AzEventHandler.h>
|
||||
#include <ScriptCanvas/Libraries/Core/EBusEventHandler.h>
|
||||
#include <ScriptCanvas/Libraries/Core/FunctionDefinitionNode.h>
|
||||
#include <ScriptCanvas/Libraries/Core/FunctionNode.h>
|
||||
#include <ScriptCanvas/Libraries/Core/FunctionCallNode.h>
|
||||
#include <ScriptCanvas/Libraries/Core/GetVariable.h>
|
||||
#include <ScriptCanvas/Libraries/Core/ReceiveScriptEvent.h>
|
||||
#include <ScriptCanvas/Libraries/Core/Method.h>
|
||||
@@ -47,6 +49,7 @@
|
||||
#include <ScriptCanvas/Libraries/Core/SetVariable.h>
|
||||
#include <ScriptCanvas/Libraries/Entity/EntityRef.h>
|
||||
|
||||
|
||||
namespace ScriptCanvasEditor::Nodes::SlotDisplayHelper
|
||||
{
|
||||
AZ::EntityId DisplayPropertySlot(AZ::EntityId graphCanvasNodeId, const ScriptCanvas::VisualExtensionSlotConfiguration& propertyConfiguration);
|
||||
@@ -819,12 +822,12 @@ namespace ScriptCanvasEditor::Nodes
|
||||
}
|
||||
|
||||
// Function Nodes
|
||||
AZ::EntityId DisplayFunctionNode(AZ::EntityId graphCanvasGraphId, const ScriptCanvas::Nodes::Core::FunctionNode* functionNode)
|
||||
AZ::EntityId DisplayFunctionNode(AZ::EntityId graphCanvasGraphId, const ScriptCanvas::Nodes::Core::FunctionCallNode* functionNode)
|
||||
{
|
||||
return DisplayFunctionNode(graphCanvasGraphId, const_cast<ScriptCanvas::Nodes::Core::FunctionNode*>(functionNode));
|
||||
return DisplayFunctionNode(graphCanvasGraphId, const_cast<ScriptCanvas::Nodes::Core::FunctionCallNode*>(functionNode));
|
||||
}
|
||||
|
||||
AZ::EntityId DisplayFunctionNode(AZ::EntityId, ScriptCanvas::Nodes::Core::FunctionNode* functionNode)
|
||||
AZ::EntityId DisplayFunctionNode(AZ::EntityId, ScriptCanvas::Nodes::Core::FunctionCallNode* functionNode)
|
||||
{
|
||||
AZ::EntityId graphCanvasNodeId;
|
||||
|
||||
@@ -892,6 +895,80 @@ namespace ScriptCanvasEditor::Nodes
|
||||
return graphCanvasNodeId;
|
||||
}
|
||||
|
||||
AZ::EntityId DisplayFunctionDefinitionNode(AZ::EntityId graphCanvasGraphId, const ScriptCanvas::Nodes::Core::FunctionDefinitionNode* nodeling)
|
||||
{
|
||||
NodeConfiguration nodeConfiguration;
|
||||
|
||||
nodeConfiguration.PopulateComponentDescriptors<IconComponent, FunctionDefinitionNodeDescriptorComponent>();
|
||||
|
||||
if (nodeling->RequiresDynamicSlotOrdering())
|
||||
{
|
||||
nodeConfiguration.PopulateComponentDescriptors<DynamicOrderingDynamicSlotComponent>();
|
||||
}
|
||||
else
|
||||
{
|
||||
nodeConfiguration.PopulateComponentDescriptors<DynamicSlotComponent>();
|
||||
}
|
||||
|
||||
nodeConfiguration.m_nodeSubStyle = ".nodeling";
|
||||
nodeConfiguration.m_titlePalette = "NodelingTitlePalette";
|
||||
nodeConfiguration.m_scriptCanvasId = nodeling->GetEntityId();
|
||||
|
||||
AZ::SerializeContext* serializeContext = nullptr;
|
||||
AZ::ComponentApplicationBus::BroadcastResult(serializeContext, &AZ::ComponentApplicationRequests::GetSerializeContext);
|
||||
|
||||
AZ_Assert(serializeContext, "Failed to acquire application serialize context.");
|
||||
const AZ::SerializeContext::ClassData* classData = serializeContext->FindClassData(azrtti_typeid(nodeling));
|
||||
|
||||
if (classData)
|
||||
{
|
||||
AZStd::string nodeContext = GetContextName(*classData);
|
||||
nodeConfiguration.m_translationContext = TranslationHelper::GetUserDefinedContext(nodeContext);
|
||||
|
||||
nodeConfiguration.m_titleFallback = (classData->m_editData && classData->m_editData->m_name) ? classData->m_editData->m_name : classData->m_name;
|
||||
nodeConfiguration.m_tooltipFallback = (classData->m_editData && classData->m_editData->m_description) ? classData->m_editData->m_description : "";
|
||||
|
||||
GraphCanvas::TranslationKeyedString subtitleKeyedString(nodeContext, nodeConfiguration.m_translationContext);
|
||||
subtitleKeyedString.m_key = TranslationHelper::GetUserDefinedNodeKey(nodeContext, nodeConfiguration.m_titleFallback, ScriptCanvasEditor::TranslationKeyId::Category);
|
||||
|
||||
nodeConfiguration.m_subtitleFallback = subtitleKeyedString.GetDisplayString();
|
||||
|
||||
nodeConfiguration.m_translationKeyName = nodeConfiguration.m_titleFallback;
|
||||
nodeConfiguration.m_translationKeyContext = nodeContext;
|
||||
|
||||
nodeConfiguration.m_translationGroup = TranslationContextGroup::ClassMethod;
|
||||
|
||||
|
||||
ScriptCanvas::GraphScopedNodeId nodelingId;
|
||||
|
||||
nodelingId.m_identifier = nodeConfiguration.m_scriptCanvasId;
|
||||
nodelingId.m_scriptCanvasId = nodeling->GetOwningScriptCanvasId();
|
||||
|
||||
AZStd::string nodelingName;
|
||||
ScriptCanvas::NodelingRequestBus::EventResult(nodelingName, nodelingId, &ScriptCanvas::NodelingRequests::GetDisplayName);
|
||||
|
||||
if (classData->m_editData)
|
||||
{
|
||||
const AZ::Edit::ElementData* elementData = classData->m_editData->FindElementData(AZ::Edit::ClassElements::EditorData);
|
||||
|
||||
if (elementData)
|
||||
{
|
||||
if (auto nodeTypeAttribute = elementData->FindAttribute(ScriptCanvas::Attributes::Node::NodeType))
|
||||
{
|
||||
if (auto nodeTypeAttributeData = azdynamic_cast<const AZ::Edit::AttributeData<NodeType>*>(nodeTypeAttribute))
|
||||
{
|
||||
nodeConfiguration.m_nodeType = nodeTypeAttributeData->Get(nullptr);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
nodeConfiguration.m_subtitleFallback = "";
|
||||
|
||||
return DisplayGeneralScriptCanvasNode(graphCanvasGraphId, nodeling, nodeConfiguration);
|
||||
}
|
||||
|
||||
AZ::EntityId DisplayNodeling(AZ::EntityId graphCanvasGraphId, const ScriptCanvas::Nodes::Core::Internal::Nodeling* nodeling)
|
||||
{
|
||||
NodeConfiguration nodeConfiguration;
|
||||
@@ -1062,9 +1139,13 @@ namespace ScriptCanvasEditor::Nodes
|
||||
{
|
||||
graphCanvasNodeId = DisplayScriptEventSenderNode(graphCanvasGraphId, static_cast<const ScriptCanvas::Nodes::Core::SendScriptEvent*>(node));
|
||||
}
|
||||
else if (azrtti_istypeof<ScriptCanvas::Nodes::Core::FunctionNode>(node))
|
||||
else if (azrtti_istypeof<ScriptCanvas::Nodes::Core::FunctionCallNode>(node))
|
||||
{
|
||||
graphCanvasNodeId = DisplayFunctionNode(graphCanvasGraphId, static_cast<const ScriptCanvas::Nodes::Core::FunctionNode*>(node));
|
||||
graphCanvasNodeId = DisplayFunctionNode(graphCanvasGraphId, static_cast<const ScriptCanvas::Nodes::Core::FunctionCallNode*>(node));
|
||||
}
|
||||
else if (azrtti_istypeof<ScriptCanvas::Nodes::Core::FunctionDefinitionNode>(node))
|
||||
{
|
||||
graphCanvasNodeId = DisplayFunctionDefinitionNode(graphCanvasGraphId, static_cast<const ScriptCanvas::Nodes::Core::FunctionDefinitionNode*>(node));
|
||||
}
|
||||
else if (azrtti_istypeof<ScriptCanvas::Nodes::Core::Internal::Nodeling>(node))
|
||||
{
|
||||
@@ -1138,7 +1219,7 @@ namespace ScriptCanvasEditor::Nodes
|
||||
|
||||
if (slot.IsLatent())
|
||||
{
|
||||
executionConfiguration.m_textDecoration = "🕒";
|
||||
executionConfiguration.m_textDecoration = u8"\U0001f552";
|
||||
executionConfiguration.m_textDecorationToolTip = "This slot will not be executed immediately.";
|
||||
}
|
||||
|
||||
@@ -1163,7 +1244,7 @@ namespace ScriptCanvasEditor::Nodes
|
||||
|
||||
if (slot.IsLatent())
|
||||
{
|
||||
dataSlotConfiguration.m_textDecoration = "🕒";
|
||||
dataSlotConfiguration.m_textDecoration = u8"\U0001f552";
|
||||
dataSlotConfiguration.m_textDecorationToolTip = "This slot will not be executed immediately.";
|
||||
}
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ namespace ScriptCanvas::Nodes::Core
|
||||
{
|
||||
class AzEventHandler;
|
||||
class EBusEventHandler;
|
||||
class FunctionNode;
|
||||
class FunctionCallNode;
|
||||
class GetVariableNode;
|
||||
class Method;
|
||||
class ReceiveScriptEvent;
|
||||
@@ -66,8 +66,8 @@ namespace ScriptCanvasEditor::Nodes
|
||||
AZ::EntityId DisplayScriptEventWrapperNode(AZ::EntityId graphCanvasGraphId, const ScriptCanvas::Nodes::Core::ReceiveScriptEvent* busNode);
|
||||
|
||||
// Functions
|
||||
AZ::EntityId DisplayFunctionNode(AZ::EntityId graphCanvasGraphId, const ScriptCanvas::Nodes::Core::FunctionNode* functionNode);
|
||||
AZ::EntityId DisplayFunctionNode(AZ::EntityId graphCanvasGraphId, ScriptCanvas::Nodes::Core::FunctionNode* functionNode);
|
||||
AZ::EntityId DisplayFunctionNode(AZ::EntityId graphCanvasGraphId, const ScriptCanvas::Nodes::Core::FunctionCallNode* functionNode);
|
||||
AZ::EntityId DisplayFunctionNode(AZ::EntityId graphCanvasGraphId, ScriptCanvas::Nodes::Core::FunctionCallNode* functionNode);
|
||||
|
||||
|
||||
// SlotGroup will control how elements are grouped.
|
||||
|
||||
Reference in New Issue
Block a user