#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::GetInputNodes() const { return InputNodes; } TArray 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; }