diff --git a/Plugins/UEWingman/Source/UEWingman/Handlers/GraphNode_SetDefaults.h b/Plugins/UEWingman/Source/UEWingman/Handlers/GraphNode_SetDefaults.h index 5fe3d015..137a5299 100644 --- a/Plugins/UEWingman/Source/UEWingman/Handlers/GraphNode_SetDefaults.h +++ b/Plugins/UEWingman/Source/UEWingman/Handlers/GraphNode_SetDefaults.h @@ -59,7 +59,7 @@ public: WingFetcher F(GraphObj, WingOut::Stdout); UWingPinReference* PinRef = F.Node(Entry.Node).Pin(Entry.Name).Cast(); if (!PinRef) return; - UEdGraphPin* Pin = PinRef->CheckGetPin(WingOut::Stdout); + UEdGraphPin* Pin = WingUtils::CheckGetPin(PinRef->Node, PinRef->PinName, WingOut::Stdout); if (!Pin) return; UEdGraphNode* Node = Pin->GetOwningNode(); diff --git a/Plugins/UEWingman/Source/UEWingman/Handlers/GraphPin_Connect.h b/Plugins/UEWingman/Source/UEWingman/Handlers/GraphPin_Connect.h index e01276cb..fc2b3372 100644 --- a/Plugins/UEWingman/Source/UEWingman/Handlers/GraphPin_Connect.h +++ b/Plugins/UEWingman/Source/UEWingman/Handlers/GraphPin_Connect.h @@ -67,13 +67,13 @@ public: WingFetcher FS(G, WingOut::Stdout); UWingPinReference* SourcePinRef = FS.Walk(Entry.SourcePin).Cast(); if (!SourcePinRef) continue; - UEdGraphPin* SourcePin = SourcePinRef->CheckGetPin(WingOut::Stdout); + UEdGraphPin* SourcePin = WingUtils::CheckGetPin(SourcePinRef->Node, SourcePinRef->PinName, WingOut::Stdout); if (!SourcePin) continue; WingFetcher FT(G, WingOut::Stdout); UWingPinReference* TargetPinRef = FT.Walk(Entry.TargetPin).Cast(); if (!TargetPinRef) continue; - UEdGraphPin* TargetPin = TargetPinRef->CheckGetPin(WingOut::Stdout); + UEdGraphPin* TargetPin = WingUtils::CheckGetPin(TargetPinRef->Node, TargetPinRef->PinName, WingOut::Stdout); if (!TargetPin) continue; const UEdGraphSchema* Schema = G->GetSchema(); diff --git a/Plugins/UEWingman/Source/UEWingman/Handlers/GraphPin_Disconnect.h b/Plugins/UEWingman/Source/UEWingman/Handlers/GraphPin_Disconnect.h index 4a9ca40b..3b1758c4 100644 --- a/Plugins/UEWingman/Source/UEWingman/Handlers/GraphPin_Disconnect.h +++ b/Plugins/UEWingman/Source/UEWingman/Handlers/GraphPin_Disconnect.h @@ -66,7 +66,7 @@ public: WingFetcher FP(G, WingOut::Stdout); UWingPinReference* PinRef = FP.Walk(Entry.Pin).Cast(); if (!PinRef) continue; - UEdGraphPin* Pin = PinRef->CheckGetPin(WingOut::Stdout); + UEdGraphPin* Pin = WingUtils::CheckGetPin(PinRef->Node, PinRef->PinName, WingOut::Stdout); if (!Pin) continue; int32 DisconnectedCount = 0; @@ -76,7 +76,7 @@ public: WingFetcher FT(G, WingOut::Stdout); UWingPinReference* TargetRef = FT.Walk(Entry.TargetPin).Cast(); if (!TargetRef) continue; - UEdGraphPin* Target = TargetRef->CheckGetPin(WingOut::Stdout); + UEdGraphPin* Target = WingUtils::CheckGetPin(TargetRef->Node, TargetRef->PinName, WingOut::Stdout); if (!Target) continue; if (!Pin->LinkedTo.Contains(Target)) diff --git a/Plugins/UEWingman/Source/UEWingman/Private/WingReferences.cpp b/Plugins/UEWingman/Source/UEWingman/Private/WingReferences.cpp index b207a452..c4ce97df 100644 --- a/Plugins/UEWingman/Source/UEWingman/Private/WingReferences.cpp +++ b/Plugins/UEWingman/Source/UEWingman/Private/WingReferences.cpp @@ -3,31 +3,4 @@ #include "EdGraph/EdGraphNode.h" #include "EdGraph/EdGraphPin.h" -UEdGraphPin* UWingPinReference::GetPin() const -{ - if (!Node) return nullptr; - for (UEdGraphPin* Pin : Node->Pins) - { - if (Pin && Pin->GetFName() == PinName) return Pin; - } - return nullptr; -} -UEdGraphPin* UWingPinReference::CheckGetPin(WingOut Errors) const -{ - if (!Node) - { - Errors.Print(TEXT("ERROR: Pin reference has no node\n")); - return nullptr; - } - - UEdGraphPin* Pin = GetPin(); - if (!Pin) - { - Errors.Printf(TEXT("ERROR: Pin '%s' no longer exists on node '%s'\n"), - *WingUtils::ExternalizeID(PinName), *WingUtils::FormatName(Node)); - return nullptr; - } - - return Pin; -} diff --git a/Plugins/UEWingman/Source/UEWingman/Private/WingUtils.cpp b/Plugins/UEWingman/Source/UEWingman/Private/WingUtils.cpp index e997b360..f6d4a63d 100644 --- a/Plugins/UEWingman/Source/UEWingman/Private/WingUtils.cpp +++ b/Plugins/UEWingman/Source/UEWingman/Private/WingUtils.cpp @@ -490,6 +490,24 @@ UObject *WingUtils::GetGeneratedCDO(UBlueprint *BP) return BP->GeneratedClass->GetDefaultObject(); } +// ============================================================ +// Graph Pin Helpers +// ============================================================ + +UEdGraphPin* WingUtils::CheckGetPin(UEdGraphNode* Node, FName PinName, WingOut Errors) +{ + for (UEdGraphPin* Pin : Node->Pins) + { + if (Pin && Pin->GetFName() == PinName) + { + return Pin; + } + } + Errors.Printf(TEXT("ERROR: Pin '%s' no longer exists on node '%s'\n"), + *WingUtils::ExternalizeID(PinName), *WingUtils::FormatName(Node)); + return nullptr; +} + // ============================================================ // Editor helpers // ============================================================ diff --git a/Plugins/UEWingman/Source/UEWingman/Public/WingActorComponent.h b/Plugins/UEWingman/Source/UEWingman/Public/WingActorComponent.h index c4976f7f..93609af1 100644 --- a/Plugins/UEWingman/Source/UEWingman/Public/WingActorComponent.h +++ b/Plugins/UEWingman/Source/UEWingman/Public/WingActorComponent.h @@ -9,10 +9,8 @@ class USCS_Node; class UActorComponent; class USimpleConstructionScript; -// a 'Component Reference' is basically just a pointer to a -// blueprint plus a component name. The other fields in here -// are purely for convenience of printing things out, they -// are *never* used for any analysis. +// a 'Component Reference' is just a pointer to a +// blueprint plus a component name. // UCLASS() class UWingComponentReference : public UObject @@ -37,8 +35,6 @@ public: static TArray GetAll(UBlueprint* BP); static void PrintAll(UBlueprint* BP, WingOut Out); - static void PrintComponentInfo(const FString& TypeName, const FString& VarName, - const FString& ParentName, bool Inherited, WingOut Out); static bool CheckValidComponentClass(UClass *Class, WingOut Errors); private: @@ -59,4 +55,6 @@ private: static bool CheckOwnedByBlueprint(FoundComponent FC, UBlueprint *BP, WingOut Errors); static void AddChildNode(UBlueprint *BP, USCS_Node *Node, FoundComponent Parent); static TMap CalculateParentNames(USimpleConstructionScript *Script); + static void PrintComponentInfo(const FString& TypeName, const FString& VarName, + const FString& ParentName, bool Inherited, WingOut Out); }; diff --git a/Plugins/UEWingman/Source/UEWingman/Public/WingReferences.h b/Plugins/UEWingman/Source/UEWingman/Public/WingReferences.h index 204595a2..6ddb1b61 100644 --- a/Plugins/UEWingman/Source/UEWingman/Public/WingReferences.h +++ b/Plugins/UEWingman/Source/UEWingman/Public/WingReferences.h @@ -63,7 +63,4 @@ public: UEdGraphNode* Node = nullptr; FName PinName; - - UEdGraphPin* GetPin() const; - UEdGraphPin* CheckGetPin(WingOut Errors) const; }; diff --git a/Plugins/UEWingman/Source/UEWingman/Public/WingUtils.h b/Plugins/UEWingman/Source/UEWingman/Public/WingUtils.h index 28a46866..50702182 100644 --- a/Plugins/UEWingman/Source/UEWingman/Public/WingUtils.h +++ b/Plugins/UEWingman/Source/UEWingman/Public/WingUtils.h @@ -195,7 +195,6 @@ public: static FString FormatName(const UWingComponentReference *Ref); static FString FormatName(const UWidget *Widget); - //////////////////////////////////////////////////////// // static FString ExternalizeID(const FString& InternalID); static FString ExternalizeID(FName Name); @@ -248,6 +247,9 @@ public: static TArray GetAncestorBlueprints(UBlueprint *BP, bool OldestFirst = false); static UObject *GetGeneratedCDO(UBlueprint *BP); + // ----- Graph pin helpers ----- + static UEdGraphPin* CheckGetPin(UEdGraphNode* Node, FName PinName, WingOut Errors); + // ----- Editor helpers ----- static IAssetEditorInstance* CheckOpenEditorForAsset(UObject* Asset, WingOut Errors);