From be5af35c9cf4a081ee610632f704768776fea7ca Mon Sep 17 00:00:00 2001 From: Jeffrey Date: Fri, 18 Apr 2025 18:06:43 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20Source/FLESH/Private/Disme?= =?UTF-8?q?mbermentGraph/DismembermentGraphBase.cpp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DismembermentGraphBase.cpp | 38 ++++++++++++++++--- 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/Source/FLESH/Private/DismembermentGraph/DismembermentGraphBase.cpp b/Source/FLESH/Private/DismembermentGraph/DismembermentGraphBase.cpp index 855b2c5..8cd7f6c 100644 --- a/Source/FLESH/Private/DismembermentGraph/DismembermentGraphBase.cpp +++ b/Source/FLESH/Private/DismembermentGraph/DismembermentGraphBase.cpp @@ -5,6 +5,8 @@ UDismembermentGraphBase::UDismembermentGraphBase() : bCompiled(false) { + Layers = {TEXT("Bone"), TEXT("Organ"), TEXT("Skin")}; // Default layers + LayerPatchData.Empty(); } void UDismembermentGraphBase::ClearGraph() @@ -12,6 +14,7 @@ void UDismembermentGraphBase::ClearGraph() // Clear all nodes Nodes.Empty(); bCompiled = false; + LayerPatchData.Empty(); } UEdGraphNode* UDismembermentGraphBase::AddNode(TSubclassOf NodeClass, const FVector2D& Position) @@ -23,11 +26,9 @@ UEdGraphNode* UDismembermentGraphBase::AddNode(TSubclassOf NodeCla // Set node position NewNode->NodePosX = Position.X; NewNode->NodePosY = Position.Y; - // Add to node list Nodes.Add(NewNode); } - return NewNode; } @@ -40,11 +41,36 @@ void UDismembermentGraphBase::RemoveNode(UEdGraphNode* Node) } } -void UDismembermentGraphBase::CreateConnection(UEdGraphPin* A, UEdGraphPin* B) +#if WITH_EDITOR +// void UDismembermentGraphBase::CreateConnection(UEdGraphPin* A, UEdGraphPin* B) +// { +// if (A && B) +// { +// A->MakeLinkTo(B); +// } +// } +#endif + +FString UDismembermentGraphBase::SerializeGraph() const { - // Create connection - if (A && B) + // Serialize the graph structure to a string (for debugging/versioning) + FString Result = TEXT("Graph Nodes:\n"); + for (const TObjectPtr& Node : Nodes) { - A->MakeLinkTo(B); + if (Node) + { + Result += FString::Printf(TEXT("- %s at (%d, %d)\n"), *Node->GetName(), Node->NodePosX, Node->NodePosY); + } } + Result += TEXT("Layers:\n"); + for (const FName& Layer : Layers) + { + Result += FString::Printf(TEXT("- %s\n"), *Layer.ToString()); + } + Result += TEXT("Patch Data:\n"); + for (const auto& Elem : LayerPatchData) + { + Result += FString::Printf(TEXT("- %s: %s\n"), *Elem.Key.ToString(), *Elem.Value); + } + return Result; }