Files
UnrealEngineUWP/Engine/Source/Developer/RigVMDeveloper/Private/RigVMModel/Nodes/RigVMVariableNode.cpp
sara schvartzman d3fad84790 Control Rig: Fix crash on copy paste nodes with variable binding
#jira UE-138888
#rb helge.mathee
#preflight 61deff35ff67b6fe7abb99fe

#ROBOMERGE-AUTHOR: sara.schvartzman
#ROBOMERGE-SOURCE: CL 18595239 in //UE5/Release-5.0/... via CL 18595240 via CL 18595248
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Test -> Main) (v899-18417669)

[CL 18596669 by sara schvartzman in ue5-main branch]
2022-01-13 10:07:57 -05:00

131 lines
2.7 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "RigVMModel/Nodes/RigVMVariableNode.h"
#include "RigVMModel/RigVMGraph.h"
const FString URigVMVariableNode::VariableName = TEXT("Variable");
const FString URigVMVariableNode::ValueName = TEXT("Value");
URigVMVariableNode::URigVMVariableNode()
{
}
FString URigVMVariableNode::GetNodeTitle() const
{
if (IsGetter())
{
return FString::Printf(TEXT("Get %s"), *GetVariableName().ToString());
}
return FString::Printf(TEXT("Set %s"), *GetVariableName().ToString());
}
FName URigVMVariableNode::GetVariableName() const
{
URigVMPin* VariablePin = FindPin(VariableName);
if (VariablePin == nullptr)
{
return NAME_None;
}
return *VariablePin->GetDefaultValue();
}
bool URigVMVariableNode::IsGetter() const
{
URigVMPin* ValuePin = FindPin(ValueName);
if (ValuePin == nullptr)
{
return false;
}
return ValuePin->GetDirection() == ERigVMPinDirection::Output;
}
bool URigVMVariableNode::IsLocalVariable() const
{
const FName CurrentVariableName = GetVariableName();
if(URigVMGraph* Graph = GetGraph())
{
const TArray<FRigVMGraphVariableDescription>& LocalVariables = Graph->GetLocalVariables();
for (const FRigVMGraphVariableDescription& LocalVariable : LocalVariables)
{
if(LocalVariable.Name == CurrentVariableName)
{
return true;
}
}
}
return false;
}
bool URigVMVariableNode::IsInputArgument() const
{
const FName CurrentVariableName = GetVariableName();
if(URigVMGraph* Graph = GetGraph())
{
if (URigVMFunctionEntryNode* EntryNode = Graph->GetEntryNode())
{
for (const URigVMPin* Pin : EntryNode->GetPins())
{
if(Pin->GetFName() == CurrentVariableName)
{
return true;
}
}
}
}
return false;
}
FString URigVMVariableNode::GetCPPType() const
{
URigVMPin* ValuePin = FindPin(ValueName);
if (ValuePin == nullptr)
{
return FString();
}
return ValuePin->GetCPPType();
}
UObject* URigVMVariableNode::GetCPPTypeObject() const
{
URigVMPin* ValuePin = FindPin(ValueName);
if (ValuePin == nullptr)
{
return nullptr;
}
return ValuePin->GetCPPTypeObject();
}
FString URigVMVariableNode::GetDefaultValue() const
{
URigVMPin* ValuePin = FindPin(ValueName);
if (ValuePin == nullptr)
{
return FString();
}
return ValuePin->GetDefaultValue();
}
FRigVMGraphVariableDescription URigVMVariableNode::GetVariableDescription() const
{
FRigVMGraphVariableDescription Variable;
Variable.Name = GetVariableName();
Variable.CPPType = GetCPPType();
Variable.CPPTypeObject = GetCPPTypeObject();
Variable.DefaultValue = GetDefaultValue();
return Variable;
}
URigVMPin* URigVMVariableNode::GetVariableNamePin() const
{
return FindPin(VariableName);
}
URigVMPin* URigVMVariableNode::GetValuePin() const
{
return FindPin(ValueName);
}