165 lines
4.1 KiB
C++
165 lines
4.1 KiB
C++
#include "FLESHGraph/FLESHGraphNode.h"
|
|
#include "Logging/LogMacros.h"
|
|
|
|
// 定义日志类别
|
|
DEFINE_LOG_CATEGORY_STATIC(LogFLESHGraphNode, Log, All);
|
|
|
|
UFLESHGraphNode::UFLESHGraphNode()
|
|
{
|
|
// 初始化默认值
|
|
NodeTitle = TEXT("FLESH节点");
|
|
NodeType = EFLESHNodeType::None;
|
|
NodeColor = FLinearColor(0.5f, 0.5f, 0.5f);
|
|
NodePosition = FVector2D::ZeroVector;
|
|
}
|
|
|
|
FString UFLESHGraphNode::GetNodeTitle() const
|
|
{
|
|
return NodeTitle;
|
|
}
|
|
|
|
EFLESHNodeType UFLESHGraphNode::GetNodeType() const
|
|
{
|
|
return NodeType;
|
|
}
|
|
|
|
FLinearColor UFLESHGraphNode::GetNodeColor() const
|
|
{
|
|
return NodeColor;
|
|
}
|
|
|
|
FVector2D UFLESHGraphNode::GetNodePosition() const
|
|
{
|
|
return NodePosition;
|
|
}
|
|
|
|
void UFLESHGraphNode::SetNodePosition(const FVector2D& InPosition)
|
|
{
|
|
NodePosition = InPosition;
|
|
}
|
|
|
|
TArray<UFLESHGraphNode*> UFLESHGraphNode::GetInputNodes() const
|
|
{
|
|
return InputNodes;
|
|
}
|
|
|
|
TArray<UFLESHGraphNode*> UFLESHGraphNode::GetOutputNodes() const
|
|
{
|
|
return OutputNodes;
|
|
}
|
|
|
|
bool UFLESHGraphNode::AddInputNode(UFLESHGraphNode* Node)
|
|
{
|
|
// 检查节点是否有效
|
|
if (!Node)
|
|
{
|
|
UE_LOG(LogFLESHGraphNode, Warning, TEXT("FLESH: 尝试添加无效的输入节点"));
|
|
return false;
|
|
}
|
|
|
|
// 检查节点是否已经在输入列表中
|
|
if (InputNodes.Contains(Node))
|
|
{
|
|
UE_LOG(LogFLESHGraphNode, Warning, TEXT("FLESH: 节点已经在输入列表中: %s"), *Node->GetNodeTitle());
|
|
return false;
|
|
}
|
|
|
|
// 添加到输入列表
|
|
InputNodes.Add(Node);
|
|
|
|
UE_LOG(LogFLESHGraphNode, Log, TEXT("FLESH: 添加了输入节点: %s -> %s"), *Node->GetNodeTitle(), *GetNodeTitle());
|
|
|
|
return true;
|
|
}
|
|
|
|
bool UFLESHGraphNode::AddOutputNode(UFLESHGraphNode* Node)
|
|
{
|
|
// 检查节点是否有效
|
|
if (!Node)
|
|
{
|
|
UE_LOG(LogFLESHGraphNode, Warning, TEXT("FLESH: 尝试添加无效的输出节点"));
|
|
return false;
|
|
}
|
|
|
|
// 检查节点是否已经在输出列表中
|
|
if (OutputNodes.Contains(Node))
|
|
{
|
|
UE_LOG(LogFLESHGraphNode, Warning, TEXT("FLESH: 节点已经在输出列表中: %s"), *Node->GetNodeTitle());
|
|
return false;
|
|
}
|
|
|
|
// 添加到输出列表
|
|
OutputNodes.Add(Node);
|
|
|
|
UE_LOG(LogFLESHGraphNode, Log, TEXT("FLESH: 添加了输出节点: %s -> %s"), *GetNodeTitle(), *Node->GetNodeTitle());
|
|
|
|
return true;
|
|
}
|
|
|
|
bool UFLESHGraphNode::RemoveInputNode(UFLESHGraphNode* Node)
|
|
{
|
|
// 检查节点是否有效
|
|
if (!Node)
|
|
{
|
|
UE_LOG(LogFLESHGraphNode, Warning, TEXT("FLESH: 尝试移除无效的输入节点"));
|
|
return false;
|
|
}
|
|
|
|
// 从输入列表中移除
|
|
bool bRemoved = InputNodes.Remove(Node) > 0;
|
|
|
|
if (bRemoved)
|
|
{
|
|
UE_LOG(LogFLESHGraphNode, Log, TEXT("FLESH: 移除了输入节点: %s -> %s"), *Node->GetNodeTitle(), *GetNodeTitle());
|
|
}
|
|
else
|
|
{
|
|
UE_LOG(LogFLESHGraphNode, Warning, TEXT("FLESH: 节点不在输入列表中: %s"), *Node->GetNodeTitle());
|
|
}
|
|
|
|
return bRemoved;
|
|
}
|
|
|
|
bool UFLESHGraphNode::RemoveOutputNode(UFLESHGraphNode* Node)
|
|
{
|
|
// 检查节点是否有效
|
|
if (!Node)
|
|
{
|
|
UE_LOG(LogFLESHGraphNode, Warning, TEXT("FLESH: 尝试移除无效的输出节点"));
|
|
return false;
|
|
}
|
|
|
|
// 从输出列表中移除
|
|
bool bRemoved = OutputNodes.Remove(Node) > 0;
|
|
|
|
if (bRemoved)
|
|
{
|
|
UE_LOG(LogFLESHGraphNode, Log, TEXT("FLESH: 移除了输出节点: %s -> %s"), *GetNodeTitle(), *Node->GetNodeTitle());
|
|
}
|
|
else
|
|
{
|
|
UE_LOG(LogFLESHGraphNode, Warning, TEXT("FLESH: 节点不在输出列表中: %s"), *Node->GetNodeTitle());
|
|
}
|
|
|
|
return bRemoved;
|
|
}
|
|
|
|
bool UFLESHGraphNode::CompileNode(FFLESHNodeData& OutNodeData)
|
|
{
|
|
// 设置基本节点数据
|
|
OutNodeData.NodeName = FName(*GetNodeTitle());
|
|
OutNodeData.NodeType = GetNodeType();
|
|
|
|
// 设置连接的节点
|
|
OutNodeData.ConnectedNodes.Empty();
|
|
for (UFLESHGraphNode* OutputNode : OutputNodes)
|
|
{
|
|
// TODO: 获取节点索引
|
|
// OutNodeData.ConnectedNodes.Add(NodeIndex);
|
|
}
|
|
|
|
UE_LOG(LogFLESHGraphNode, Log, TEXT("FLESH: 编译了节点: %s"), *GetNodeTitle());
|
|
|
|
return true;
|
|
}
|