Files
FLESH/Source/FLESHEditor/Private/FLESHGraph/FLESHGraphNode.cpp
2025-04-23 01:18:06 +08:00

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;
}