From d910f9f14aa8e3543c2419a85fb94b8a68fe5386 Mon Sep 17 00:00:00 2001 From: jyelon Date: Wed, 18 Mar 2026 10:17:58 -0400 Subject: [PATCH] Renaming to UE Wingman begins --- .../HalfBaked/AnimBlueprint_Create.h | 34 ++-- .../HalfBaked/AnimBlueprint_ListSlotNames.h | 18 +- .../HalfBaked/AnimBlueprint_ListSyncGroups.h | 18 +- .../AnimBlueprint_SetBlendSpaceSamples.h | 26 +-- .../HalfBaked/BlendSpace_Create.h | 26 +-- .../HalfBaked/BlueprintGraph_Create.h | 36 ++-- .../HalfBaked/BlueprintGraph_Delete.h | 34 ++-- .../HalfBaked/BlueprintGraph_Rename.h | 34 ++-- .../HalfBaked/Blueprint_AddComponent.h | 48 ++--- .../HalfBaked/Blueprint_AddEventDispatcher.h | 46 ++--- .../Blueprint_AddFunctionParameter.h | 143 --------------- .../HalfBaked/Blueprint_AddInterface.h | 32 ++-- .../Blueprint_ChangeFunctionParameterType.h | 160 ----------------- .../HalfBaked/Blueprint_Compile.h | 22 +-- .../BlueprintMCP/HalfBaked/Blueprint_Diff.h | 68 +++---- .../BlueprintMCP/HalfBaked/Blueprint_Dump.h | 57 +++--- .../HalfBaked/Blueprint_ListComponents.h | 30 ++-- .../Blueprint_ListEventDispatchers.h | 28 +-- .../HalfBaked/Blueprint_ListInterfaces.h | 18 +- .../HalfBaked/Blueprint_RefreshAllNodes.h | 34 ++-- .../HalfBaked/Blueprint_RemoveComponent.h | 30 ++-- .../Blueprint_RemoveFunctionParameter.h | 115 ------------ .../HalfBaked/Blueprint_RemoveInterface.h | 22 +-- .../HalfBaked/Blueprint_Reparent.h | 28 +-- .../BlueprintMCP/HalfBaked/Class_Search.h | 28 +-- .../HalfBaked/Class_ShowProperties.h | 26 +-- .../BlueprintMCP/HalfBaked/Enum_Create.h | 22 +-- .../HalfBaked/MaterialFunction_Create.h | 18 +- .../HalfBaked/StateMachine_AddState.h | 28 +-- .../HalfBaked/StateMachine_AddTransition.h | 26 +-- .../HalfBaked/StateMachine_RemoveState.h | 24 +-- .../HalfBaked/StateMachine_SetAnimation.h | 28 +-- .../HalfBaked/StateMachine_SetBlendSpace.h | 32 ++-- .../StateMachine_SetTransitionRule.h | 26 +-- .../BlueprintMCP/HalfBaked/Struct_Create.h | 30 ++-- .../BlueprintMCP/Handlers/Asset_Backup.h | 14 +- .../BlueprintMCP/Handlers/Asset_Delete.h | 22 +-- .../Handlers/Asset_FindReferences.h | 18 +- .../BlueprintMCP/Handlers/Asset_Rename.h | 18 +- .../BlueprintMCP/Handlers/Asset_Restore.h | 16 +- .../BlueprintMCP/Handlers/Asset_Search.h | 22 +-- .../Handlers/BlueprintVariable_Create.h | 28 +-- .../Handlers/BlueprintVariable_Delete.h | 16 +- .../Handlers/BlueprintVariable_Dump.h | 14 +- .../Handlers/BlueprintVariable_Modify.h | 26 +-- .../BlueprintMCP/Handlers/Blueprint_Create.h | 30 ++-- .../Handlers/Editor_ListOpenAssets.h | 12 +- .../BlueprintMCP/Handlers/Editor_OpenAsset.h | 16 +- .../Handlers/GraphNode_ChooseMenu.h | 22 +-- .../BlueprintMCP/Handlers/GraphNode_Create.h | 32 ++-- .../BlueprintMCP/Handlers/GraphNode_Delete.h | 20 +-- .../BlueprintMCP/Handlers/GraphNode_Dump.h | 16 +- .../Handlers/GraphNode_Duplicate.h | 24 +-- .../Handlers/GraphNode_GetComment.h | 18 +- .../Handlers/GraphNode_SearchTypes.h | 20 +-- .../BlueprintMCP/Handlers/GraphNode_SetArgs.h | 20 +-- .../Handlers/GraphNode_SetComment.h | 14 +- .../Handlers/GraphNode_SetDefaults.h | 40 ++--- .../Handlers/GraphNode_SetPositions.h | 22 +-- .../Handlers/GraphNode_ShowMenu.h | 20 +-- .../BlueprintMCP/Handlers/GraphPin_Connect.h | 30 ++-- .../Handlers/GraphPin_Disconnect.h | 34 ++-- .../Source/BlueprintMCP/Handlers/Graph_Dump.h | 20 +-- .../MaterialInstance_ClearParameter.h | 24 +-- .../Handlers/MaterialInstance_Create.h | 30 ++-- .../MaterialInstance_DumpParameters.h | 22 +-- .../Handlers/MaterialInstance_SetParameter.h | 32 ++-- .../BlueprintMCP/Handlers/Material_Compile.h | 18 +- .../BlueprintMCP/Handlers/Material_Create.h | 18 +- .../Handlers/Material_DumpParameters.h | 18 +- .../BlueprintMCP/Handlers/Property_Dump.h | 40 ++--- .../BlueprintMCP/Handlers/Property_Get.h | 22 +-- .../BlueprintMCP/Handlers/Property_Set.h | 32 ++-- .../BlueprintMCP/Handlers/ShowCommands.h | 42 ++--- .../BlueprintMCP/Handlers/TypeName_Search.h | 16 +- .../Source/BlueprintMCP/Handlers/UserManual.h | 8 +- .../BlueprintMCP/Private/BPVarEditor.cpp | 46 ++--- .../BlueprintMCP/Private/FunctionArgs.cpp | 24 +-- .../BlueprintMCP/Private/GraphExport.cpp | 80 ++++----- .../Private/HandlerCodingStandards.md | 16 +- .../BlueprintMCP/Private/HandlerIssues.md | 4 +- .../Source/BlueprintMCP/Private/MCPModule.cpp | 4 - .../Private/MaterialParameter.cpp | 26 +-- .../{MCPFetcher.cpp => WingFetcher.cpp} | 114 ++++++------ .../Private/{MCPJson.cpp => WingJson.cpp} | 48 ++--- .../{MCPNotifier.cpp => WingNotifier.cpp} | 6 +- .../{MCPProperty.cpp => WingProperty.cpp} | 70 ++++---- .../Private/{MCPServer.cpp => WingServer.cpp} | 72 ++++---- .../{MCPToolMenu.cpp => WingToolMenu.cpp} | 32 ++-- .../Private/{MCPTypes.cpp => WingTypes.cpp} | 74 ++++---- .../Private/{MCPUtils.cpp => WingUtils.cpp} | 166 +++++++++--------- ...CPCommandlet.cpp => WingmanCommandlet.cpp} | 12 +- .../BlueprintMCP/Private/WingmanModule.cpp | 4 + .../Private/{MCPModule.h => WingmanModule.h} | 2 +- .../Source/BlueprintMCP/Public/BPVarEditor.h | 6 +- .../Source/BlueprintMCP/Public/FunctionArgs.h | 2 +- .../Source/BlueprintMCP/Public/GraphExport.h | 6 +- .../Source/BlueprintMCP/Public/MCPProperty.h | 33 ---- .../BlueprintMCP/Public/MaterialParameter.h | 2 +- .../Public/{MCPFetcher.h => WingFetcher.h} | 36 ++-- .../Public/{MCPHandler.h => WingHandler.h} | 10 +- .../Public/{MCPJson.h => WingJson.h} | 10 +- .../Public/{MCPNotifier.h => WingNotifier.h} | 2 +- .../{MCPPackageMaker.h => WingPackageMaker.h} | 14 +- .../Source/BlueprintMCP/Public/WingProperty.h | 33 ++++ .../Public/{MCPServer.h => WingServer.h} | 28 +-- .../Public/{MCPToolMenu.h => WingToolMenu.h} | 4 +- .../Public/{MCPTypes.h => WingTypes.h} | 8 +- .../Public/{MCPUtils.h => WingUtils.h} | 2 +- .../{MCPCommandlet.h => WingmanCommandlet.h} | 6 +- tools/wing-rename.py | 67 +++++++ 111 files changed, 1519 insertions(+), 1871 deletions(-) delete mode 100644 Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_AddFunctionParameter.h delete mode 100644 Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_ChangeFunctionParameterType.h delete mode 100644 Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_RemoveFunctionParameter.h delete mode 100644 Plugins/BlueprintMCP/Source/BlueprintMCP/Private/MCPModule.cpp rename Plugins/BlueprintMCP/Source/BlueprintMCP/Private/{MCPFetcher.cpp => WingFetcher.cpp} (59%) rename Plugins/BlueprintMCP/Source/BlueprintMCP/Private/{MCPJson.cpp => WingJson.cpp} (63%) rename Plugins/BlueprintMCP/Source/BlueprintMCP/Private/{MCPNotifier.cpp => WingNotifier.cpp} (93%) rename Plugins/BlueprintMCP/Source/BlueprintMCP/Private/{MCPProperty.cpp => WingProperty.cpp} (61%) rename Plugins/BlueprintMCP/Source/BlueprintMCP/Private/{MCPServer.cpp => WingServer.cpp} (85%) rename Plugins/BlueprintMCP/Source/BlueprintMCP/Private/{MCPToolMenu.cpp => WingToolMenu.cpp} (86%) rename Plugins/BlueprintMCP/Source/BlueprintMCP/Private/{MCPTypes.cpp => WingTypes.cpp} (84%) rename Plugins/BlueprintMCP/Source/BlueprintMCP/Private/{MCPUtils.cpp => WingUtils.cpp} (80%) rename Plugins/BlueprintMCP/Source/BlueprintMCP/Private/{MCPCommandlet.cpp => WingmanCommandlet.cpp} (65%) create mode 100644 Plugins/BlueprintMCP/Source/BlueprintMCP/Private/WingmanModule.cpp rename Plugins/BlueprintMCP/Source/BlueprintMCP/Private/{MCPModule.h => WingmanModule.h} (77%) delete mode 100644 Plugins/BlueprintMCP/Source/BlueprintMCP/Public/MCPProperty.h rename Plugins/BlueprintMCP/Source/BlueprintMCP/Public/{MCPFetcher.h => WingFetcher.h} (81%) rename Plugins/BlueprintMCP/Source/BlueprintMCP/Public/{MCPHandler.h => WingHandler.h} (89%) rename Plugins/BlueprintMCP/Source/BlueprintMCP/Public/{MCPJson.h => WingJson.h} (58%) rename Plugins/BlueprintMCP/Source/BlueprintMCP/Public/{MCPNotifier.h => WingNotifier.h} (95%) rename Plugins/BlueprintMCP/Source/BlueprintMCP/Public/{MCPPackageMaker.h => WingPackageMaker.h} (80%) create mode 100644 Plugins/BlueprintMCP/Source/BlueprintMCP/Public/WingProperty.h rename Plugins/BlueprintMCP/Source/BlueprintMCP/Public/{MCPServer.h => WingServer.h} (75%) rename Plugins/BlueprintMCP/Source/BlueprintMCP/Public/{MCPToolMenu.h => WingToolMenu.h} (96%) rename Plugins/BlueprintMCP/Source/BlueprintMCP/Public/{MCPTypes.h => WingTypes.h} (94%) rename Plugins/BlueprintMCP/Source/BlueprintMCP/Public/{MCPUtils.h => WingUtils.h} (99%) rename Plugins/BlueprintMCP/Source/BlueprintMCP/Public/{MCPCommandlet.h => WingmanCommandlet.h} (76%) create mode 100644 tools/wing-rename.py diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/AnimBlueprint_Create.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/AnimBlueprint_Create.h index 5a28aee9..d79d2d6c 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/AnimBlueprint_Create.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/AnimBlueprint_Create.h @@ -1,11 +1,11 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPUtils.h" -#include "MCPPackageMaker.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingUtils.h" +#include "WingPackageMaker.h" #include "Animation/AnimBlueprint.h" #include "Animation/AnimBlueprintGeneratedClass.h" #include "Animation/AnimInstance.h" @@ -19,7 +19,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_AnimBlueprint_Create : public UObject, public IMCPHandler +class UWing_AnimBlueprint_Create : public UObject, public IWingHandler { GENERATED_BODY() @@ -40,11 +40,11 @@ public: virtual void Handle() override { - MCPPackageMaker Maker(AssetPath); + WingPackageMaker Maker(AssetPath); if (!Maker.Ok()) return; // Resolve skeleton - MCPFetcher SkeletonFetcher; + WingFetcher SkeletonFetcher; USkeleton* SkeletonObj = SkeletonFetcher.Asset(Skeleton).Cast(); if (!SkeletonObj) return; @@ -55,7 +55,7 @@ public: UClass* Found = nullptr; for (TObjectIterator It; It; ++It) { - if (It->IsChildOf(UAnimInstance::StaticClass()) && MCPUtils::Identifies(ParentClass, *It)) + if (It->IsChildOf(UAnimInstance::StaticClass()) && WingUtils::Identifies(ParentClass, *It)) { Found = *It; break; @@ -63,7 +63,7 @@ public: } if (!Found) { - UMCPServer::Printf(TEXT("ERROR: Parent class '%s' not found (must derive from AnimInstance)\n"), *ParentClass); + UWingServer::Printf(TEXT("ERROR: Parent class '%s' not found (must derive from AnimInstance)\n"), *ParentClass); return; } ParentClassObj = Found; @@ -84,7 +84,7 @@ public: if (!NewAnimBP) { - UMCPServer::Print(TEXT("ERROR: FKismetEditorUtilities::CreateBlueprint returned null\n")); + UWingServer::Print(TEXT("ERROR: FKismetEditorUtilities::CreateBlueprint returned null\n")); return; } @@ -93,16 +93,16 @@ public: // Compile and save FKismetEditorUtilities::CompileBlueprint(NewAnimBP); - bool bSaved = MCPUtils::SaveBlueprintPackage(NewAnimBP); + bool bSaved = WingUtils::SaveBlueprintPackage(NewAnimBP); - UMCPServer::Printf(TEXT("Created: %s\n"), *AssetPath); - UMCPServer::Printf(TEXT("ParentClass: %s\n"), *MCPUtils::FormatName(ParentClassObj)); - UMCPServer::Printf(TEXT("Saved: %s\n"), bSaved ? TEXT("true") : TEXT("false")); + UWingServer::Printf(TEXT("Created: %s\n"), *AssetPath); + UWingServer::Printf(TEXT("ParentClass: %s\n"), *WingUtils::FormatName(ParentClassObj)); + UWingServer::Printf(TEXT("Saved: %s\n"), bSaved ? TEXT("true") : TEXT("false")); - TArray Graphs = MCPUtils::AllGraphs(NewAnimBP); + TArray Graphs = WingUtils::AllGraphs(NewAnimBP); for (UEdGraph* Graph : Graphs) { - UMCPServer::Printf(TEXT("Graph: %s\n"), *MCPUtils::FormatName(Graph)); + UWingServer::Printf(TEXT("Graph: %s\n"), *WingUtils::FormatName(Graph)); } } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/AnimBlueprint_ListSlotNames.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/AnimBlueprint_ListSlotNames.h index 8c910093..7c2d5851 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/AnimBlueprint_ListSlotNames.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/AnimBlueprint_ListSlotNames.h @@ -1,10 +1,10 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingUtils.h" #include "Animation/AnimBlueprint.h" #include "AnimGraphNode_Base.h" #include "AnimBlueprint_ListSlotNames.generated.h" @@ -15,7 +15,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_AnimBlueprint_ListSlotNames : public UObject, public IMCPHandler +class UWing_AnimBlueprint_ListSlotNames : public UObject, public IWingHandler { GENERATED_BODY() @@ -30,13 +30,13 @@ public: virtual void Handle() override { - MCPFetcher F; + WingFetcher F; UAnimBlueprint* AnimBP = F.Asset(Blueprint).Cast(); if (!AnimBP) return; // Walk all anim nodes to collect slot names TSet SlotNames; - for (UAnimGraphNode_Base* AnimNode : MCPUtils::AllNodes(AnimBP)) + for (UAnimGraphNode_Base* AnimNode : WingUtils::AllNodes(AnimBP)) { for (TFieldIterator PropIt(AnimNode->GetClass()); PropIt; ++PropIt) { @@ -53,12 +53,12 @@ public: for (const FString& Slot : SlotNames) { - UMCPServer::Printf(TEXT("%s\n"), *Slot); + UWingServer::Printf(TEXT("%s\n"), *Slot); } if (SlotNames.Num() == 0) { - UMCPServer::Print(TEXT("No animation slot names found.\n")); + UWingServer::Print(TEXT("No animation slot names found.\n")); } } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/AnimBlueprint_ListSyncGroups.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/AnimBlueprint_ListSyncGroups.h index 01852e94..c950e927 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/AnimBlueprint_ListSyncGroups.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/AnimBlueprint_ListSyncGroups.h @@ -1,10 +1,10 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingUtils.h" #include "Animation/AnimBlueprint.h" #include "AnimGraphNode_Base.h" #include "AnimBlueprint_ListSyncGroups.generated.h" @@ -15,7 +15,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_AnimBlueprint_ListSyncGroups : public UObject, public IMCPHandler +class UWing_AnimBlueprint_ListSyncGroups : public UObject, public IWingHandler { GENERATED_BODY() @@ -30,13 +30,13 @@ public: virtual void Handle() override { - MCPFetcher F; + WingFetcher F; UAnimBlueprint* AnimBP = F.Walk(Blueprint).Cast(); if (!AnimBP) return; // Walk all anim nodes to collect sync group names TSet SyncGroupNames; - for (UAnimGraphNode_Base* AnimNode : MCPUtils::AllNodes(AnimBP)) + for (UAnimGraphNode_Base* AnimNode : WingUtils::AllNodes(AnimBP)) { for (TFieldIterator PropIt(AnimNode->GetClass()); PropIt; ++PropIt) { @@ -53,13 +53,13 @@ public: if (SyncGroupNames.Num() == 0) { - UMCPServer::Print(TEXT("No sync groups found.\n")); + UWingServer::Print(TEXT("No sync groups found.\n")); return; } for (const FString& Group : SyncGroupNames) { - UMCPServer::Printf(TEXT("%s\n"), *Group); + UWingServer::Printf(TEXT("%s\n"), *Group); } } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/AnimBlueprint_SetBlendSpaceSamples.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/AnimBlueprint_SetBlendSpaceSamples.h index b874fb2c..d6c683a9 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/AnimBlueprint_SetBlendSpaceSamples.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/AnimBlueprint_SetBlendSpaceSamples.h @@ -1,11 +1,11 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPJson.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingJson.h" +#include "WingUtils.h" #include "Animation/AnimSequence.h" #include "Animation/BlendSpace.h" #include "AnimBlueprint_SetBlendSpaceSamples.generated.h" @@ -31,7 +31,7 @@ struct FBlendSpaceSampleEntry }; UCLASS() -class UMCP_AnimBlueprint_SetBlendSpaceSamples : public UObject, public IMCPHandler +class UWing_AnimBlueprint_SetBlendSpaceSamples : public UObject, public IWingHandler { GENERATED_BODY() @@ -58,7 +58,7 @@ public: float AxisYMax = 0.0f; UPROPERTY(meta=(Optional, Description="Array of sample points, each with animationAsset, x, y")) - FMCPJsonArray Samples; + FWingJsonArray Samples; virtual FString GetDescription() const override { @@ -69,7 +69,7 @@ public: virtual void Handle() override { // Load the blend space - MCPFetcher F; + WingFetcher F; UBlendSpace* BS = F.Asset(BlendSpace).Cast(); if (!BS) return; @@ -102,12 +102,12 @@ public: for (const TSharedPtr& SampleVal : Samples.Array) { FBlendSpaceSampleEntry Entry; - if (!MCPJson::PopulateFromJson(FBlendSpaceSampleEntry::StaticStruct(), &Entry, SampleVal)) return; + if (!WingJson::PopulateFromJson(FBlendSpaceSampleEntry::StaticStruct(), &Entry, SampleVal)) return; UAnimSequence* AnimSeq = nullptr; if (!Entry.AnimationAsset.IsEmpty()) { - MCPFetcher F2; + WingFetcher F2; AnimSeq = F2.Asset(Entry.AnimationAsset).Cast(); if (!AnimSeq) return; } @@ -127,12 +127,12 @@ public: BS->ValidateSampleData(); // Save - bool bSaved = MCPUtils::SaveGenericPackage(BS); + bool bSaved = WingUtils::SaveGenericPackage(BS); - UMCPServer::Printf(TEXT("Set %d samples on %s\n"), SamplesSet, *MCPUtils::FormatName(BS)); + UWingServer::Printf(TEXT("Set %d samples on %s\n"), SamplesSet, *WingUtils::FormatName(BS)); if (!bSaved) { - UMCPServer::Print(TEXT("WARNING: package save failed\n")); + UWingServer::Print(TEXT("WARNING: package save failed\n")); } } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/BlendSpace_Create.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/BlendSpace_Create.h index 35b8f4eb..1905c680 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/BlendSpace_Create.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/BlendSpace_Create.h @@ -1,11 +1,11 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPUtils.h" -#include "MCPPackageMaker.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingUtils.h" +#include "WingPackageMaker.h" #include "Animation/Skeleton.h" #include "Animation/BlendSpace.h" #include "BlendSpace_Create.generated.h" @@ -16,7 +16,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_BlendSpace_Create : public UObject, public IMCPHandler +class UWing_BlendSpace_Create : public UObject, public IWingHandler { GENERATED_BODY() @@ -34,11 +34,11 @@ public: virtual void Handle() override { - MCPPackageMaker Maker(AssetPath); + WingPackageMaker Maker(AssetPath); if (!Maker.Ok()) return; // Resolve skeleton. - MCPFetcher SkeletonFetcher; + WingFetcher SkeletonFetcher; USkeleton* SkeletonObj = SkeletonFetcher.Asset(Skeleton).Cast(); if (!SkeletonObj) return; @@ -47,7 +47,7 @@ public: UBlendSpace* NewBS = NewObject(Maker.Package(), FName(*Maker.Name()), RF_Public | RF_Standalone); if (!NewBS) { - UMCPServer::Print(TEXT("ERROR: Failed to create Blend Space object\n")); + UWingServer::Print(TEXT("ERROR: Failed to create Blend Space object\n")); return; } @@ -55,11 +55,11 @@ public: NewBS->SetSkeleton(SkeletonObj); NewBS->MarkPackageDirty(); - bool bSaved = MCPUtils::SaveGenericPackage(NewBS); + bool bSaved = WingUtils::SaveGenericPackage(NewBS); - UMCPServer::Printf(TEXT("Created %s\n"), *NewBS->GetPathName()); - UMCPServer::Printf(TEXT("Skeleton: %s\n"), *SkeletonObj->GetPathName()); + UWingServer::Printf(TEXT("Created %s\n"), *NewBS->GetPathName()); + UWingServer::Printf(TEXT("Skeleton: %s\n"), *SkeletonObj->GetPathName()); if (!bSaved) - UMCPServer::Print(TEXT("WARNING: Package save failed\n")); + UWingServer::Print(TEXT("WARNING: Package save failed\n")); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/BlueprintGraph_Create.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/BlueprintGraph_Create.h index 01357cfe..b86b00f9 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/BlueprintGraph_Create.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/BlueprintGraph_Create.h @@ -1,10 +1,10 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingUtils.h" #include "Engine/Blueprint.h" #include "EdGraph/EdGraph.h" #include "EdGraph/EdGraphNode.h" @@ -19,7 +19,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_BlueprintGraph_Create : public UObject, public IMCPHandler +class UWing_BlueprintGraph_Create : public UObject, public IWingHandler { GENERATED_BODY() @@ -42,29 +42,29 @@ public: { if (GraphType != TEXT("function") && GraphType != TEXT("macro") && GraphType != TEXT("customEvent")) { - UMCPServer::Printf(TEXT("ERROR: Invalid GraphType '%s'. Valid values: function, macro, customEvent\n"), *GraphType); + UWingServer::Printf(TEXT("ERROR: Invalid GraphType '%s'. Valid values: function, macro, customEvent\n"), *GraphType); return; } - MCPFetcher F; + WingFetcher F; UBlueprint* BP = F.Walk(Blueprint).Cast(); if (!BP) return; // Check graph name uniqueness - if (!MCPUtils::AllGraphsNamed(BP, Graph).IsEmpty()) + if (!WingUtils::AllGraphsNamed(BP, Graph).IsEmpty()) { - UMCPServer::Printf(TEXT("ERROR: A graph named '%s' already exists in %s\n"), *Graph, *MCPUtils::FormatName(BP)); + UWingServer::Printf(TEXT("ERROR: A graph named '%s' already exists in %s\n"), *Graph, *WingUtils::FormatName(BP)); return; } // For custom events, also check for existing custom events with the same name if (GraphType == TEXT("customEvent")) { - for (UK2Node_CustomEvent* CE : MCPUtils::AllNodes(BP)) + for (UK2Node_CustomEvent* CE : WingUtils::AllNodes(BP)) { if (CE->CustomFunctionName == FName(*Graph)) { - UMCPServer::Printf(TEXT("ERROR: A custom event named '%s' already exists in %s\n"), *Graph, *MCPUtils::FormatName(BP)); + UWingServer::Printf(TEXT("ERROR: A custom event named '%s' already exists in %s\n"), *Graph, *WingUtils::FormatName(BP)); return; } } @@ -76,11 +76,11 @@ public: UEdGraph::StaticClass(), UEdGraphSchema_K2::StaticClass()); if (!NewGraph) { - UMCPServer::Print(TEXT("ERROR: Failed to create function graph\n")); + UWingServer::Print(TEXT("ERROR: Failed to create function graph\n")); return; } FBlueprintEditorUtils::AddFunctionGraph(BP, NewGraph, /*bIsUserCreated=*/true, /*SignatureFromObject=*/static_cast(nullptr)); - UMCPServer::Printf(TEXT("Created function graph: %s\n"), *MCPUtils::FormatName(NewGraph)); + UWingServer::Printf(TEXT("Created function graph: %s\n"), *WingUtils::FormatName(NewGraph)); } else if (GraphType == TEXT("macro")) { @@ -88,11 +88,11 @@ public: UEdGraph::StaticClass(), UEdGraphSchema_K2::StaticClass()); if (!NewGraph) { - UMCPServer::Print(TEXT("ERROR: Failed to create macro graph\n")); + UWingServer::Print(TEXT("ERROR: Failed to create macro graph\n")); return; } FBlueprintEditorUtils::AddMacroGraph(BP, NewGraph, /*bIsUserCreated=*/true, /*SignatureFromClass=*/nullptr); - UMCPServer::Printf(TEXT("Created macro graph: %s\n"), *MCPUtils::FormatName(NewGraph)); + UWingServer::Printf(TEXT("Created macro graph: %s\n"), *WingUtils::FormatName(NewGraph)); } else // customEvent { @@ -101,7 +101,7 @@ public: EventGraph = BP->UbergraphPages[0]; if (!EventGraph) { - UMCPServer::Print(TEXT("ERROR: Blueprint has no EventGraph to add a custom event to\n")); + UWingServer::Print(TEXT("ERROR: Blueprint has no EventGraph to add a custom event to\n")); return; } @@ -112,9 +112,9 @@ public: NewEvent->CreateNewGuid(); NewEvent->PostPlacedNewNode(); NewEvent->AllocateDefaultPins(); - UMCPServer::Printf(TEXT("Created custom event: %s\n"), *MCPUtils::FormatName(NewEvent)); + UWingServer::Printf(TEXT("Created custom event: %s\n"), *WingUtils::FormatName(NewEvent)); } - MCPUtils::SaveBlueprintPackage(BP); + WingUtils::SaveBlueprintPackage(BP); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/BlueprintGraph_Delete.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/BlueprintGraph_Delete.h index 8142c6b5..a78ea022 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/BlueprintGraph_Delete.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/BlueprintGraph_Delete.h @@ -1,10 +1,10 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingUtils.h" #include "Engine/Blueprint.h" #include "EdGraph/EdGraph.h" #include "Kismet2/BlueprintEditorUtils.h" @@ -16,7 +16,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_BlueprintGraph_Delete : public UObject, public IMCPHandler +class UWing_BlueprintGraph_Delete : public UObject, public IWingHandler { GENERATED_BODY() @@ -34,7 +34,7 @@ public: virtual void Handle() override { - MCPFetcher F; + WingFetcher F; F.Walk(Blueprint); if (!F.Ok()) return; @@ -47,7 +47,7 @@ public: for (UEdGraph* G : BP->FunctionGraphs) { - if (G && MCPUtils::Identifies(Graph, G)) + if (G && WingUtils::Identifies(Graph, G)) { TargetGraph = G; GraphType = TEXT("function"); @@ -58,7 +58,7 @@ public: { for (UEdGraph* G : BP->MacroGraphs) { - if (G && MCPUtils::Identifies(Graph, G)) + if (G && WingUtils::Identifies(Graph, G)) { TargetGraph = G; GraphType = TEXT("macro"); @@ -72,25 +72,25 @@ public: { for (UEdGraph* G : BP->UbergraphPages) { - if (G && MCPUtils::Identifies(Graph, G)) + if (G && WingUtils::Identifies(Graph, G)) { - UMCPServer::Printf(TEXT("ERROR: Cannot delete UbergraphPage '%s'. EventGraph pages cannot be deleted.\n"), - *MCPUtils::FormatName(G)); + UWingServer::Printf(TEXT("ERROR: Cannot delete UbergraphPage '%s'. EventGraph pages cannot be deleted.\n"), + *WingUtils::FormatName(G)); return; } } - UMCPServer::Printf(TEXT("ERROR: Graph '%s' not found in blueprint %s\n"), - *Graph, *MCPUtils::FormatName(BP)); + UWingServer::Printf(TEXT("ERROR: Graph '%s' not found in blueprint %s\n"), + *Graph, *WingUtils::FormatName(BP)); return; } // Remove the graph - FString GraphName = MCPUtils::FormatName(TargetGraph); + FString GraphName = WingUtils::FormatName(TargetGraph); FBlueprintEditorUtils::RemoveGraph(BP, TargetGraph, EGraphRemoveFlags::Default); - bool bSaved = MCPUtils::SaveBlueprintPackage(BP); + bool bSaved = WingUtils::SaveBlueprintPackage(BP); - UMCPServer::Printf(TEXT("Deleted %s graph %s\n"), *GraphType, *GraphName); + UWingServer::Printf(TEXT("Deleted %s graph %s\n"), *GraphType, *GraphName); if (!bSaved) - UMCPServer::Print(TEXT("WARNING: Package save failed.\n")); + UWingServer::Print(TEXT("WARNING: Package save failed.\n")); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/BlueprintGraph_Rename.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/BlueprintGraph_Rename.h index 97e29be8..a2da48fd 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/BlueprintGraph_Rename.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/BlueprintGraph_Rename.h @@ -1,10 +1,10 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingUtils.h" #include "Engine/Blueprint.h" #include "EdGraph/EdGraph.h" #include "Kismet2/BlueprintEditorUtils.h" @@ -16,7 +16,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_BlueprintGraph_Rename : public UObject, public IMCPHandler +class UWing_BlueprintGraph_Rename : public UObject, public IWingHandler { GENERATED_BODY() @@ -34,22 +34,22 @@ public: virtual void Handle() override { - MCPFetcher F; + WingFetcher F; UEdGraph* TargetGraph = F.Walk(Graph).Cast(); if (!TargetGraph) return; UBlueprint* BP = Cast(TargetGraph->GetOuter()); if (!BP) { - UMCPServer::Printf(TEXT("Error: Graph '%s' is not owned by a Blueprint.\n"), *Graph); + UWingServer::Printf(TEXT("Error: Graph '%s' is not owned by a Blueprint.\n"), *Graph); return; } // Check if it's an UbergraphPage -- disallow rename if (BP->UbergraphPages.Contains(TargetGraph)) { - UMCPServer::Printf(TEXT("Error: Cannot rename UbergraphPage '%s'. EventGraph pages cannot be renamed.\n"), - *MCPUtils::FormatName(TargetGraph)); + UWingServer::Printf(TEXT("Error: Cannot rename UbergraphPage '%s'. EventGraph pages cannot be renamed.\n"), + *WingUtils::FormatName(TargetGraph)); return; } @@ -58,27 +58,27 @@ public: bool bIsMacro = BP->MacroGraphs.Contains(TargetGraph); if (!bIsFunction && !bIsMacro) { - UMCPServer::Printf(TEXT("Error: Graph '%s' is not a function or macro graph.\n"), - *MCPUtils::FormatName(TargetGraph)); + UWingServer::Printf(TEXT("Error: Graph '%s' is not a function or macro graph.\n"), + *WingUtils::FormatName(TargetGraph)); return; } // Check for name collision - for (UEdGraph* Existing : MCPUtils::AllGraphsNamed(BP, NewName)) + for (UEdGraph* Existing : WingUtils::AllGraphsNamed(BP, NewName)) { if (Existing != TargetGraph) { - UMCPServer::Printf(TEXT("Error: A graph named '%s' already exists in '%s'.\n"), - *NewName, *MCPUtils::FormatName(BP)); + UWingServer::Printf(TEXT("Error: A graph named '%s' already exists in '%s'.\n"), + *NewName, *WingUtils::FormatName(BP)); return; } } FBlueprintEditorUtils::RenameGraph(TargetGraph, NewName); - MCPUtils::SaveBlueprintPackage(BP); + WingUtils::SaveBlueprintPackage(BP); - UMCPServer::Printf(TEXT("Renamed to %s %s\n"), + UWingServer::Printf(TEXT("Renamed to %s %s\n"), bIsFunction ? TEXT("function") : TEXT("macro"), - *MCPUtils::FormatName(TargetGraph)); + *WingUtils::FormatName(TargetGraph)); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_AddComponent.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_AddComponent.h index aed86b71..1db638b2 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_AddComponent.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_AddComponent.h @@ -1,10 +1,10 @@ #pragma once #include "CoreMinimal.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPUtils.h" -#include "MCPServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingUtils.h" +#include "WingServer.h" #include "Engine/Blueprint.h" #include "Engine/SimpleConstructionScript.h" #include "Engine/SCS_Node.h" @@ -17,7 +17,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_Blueprint_AddComponent : public UObject, public IMCPHandler +class UWing_Blueprint_AddComponent : public UObject, public IWingHandler { GENERATED_BODY() @@ -42,15 +42,15 @@ public: virtual void Handle() override { - MCPFetcher F; + WingFetcher F; UBlueprint* BP = F.Asset(Blueprint).Cast(); if (!BP) return; USimpleConstructionScript* SCS = BP->SimpleConstructionScript; if (!SCS) { - UMCPServer::Printf(TEXT("ERROR: Blueprint '%s' does not have a SimpleConstructionScript (not an Actor Blueprint)\n"), - *MCPUtils::FormatName(BP)); + UWingServer::Printf(TEXT("ERROR: Blueprint '%s' does not have a SimpleConstructionScript (not an Actor Blueprint)\n"), + *WingUtils::FormatName(BP)); return; } @@ -59,19 +59,19 @@ public: for (USCS_Node* Existing : ExistingNodes) { if (Existing && Existing->ComponentTemplate && - MCPUtils::Identifies(Component, Existing->ComponentTemplate)) + WingUtils::Identifies(Component, Existing->ComponentTemplate)) { - UMCPServer::Printf(TEXT("ERROR: A component named '%s' already exists in Blueprint '%s'\n"), - *Component, *MCPUtils::FormatName(BP)); + UWingServer::Printf(TEXT("ERROR: A component named '%s' already exists in Blueprint '%s'\n"), + *Component, *WingUtils::FormatName(BP)); return; } } // Resolve the component class by name - UClass* ComponentClassObj = MCPUtils::FindClassByName(ComponentClass); + UClass* ComponentClassObj = WingUtils::FindClassByName(ComponentClass); if (!ComponentClassObj || !ComponentClassObj->IsChildOf(UActorComponent::StaticClass())) { - UMCPServer::Printf(TEXT("ERROR: Component class '%s' not found or is not a subclass of UActorComponent. " + UWingServer::Printf(TEXT("ERROR: Component class '%s' not found or is not a subclass of UActorComponent. " "Common classes: StaticMeshComponent, SkeletalMeshComponent, AudioComponent, " "SceneComponent, BoxCollisionComponent, SphereCollisionComponent, CapsuleComponent, " "ArrowComponent, ChildActorComponent, SpotLightComponent, PointLightComponent, " @@ -87,7 +87,7 @@ public: for (USCS_Node* Node : ExistingNodes) { if (Node && Node->ComponentTemplate && - MCPUtils::Identifies(ParentComponent, Node->ComponentTemplate)) + WingUtils::Identifies(ParentComponent, Node->ComponentTemplate)) { ParentSCSNode = Node; break; @@ -96,8 +96,8 @@ public: if (!ParentSCSNode) { - UMCPServer::Printf(TEXT("ERROR: Parent component '%s' not found in Blueprint '%s'\n"), - *ParentComponent, *MCPUtils::FormatName(BP)); + UWingServer::Printf(TEXT("ERROR: Parent component '%s' not found in Blueprint '%s'\n"), + *ParentComponent, *WingUtils::FormatName(BP)); return; } } @@ -106,8 +106,8 @@ public: USCS_Node* NewNode = SCS->CreateNode(ComponentClassObj, FName(*Component)); if (!NewNode) { - UMCPServer::Printf(TEXT("ERROR: Failed to create SCS node for component '%s' with class '%s'\n"), - *Component, *MCPUtils::FormatName(ComponentClassObj)); + UWingServer::Printf(TEXT("ERROR: Failed to create SCS node for component '%s' with class '%s'\n"), + *Component, *WingUtils::FormatName(ComponentClassObj)); return; } @@ -121,15 +121,15 @@ public: SCS->AddNode(NewNode); } - bool bSaved = MCPUtils::SaveBlueprintPackage(BP); + bool bSaved = WingUtils::SaveBlueprintPackage(BP); - UMCPServer::Printf(TEXT("Added component %s (%s)"), - *MCPUtils::FormatName(NewNode->ComponentTemplate), - *MCPUtils::FormatName(ComponentClassObj)); + UWingServer::Printf(TEXT("Added component %s (%s)"), + *WingUtils::FormatName(NewNode->ComponentTemplate), + *WingUtils::FormatName(ComponentClassObj)); if (ParentSCSNode) { - UMCPServer::Printf(TEXT(" under %s"), *MCPUtils::FormatName(ParentSCSNode->ComponentTemplate)); + UWingServer::Printf(TEXT(" under %s"), *WingUtils::FormatName(ParentSCSNode->ComponentTemplate)); } - UMCPServer::Printf(TEXT("\nSaved: %s\n"), bSaved ? TEXT("true") : TEXT("false")); + UWingServer::Printf(TEXT("\nSaved: %s\n"), bSaved ? TEXT("true") : TEXT("false")); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_AddEventDispatcher.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_AddEventDispatcher.h index e5baf7fc..8aa54c63 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_AddEventDispatcher.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_AddEventDispatcher.h @@ -1,12 +1,12 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPTypes.h" -#include "MCPFetcher.h" -#include "MCPJson.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingTypes.h" +#include "WingFetcher.h" +#include "WingJson.h" +#include "WingUtils.h" #include "Engine/Blueprint.h" #include "EdGraph/EdGraph.h" #include "EdGraph/EdGraphPin.h" @@ -33,7 +33,7 @@ struct FDispatcherParamEntry }; UCLASS() -class UMCP_Blueprint_AddEventDispatcher : public UObject, public IMCPHandler +class UWing_Blueprint_AddEventDispatcher : public UObject, public IWingHandler { GENERATED_BODY() @@ -45,7 +45,7 @@ public: FString DispatcherName; UPROPERTY(meta=(Optional, Description="Array of parameter objects, each with 'name' and 'type' fields")) - FMCPJsonArray Parameters; + FWingJsonArray Parameters; virtual FString GetDescription() const override { @@ -54,7 +54,7 @@ public: virtual void Handle() override { - MCPFetcher F; + WingFetcher F; UBlueprint* BP = F.Walk(Blueprint).Cast(); if (!BP) return; @@ -65,15 +65,15 @@ public: { if (Var.VarName == DispatcherFName) { - UMCPServer::Printf(TEXT("Error: A variable or dispatcher named '%s' already exists.\n"), *DispatcherName); + UWingServer::Printf(TEXT("Error: A variable or dispatcher named '%s' already exists.\n"), *DispatcherName); return; } } // Check against existing graphs (functions, macros, etc.) - if (!MCPUtils::AllGraphsNamed(BP, DispatcherName).IsEmpty()) + if (!WingUtils::AllGraphsNamed(BP, DispatcherName).IsEmpty()) { - UMCPServer::Printf(TEXT("Error: A graph named '%s' already exists.\n"), *DispatcherName); + UWingServer::Printf(TEXT("Error: A graph named '%s' already exists.\n"), *DispatcherName); return; } @@ -82,7 +82,7 @@ public: DelegateType.PinCategory = UEdGraphSchema_K2::PC_MCDelegate; if (!FBlueprintEditorUtils::AddMemberVariable(BP, DispatcherFName, DelegateType)) { - UMCPServer::Printf(TEXT("Error: Failed to add delegate variable for '%s'.\n"), *DispatcherName); + UWingServer::Printf(TEXT("Error: Failed to add delegate variable for '%s'.\n"), *DispatcherName); return; } @@ -93,7 +93,7 @@ public: UEdGraph::StaticClass(), UEdGraphSchema_K2::StaticClass()); if (!SigGraph) { - UMCPServer::Print(TEXT("Error: Failed to create delegate signature graph.\n")); + UWingServer::Print(TEXT("Error: Failed to create delegate signature graph.\n")); return; } @@ -110,7 +110,7 @@ public: if (Parameters.Array.Num() > 0) { UK2Node_EditablePinBase* EntryNode = nullptr; - for (UK2Node_FunctionEntry* FE : MCPUtils::AllNodes(SigGraph)) + for (UK2Node_FunctionEntry* FE : WingUtils::AllNodes(SigGraph)) { EntryNode = FE; break; @@ -118,19 +118,19 @@ public: if (!EntryNode) { - MCPUtils::SaveBlueprintPackage(BP); - UMCPServer::Print(TEXT("Error: Event dispatcher created but entry node not found — parameters could not be added.\n")); + WingUtils::SaveBlueprintPackage(BP); + UWingServer::Print(TEXT("Error: Event dispatcher created but entry node not found — parameters could not be added.\n")); return; } for (const TSharedPtr& ParamVal : Parameters.Array) { FDispatcherParamEntry Entry; - if (!MCPJson::PopulateFromJson(FDispatcherParamEntry::StaticStruct(), &Entry, ParamVal)) return; + if (!WingJson::PopulateFromJson(FDispatcherParamEntry::StaticStruct(), &Entry, ParamVal)) return; if (Entry.Name.IsEmpty() || Entry.Type.IsEmpty()) continue; FEdGraphPinType PinType; - if (!UMCPTypes::TextToType(Entry.Type, PinType)) + if (!UWingTypes::TextToType(Entry.Type, PinType)) return; EntryNode->CreateUserDefinedPin(FName(*Entry.Name), PinType, EGPD_Output); @@ -138,11 +138,11 @@ public: } } - MCPUtils::SaveBlueprintPackage(BP); + WingUtils::SaveBlueprintPackage(BP); - UMCPServer::Printf(TEXT("Created event dispatcher '%s'"), *DispatcherName); + UWingServer::Printf(TEXT("Created event dispatcher '%s'"), *DispatcherName); if (ParamCount > 0) - UMCPServer::Printf(TEXT(" with %d parameter(s)"), ParamCount); - UMCPServer::Print(TEXT(".\n")); + UWingServer::Printf(TEXT(" with %d parameter(s)"), ParamCount); + UWingServer::Print(TEXT(".\n")); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_AddFunctionParameter.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_AddFunctionParameter.h deleted file mode 100644 index 6a65e028..00000000 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_AddFunctionParameter.h +++ /dev/null @@ -1,143 +0,0 @@ -#pragma once - -#include "CoreMinimal.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPTypes.h" -#include "MCPUtils.h" -#include "MCPServer.h" -#include "Engine/Blueprint.h" -#include "EdGraph/EdGraph.h" -#include "EdGraph/EdGraphPin.h" -#include "K2Node_FunctionEntry.h" -#include "K2Node_CustomEvent.h" -#include "K2Node_EditablePinBase.h" -#include "Kismet2/BlueprintEditorUtils.h" -#include "Blueprint_AddFunctionParameter.generated.h" - - -// --------------------------------------------------------------------------- -// --------------------------------------------------------------------------- -// --------------------------------------------------------------------------- - -UCLASS() -class UMCP_Blueprint_AddFunctionParameter : public UObject, public IMCPHandler -{ - GENERATED_BODY() - -public: - UPROPERTY(meta=(Description="Blueprint package path")) - FString Blueprint; - - UPROPERTY(meta=(Description="Name of the function, custom event, or event dispatcher")) - FString FunctionName; - - UPROPERTY(meta=(Description="Name for the new parameter")) - FString ParamName; - - UPROPERTY(meta=(Description="Type for the new parameter (e.g. 'Float', 'Vector', 'MyStruct')")) - FString ParamType; - - virtual FString GetDescription() const override - { - return TEXT("Add a new parameter to a function, custom event, or event dispatcher in a Blueprint."); - } - - virtual void Handle() override - { - MCPFetcher F; - UBlueprint* BP = F.Asset(Blueprint).Cast(); - if (!BP) return; - - // Resolve param type - FEdGraphPinType PinType; - if (!UMCPTypes::TextToType(ParamType, PinType)) - return; - - // Find the entry node using 3 strategies - UK2Node_EditablePinBase* EntryNode = nullptr; - FString NodeType; - - // Strategy 1: K2Node_FunctionEntry in function graphs - for (UK2Node_FunctionEntry* FE : MCPUtils::AllNodes(BP)) - { - UEdGraph* FEGraph = FE->GetGraph(); - if (!MCPUtils::Identifies(FunctionName, FEGraph)) continue; - // Skip delegate signature graphs (handled in Strategy 3) - if (BP->DelegateSignatureGraphs.Contains(FEGraph)) continue; - - EntryNode = FE; - NodeType = TEXT("FunctionEntry"); - break; - } - - // Strategy 2: K2Node_CustomEvent with matching CustomFunctionName - if (!EntryNode) - { - for (UK2Node_CustomEvent* CE : MCPUtils::AllNodes(BP)) - { - if (CE->CustomFunctionName.ToString().Equals(FunctionName, ESearchCase::IgnoreCase)) - { - EntryNode = CE; - NodeType = TEXT("CustomEvent"); - break; - } - } - } - - // Strategy 3: K2Node_FunctionEntry in DelegateSignatureGraphs - if (!EntryNode) - { - for (UK2Node_FunctionEntry* FE : MCPUtils::AllNodes(BP)) - { - UEdGraph* FEGraph = FE->GetGraph(); - if (!MCPUtils::Identifies(FunctionName, FEGraph)) continue; - if (!BP->DelegateSignatureGraphs.Contains(FEGraph)) continue; - - EntryNode = FE; - NodeType = TEXT("EventDispatcher"); - break; - } - } - - if (!EntryNode) - { - // Build a helpful error listing available functions, events, and dispatchers - UMCPServer::Printf(TEXT("ERROR: Function/event/dispatcher '%s' not found. Available:\n"), *FunctionName); - - for (UEdGraph* Graph : BP->FunctionGraphs) - { - if (Graph) UMCPServer::Printf(TEXT(" function: %s\n"), *MCPUtils::FormatName(Graph)); - } - for (UK2Node_CustomEvent* CE : MCPUtils::AllNodes(BP)) - { - UMCPServer::Printf(TEXT(" custom event: %s\n"), *CE->CustomFunctionName.ToString()); - } - TSet DelegateNames; - FBlueprintEditorUtils::GetDelegateNameList(BP, DelegateNames); - for (const FName& DN : DelegateNames) - { - UMCPServer::Printf(TEXT(" dispatcher: %s\n"), *DN.ToString()); - } - return; - } - - // Check for duplicate parameter name - for (const TSharedPtr& Existing : EntryNode->UserDefinedPins) - { - if (Existing.IsValid() && Existing->PinName.ToString().Equals(ParamName, ESearchCase::IgnoreCase)) - { - UMCPServer::Printf(TEXT("ERROR: Parameter '%s' already exists on '%s'\n"), *ParamName, *FunctionName); - return; - } - } - - // Add the parameter pin (EGPD_Output on entry = input to callers) - EntryNode->CreateUserDefinedPin(FName(*ParamName), PinType, EGPD_Output); - bool bSaved = MCPUtils::SaveBlueprintPackage(BP); - - UMCPServer::Printf(TEXT("Added %s parameter '%s' to %s '%s'%s\n"), - *ParamType, *ParamName, *NodeType, *FunctionName, - bSaved ? TEXT("") : TEXT(" (WARNING: save failed)")); - } -}; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_AddInterface.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_AddInterface.h index f50dc4dc..da2a2cdc 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_AddInterface.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_AddInterface.h @@ -1,10 +1,10 @@ #pragma once #include "CoreMinimal.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPUtils.h" -#include "MCPServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingUtils.h" +#include "WingServer.h" #include "Engine/Blueprint.h" #include "Kismet2/BlueprintEditorUtils.h" #include "UObject/UObjectIterator.h" @@ -16,7 +16,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_Blueprint_AddInterface : public UObject, public IMCPHandler +class UWing_Blueprint_AddInterface : public UObject, public IWingHandler { GENERATED_BODY() @@ -35,7 +35,7 @@ public: virtual void Handle() override { - MCPFetcher F; + WingFetcher F; UBlueprint* BP = F.Asset(Blueprint).Cast(); if (!BP) return; @@ -48,8 +48,8 @@ public: { if (IfaceDesc.Interface == InterfaceClass) { - UMCPServer::Printf(TEXT("ERROR: Interface '%s' is already implemented by this Blueprint.\n"), - *MCPUtils::FormatName(InterfaceClass)); + UWingServer::Printf(TEXT("ERROR: Interface '%s' is already implemented by this Blueprint.\n"), + *WingUtils::FormatName(InterfaceClass)); return; } } @@ -58,21 +58,21 @@ public: bool bAdded = FBlueprintEditorUtils::ImplementNewInterface(BP, InterfacePath); if (!bAdded) { - UMCPServer::Printf(TEXT("ERROR: ImplementNewInterface failed for '%s'.\n"), - *MCPUtils::FormatName(InterfaceClass)); + UWingServer::Printf(TEXT("ERROR: ImplementNewInterface failed for '%s'.\n"), + *WingUtils::FormatName(InterfaceClass)); return; } // Collect stub function graph names from the newly added interface entry - UMCPServer::Printf(TEXT("Added interface %s\n"), *MCPUtils::FormatName(InterfaceClass)); - UMCPServer::Printf(TEXT("Function stubs:\n")); + UWingServer::Printf(TEXT("Added interface %s\n"), *WingUtils::FormatName(InterfaceClass)); + UWingServer::Printf(TEXT("Function stubs:\n")); for (const FBPInterfaceDescription& IfaceDesc : BP->ImplementedInterfaces) { if (IfaceDesc.Interface != InterfaceClass) continue; for (const UEdGraph* Graph : IfaceDesc.Graphs) { if (Graph) - UMCPServer::Printf(TEXT(" %s\n"), *MCPUtils::FormatName(Graph)); + UWingServer::Printf(TEXT(" %s\n"), *WingUtils::FormatName(Graph)); } break; } @@ -88,17 +88,17 @@ private: for (TObjectIterator It; It; ++It) { if (!It->IsChildOf(UInterface::StaticClass())) continue; - if (MCPUtils::Identifies(Name, *It)) + if (WingUtils::Identifies(Name, *It)) return *It; } // Strategy 2: Try loading as a Blueprint Interface asset by package path - MCPFetcher F; + WingFetcher F; UBlueprint* IfaceBP = F.Asset(Name).Cast(); if (IfaceBP && IfaceBP->GeneratedClass && IfaceBP->GeneratedClass->IsChildOf(UInterface::StaticClass())) return IfaceBP->GeneratedClass; - UMCPServer::Printf(TEXT("ERROR: Interface '%s' not found. Provide a native UInterface class name or Blueprint Interface package path.\n"), + UWingServer::Printf(TEXT("ERROR: Interface '%s' not found. Provide a native UInterface class name or Blueprint Interface package path.\n"), *Name); return nullptr; } diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_ChangeFunctionParameterType.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_ChangeFunctionParameterType.h deleted file mode 100644 index ea35fad4..00000000 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_ChangeFunctionParameterType.h +++ /dev/null @@ -1,160 +0,0 @@ -#pragma once - -#include "CoreMinimal.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPUtils.h" -#include "MCPServer.h" -#include "MCPTypes.h" -#include "Engine/Blueprint.h" -#include "EdGraph/EdGraph.h" -#include "EdGraph/EdGraphPin.h" -#include "K2Node_FunctionEntry.h" -#include "K2Node_CustomEvent.h" -#include "K2Node_EditablePinBase.h" -#include "Kismet2/BlueprintEditorUtils.h" -#include "Blueprint_ChangeFunctionParameterType.generated.h" - - -// --------------------------------------------------------------------------- -// --------------------------------------------------------------------------- -// --------------------------------------------------------------------------- - -UCLASS() -class UMCP_Blueprint_ChangeFunctionParameterType : public UObject, public IMCPHandler -{ - GENERATED_BODY() - -public: - UPROPERTY(meta=(Description="Blueprint package path")) - FString Blueprint; - - UPROPERTY(meta=(Description="Name of the function or custom event")) - FString FunctionName; - - UPROPERTY(meta=(Description="Name of the parameter to change")) - FString ParamName; - - UPROPERTY(meta=(Description="New type for the parameter (e.g. 'Float', 'Vector', 'MyStruct')")) - FString NewType; - - UPROPERTY(meta=(Optional, Description="If true, analyze impact without making changes")) - bool DryRun = false; - - virtual FString GetDescription() const override - { - return TEXT("Change the type of an existing parameter on a function or custom event in a Blueprint."); - } - - virtual void Handle() override - { - MCPFetcher F; - UBlueprint* BP = F.Asset(Blueprint).Cast(); - if (!BP) return; - - // Resolve the new type using the shared resolver (supports primitives, structs, enums, and object references) - FEdGraphPinType NewPinType; - if (!UMCPTypes::TextToType(NewType, NewPinType)) - return; - - // Find the entry node: K2Node_FunctionEntry in a function graph, - // or K2Node_CustomEvent in any graph - UK2Node_EditablePinBase* EntryNode = nullptr; - - // Strategy 1: Look for a K2Node_FunctionEntry in a function graph matching the name - for (UK2Node_FunctionEntry* FuncEntry : MCPUtils::AllNodes(BP)) - { - if (MCPUtils::Identifies(FunctionName, FuncEntry->GetGraph())) - { - EntryNode = FuncEntry; - break; - } - } - - // Strategy 2: Search for a K2Node_CustomEvent with matching name - if (!EntryNode) - { - for (UK2Node_CustomEvent* CustomEvent : MCPUtils::AllNodes(BP)) - { - if (MCPUtils::Identifies(FunctionName, static_cast(CustomEvent))) - { - EntryNode = CustomEvent; - break; - } - } - } - - if (!EntryNode) - { - UMCPServer::Printf(TEXT("ERROR: Function or custom event '%s' not found. Available:\n"), *FunctionName); - for (UK2Node_FunctionEntry* FE : MCPUtils::AllNodes(BP)) - UMCPServer::Printf(TEXT(" function: %s\n"), *MCPUtils::FormatName(FE->GetGraph())); - for (UK2Node_CustomEvent* CE : MCPUtils::AllNodes(BP)) - UMCPServer::Printf(TEXT(" event: %s\n"), *MCPUtils::FormatName(static_cast(CE))); - return; - } - - // Find the UserDefinedPin matching ParamName - TSharedPtr* FoundPinInfo = nullptr; - for (TSharedPtr& PinInfo : EntryNode->UserDefinedPins) - { - if (PinInfo.IsValid() && PinInfo->PinName.ToString().Equals(ParamName, ESearchCase::IgnoreCase)) - { - FoundPinInfo = &PinInfo; - break; - } - } - - if (!FoundPinInfo) - { - UMCPServer::Printf(TEXT("ERROR: Parameter '%s' not found. Available:\n"), *ParamName); - for (const TSharedPtr& PinInfo : EntryNode->UserDefinedPins) - if (PinInfo.IsValid()) - UMCPServer::Printf(TEXT(" %s\n"), *PinInfo->PinName.ToString()); - return; - } - - // Dry run: report connected pins that may disconnect - if (DryRun) - { - int32 AtRisk = 0; - for (UEdGraphPin* Pin : EntryNode->Pins) - { - if (!Pin || !MCPUtils::Identifies(ParamName, Pin)) continue; - for (UEdGraphPin* Linked : Pin->LinkedTo) - { - if (!Linked || !Linked->GetOwningNode()) continue; - UMCPServer::Printf(TEXT("Connection at risk: %s -> %s on %s\n"), - *MCPUtils::FormatName(Pin), - *MCPUtils::FormatName(Linked), - *MCPUtils::FormatName(Linked->GetOwningNode())); - AtRisk++; - } - } - UMCPServer::Printf(TEXT("Dry run: %d connection(s) at risk.\n"), AtRisk); - return; - } - - // Apply the type change (PreEdit/PostEdit on the node itself, not the BP — - // MCPUtils::PreEdit/PostEdit operates at BP level, not node level) - EntryNode->PreEditChange(nullptr); - (*FoundPinInfo)->PinType = NewPinType; - EntryNode->PostEditChange(); - - // Reconstruct the node to update output pins with the new type - if (UEdGraph* OwningGraph = EntryNode->GetGraph()) - { - if (const UEdGraphSchema* Schema = OwningGraph->GetSchema()) - { - Schema->ReconstructNode(*EntryNode); - } - } - - // Save - bool bSaved = MCPUtils::SaveBlueprintPackage(BP); - - UMCPServer::Printf(TEXT("Changed '%s' to %s. Save %s.\n"), - *ParamName, *UMCPTypes::TypeToText(NewPinType), - bSaved ? TEXT("succeeded") : TEXT("failed")); - } -}; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_Compile.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_Compile.h index ab930a10..91b19d3a 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_Compile.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_Compile.h @@ -1,10 +1,10 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingUtils.h" #include "Engine/Blueprint.h" #include "Kismet2/KismetEditorUtilities.h" #include "Blueprint_Compile.generated.h" @@ -15,7 +15,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_Blueprint_Compile : public UObject, public IMCPHandler +class UWing_Blueprint_Compile : public UObject, public IWingHandler { GENERATED_BODY() @@ -30,7 +30,7 @@ public: virtual void Handle() override { - MCPFetcher F; + WingFetcher F; UBlueprint *BP = F.Walk(Blueprint).Cast(); EBlueprintCompileOptions CompileOpts = @@ -41,14 +41,14 @@ public: FKismetEditorUtilities::CompileBlueprint(BP, CompileOpts, nullptr); // Collect compiler messages from nodes - for (UEdGraphNode* Node : MCPUtils::AllNodes(BP)) + for (UEdGraphNode* Node : WingUtils::AllNodes(BP)) { if (!Node->bHasCompilerMessage) continue; - UMCPServer::Printf(TEXT("%s %s: %s\n"), - *MCPUtils::FormatName(Node->GetGraph()), - *MCPUtils::FormatName(Node), + UWingServer::Printf(TEXT("%s %s: %s\n"), + *WingUtils::FormatName(Node->GetGraph()), + *WingUtils::FormatName(Node), *Node->ErrorMsg); } - UMCPServer::Printf(TEXT("Compilation Done.\n")); + UWingServer::Printf(TEXT("Compilation Done.\n")); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_Diff.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_Diff.h index d503e9f1..2264f245 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_Diff.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_Diff.h @@ -1,10 +1,10 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingUtils.h" #include "Engine/Blueprint.h" #include "EdGraph/EdGraph.h" #include "EdGraph/EdGraphNode.h" @@ -17,7 +17,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_Blueprint_Diff : public UObject, public IMCPHandler +class UWing_Blueprint_Diff : public UObject, public IWingHandler { GENERATED_BODY() @@ -41,11 +41,11 @@ public: virtual void Handle() override { // Load both blueprints - MCPFetcher FA; + WingFetcher FA; UBlueprint* BPA = FA.Asset(BlueprintA).Cast(); if (!BPA) return; - MCPFetcher FB; + WingFetcher FB; UBlueprint* BPB = FB.Asset(BlueprintB).Cast(); if (!BPB) return; @@ -56,13 +56,13 @@ public: for (UEdGraph* G : BP->UbergraphPages) { if (!G) continue; - if (!Graph.IsEmpty() && !MCPUtils::Identifies(Graph, G)) continue; + if (!Graph.IsEmpty() && !WingUtils::Identifies(Graph, G)) continue; Graphs.Add(G); } for (UEdGraph* G : BP->FunctionGraphs) { if (!G) continue; - if (!Graph.IsEmpty() && !MCPUtils::Identifies(Graph, G)) continue; + if (!Graph.IsEmpty() && !WingUtils::Identifies(Graph, G)) continue; Graphs.Add(G); } return Graphs; @@ -73,8 +73,8 @@ public: // Build graph name maps TMap GraphMapA, GraphMapB; - for (UEdGraph* G : GraphsA) GraphMapA.Add(MCPUtils::FormatName(G), G); - for (UEdGraph* G : GraphsB) GraphMapB.Add(MCPUtils::FormatName(G), G); + for (UEdGraph* G : GraphsA) GraphMapA.Add(WingUtils::FormatName(G), G); + for (UEdGraph* G : GraphsB) GraphMapB.Add(WingUtils::FormatName(G), G); // Find all unique graph names TSet AllGraphNames; @@ -90,13 +90,13 @@ public: if (!pGA) { - UMCPServer::Printf(TEXT("Graph %s: only in B (%d nodes)\n"), *GraphName, (*pGB)->Nodes.Num()); + UWingServer::Printf(TEXT("Graph %s: only in B (%d nodes)\n"), *GraphName, (*pGB)->Nodes.Num()); TotalDiffs++; continue; } if (!pGB) { - UMCPServer::Printf(TEXT("Graph %s: only in A (%d nodes)\n"), *GraphName, (*pGA)->Nodes.Num()); + UWingServer::Printf(TEXT("Graph %s: only in A (%d nodes)\n"), *GraphName, (*pGA)->Nodes.Num()); TotalDiffs++; continue; } @@ -110,12 +110,12 @@ public: for (UEdGraphNode* N : GA->Nodes) { if (!N) continue; - NodesA.FindOrAdd(MCPUtils::FormatName(N)).Add(N); + NodesA.FindOrAdd(WingUtils::FormatName(N)).Add(N); } for (UEdGraphNode* N : GB->Nodes) { if (!N) continue; - NodesB.FindOrAdd(MCPUtils::FormatName(N)).Add(N); + NodesB.FindOrAdd(WingUtils::FormatName(N)).Add(N); } // Nodes only in A @@ -144,8 +144,8 @@ public: auto MakeConnKey = [](UEdGraphPin* SrcPin, UEdGraphPin* TgtPin) -> FString { return FString::Printf(TEXT("%s|%s|%s|%s"), - *MCPUtils::FormatName(SrcPin->GetOwningNode()), *MCPUtils::FormatName(SrcPin), - *MCPUtils::FormatName(TgtPin->GetOwningNode()), *MCPUtils::FormatName(TgtPin)); + *WingUtils::FormatName(SrcPin->GetOwningNode()), *WingUtils::FormatName(SrcPin), + *WingUtils::FormatName(TgtPin->GetOwningNode()), *WingUtils::FormatName(TgtPin)); }; auto GatherConnections = [&MakeConnKey](UEdGraph* G) -> TSet @@ -182,39 +182,39 @@ public: if (bIdentical) { - UMCPServer::Printf(TEXT("Graph %s: identical (%d nodes)\n"), *GraphName, GA->Nodes.Num()); + UWingServer::Printf(TEXT("Graph %s: identical (%d nodes)\n"), *GraphName, GA->Nodes.Num()); continue; } TotalDiffs++; - UMCPServer::Printf(TEXT("Graph %s: different (A=%d nodes, B=%d nodes)\n"), *GraphName, GA->Nodes.Num(), GB->Nodes.Num()); + UWingServer::Printf(TEXT("Graph %s: different (A=%d nodes, B=%d nodes)\n"), *GraphName, GA->Nodes.Num(), GB->Nodes.Num()); if (!OnlyInA.IsEmpty()) { - UMCPServer::Print(TEXT(" Nodes only in A:\n")); - for (const FString& Line : OnlyInA) UMCPServer::Printf(TEXT(" %s\n"), *Line); + UWingServer::Print(TEXT(" Nodes only in A:\n")); + for (const FString& Line : OnlyInA) UWingServer::Printf(TEXT(" %s\n"), *Line); } if (!OnlyInB.IsEmpty()) { - UMCPServer::Print(TEXT(" Nodes only in B:\n")); - for (const FString& Line : OnlyInB) UMCPServer::Printf(TEXT(" %s\n"), *Line); + UWingServer::Print(TEXT(" Nodes only in B:\n")); + for (const FString& Line : OnlyInB) UWingServer::Printf(TEXT(" %s\n"), *Line); } if (!ConnsOnlyInA.IsEmpty()) { - UMCPServer::Print(TEXT(" Connections only in A:\n")); - for (const FString& Line : ConnsOnlyInA) UMCPServer::Printf(TEXT(" %s\n"), *Line); + UWingServer::Print(TEXT(" Connections only in A:\n")); + for (const FString& Line : ConnsOnlyInA) UWingServer::Printf(TEXT(" %s\n"), *Line); } if (!ConnsOnlyInB.IsEmpty()) { - UMCPServer::Print(TEXT(" Connections only in B:\n")); - for (const FString& Line : ConnsOnlyInB) UMCPServer::Printf(TEXT(" %s\n"), *Line); + UWingServer::Print(TEXT(" Connections only in B:\n")); + for (const FString& Line : ConnsOnlyInB) UWingServer::Printf(TEXT(" %s\n"), *Line); } } // Compare variables TSet VarNamesA, VarNamesB; - for (const FBPVariableDescription& V : BPA->NewVariables) VarNamesA.Add(MCPUtils::FormatName(V)); - for (const FBPVariableDescription& V : BPB->NewVariables) VarNamesB.Add(MCPUtils::FormatName(V)); + for (const FBPVariableDescription& V : BPA->NewVariables) VarNamesA.Add(WingUtils::FormatName(V)); + for (const FBPVariableDescription& V : BPB->NewVariables) VarNamesB.Add(WingUtils::FormatName(V)); TArray VarsOnlyInA, VarsOnlyInB; for (const FString& Name : VarNamesA) @@ -226,17 +226,17 @@ public: if (!VarsOnlyInA.IsEmpty()) { - UMCPServer::Print(TEXT("Variables only in A:\n")); - for (const FString& Name : VarsOnlyInA) UMCPServer::Printf(TEXT(" %s\n"), *Name); + UWingServer::Print(TEXT("Variables only in A:\n")); + for (const FString& Name : VarsOnlyInA) UWingServer::Printf(TEXT(" %s\n"), *Name); TotalDiffs += VarsOnlyInA.Num(); } if (!VarsOnlyInB.IsEmpty()) { - UMCPServer::Print(TEXT("Variables only in B:\n")); - for (const FString& Name : VarsOnlyInB) UMCPServer::Printf(TEXT(" %s\n"), *Name); + UWingServer::Print(TEXT("Variables only in B:\n")); + for (const FString& Name : VarsOnlyInB) UWingServer::Printf(TEXT(" %s\n"), *Name); TotalDiffs += VarsOnlyInB.Num(); } - UMCPServer::Printf(TEXT("Total differences: %d\n"), TotalDiffs); + UWingServer::Printf(TEXT("Total differences: %d\n"), TotalDiffs); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_Dump.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_Dump.h index f0acfb6e..1382d5ed 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_Dump.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_Dump.h @@ -1,11 +1,11 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPTypes.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingTypes.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingUtils.h" #include "Engine/Blueprint.h" #include "Animation/AnimBlueprint.h" #include "Animation/Skeleton.h" @@ -19,7 +19,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_Blueprint_Dump : public UObject, public IMCPHandler +class UWing_Blueprint_Dump : public UObject, public IWingHandler { GENERATED_BODY() @@ -35,44 +35,43 @@ public: virtual void Handle() override { - MCPFetcher F; + WingFetcher F; UBlueprint* BP = F.Walk(Blueprint).Cast(); if (!BP) return; // Header - UMCPServer::Printf(TEXT("Blueprint: %s\n"), *MCPUtils::FormatName(BP)); - UMCPServer::Printf(TEXT("Parent: %s\n"), BP->ParentClass ? *MCPUtils::FormatName(BP->ParentClass) : TEXT("None")); - UMCPServer::Printf(TEXT("Type: %s\n"), - *MCPUtils::EnumToString(BP->BlueprintType)); + UWingServer::Printf(TEXT("Blueprint: %s\n"), *WingUtils::FormatName(BP)); + UWingServer::Printf(TEXT("Parent: %s\n"), BP->ParentClass ? *WingUtils::FormatName(BP->ParentClass) : TEXT("None")); + UWingServer::Printf(TEXT("Type: %s\n"), *WingUtils::EnumToString(BP->BlueprintType)); // Animation Blueprint if (UAnimBlueprint* AnimBP = Cast(BP)) { if (AnimBP->TargetSkeleton) - UMCPServer::Printf(TEXT("TargetSkeleton: %s\n"), *AnimBP->TargetSkeleton->GetPathName()); + UWingServer::Printf(TEXT("TargetSkeleton: %s\n"), *AnimBP->TargetSkeleton->GetPathName()); } // Interfaces for (const FBPInterfaceDescription& I : BP->ImplementedInterfaces) { if (I.Interface) - UMCPServer::Printf(TEXT("Interface: %s\n"), *MCPUtils::FormatName(I.Interface)); + UWingServer::Printf(TEXT("Interface: %s\n"), *WingUtils::FormatName(I.Interface)); } // Variables if (!BP->NewVariables.IsEmpty()) { - UMCPServer::Print(TEXT("\nVariables:\n")); + UWingServer::Print(TEXT("\nVariables:\n")); for (const FBPVariableDescription& V : BP->NewVariables) { - UMCPServer::Printf(TEXT(" %s %s"), - *UMCPTypes::TypeToText(V.VarType), - *MCPUtils::FormatName(V)); + UWingServer::Printf(TEXT(" %s %s"), + *UWingTypes::TypeToText(V.VarType), + *WingUtils::FormatName(V)); if (!V.DefaultValue.IsEmpty()) - UMCPServer::Printf(TEXT(" = %s"), *V.DefaultValue); + UWingServer::Printf(TEXT(" = %s"), *V.DefaultValue); if (!V.Category.IsEmpty() && V.Category.ToString() != TEXT("Default")) - UMCPServer::Printf(TEXT(" [%s]"), *V.Category.ToString()); - UMCPServer::Print(TEXT("\n")); + UWingServer::Printf(TEXT(" [%s]"), *V.Category.ToString()); + UWingServer::Print(TEXT("\n")); } } @@ -82,27 +81,27 @@ public: const TArray& AllNodes = SCS->GetAllNodes(); if (!AllNodes.IsEmpty()) { - UMCPServer::Print(TEXT("\nComponents:\n")); + UWingServer::Print(TEXT("\nComponents:\n")); for (USCS_Node* Node : AllNodes) { if (!Node || !Node->ComponentTemplate) continue; - UMCPServer::Printf(TEXT(" %s (%s)"), - *MCPUtils::FormatName(Node->ComponentTemplate), - *MCPUtils::FormatName(Node->ComponentClass)); + UWingServer::Printf(TEXT(" %s (%s)"), + *WingUtils::FormatName(Node->ComponentTemplate), + *WingUtils::FormatName(Node->ComponentClass)); if (Node->ParentComponentOrVariableName != NAME_None) - UMCPServer::Printf(TEXT(" parent=%s"), *Node->ParentComponentOrVariableName.ToString()); - UMCPServer::Print(TEXT("\n")); + UWingServer::Printf(TEXT(" parent=%s"), *Node->ParentComponentOrVariableName.ToString()); + UWingServer::Print(TEXT("\n")); } } } // Graph names (without contents) - TArray Graphs = MCPUtils::AllGraphs(BP); + TArray Graphs = WingUtils::AllGraphs(BP); if (!Graphs.IsEmpty()) { - UMCPServer::Print(TEXT("\nGraphs:\n")); + UWingServer::Print(TEXT("\nGraphs:\n")); for (UEdGraph* Graph : Graphs) - UMCPServer::Printf(TEXT(" %s\n"), *MCPUtils::FormatName(Graph)); + UWingServer::Printf(TEXT(" %s\n"), *WingUtils::FormatName(Graph)); } } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_ListComponents.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_ListComponents.h index b03ab766..9158e0de 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_ListComponents.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_ListComponents.h @@ -1,10 +1,10 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingUtils.h" #include "Engine/Blueprint.h" #include "Engine/SimpleConstructionScript.h" #include "Engine/SCS_Node.h" @@ -16,7 +16,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_Blueprint_ListComponents : public UObject, public IMCPHandler +class UWing_Blueprint_ListComponents : public UObject, public IWingHandler { GENERATED_BODY() @@ -32,7 +32,7 @@ public: virtual void Handle() override { - MCPFetcher F; + WingFetcher F; F.Walk(Blueprint); if (!F.Ok()) return; @@ -42,7 +42,7 @@ public: USimpleConstructionScript* SCS = BP->SimpleConstructionScript; if (!SCS) { - UMCPServer::Print(TEXT("ERROR: Not an Actor Blueprint (no SimpleConstructionScript)\n")); + UWingServer::Print(TEXT("ERROR: Not an Actor Blueprint (no SimpleConstructionScript)\n")); return; } @@ -51,11 +51,11 @@ public: if (AllNodes.Num() == 0) { - UMCPServer::Print(TEXT("No components.\n")); + UWingServer::Print(TEXT("No components.\n")); return; } - UMCPServer::Print(TEXT("WARNING: This only lists components added in this blueprint's SCS. " + UWingServer::Print(TEXT("WARNING: This only lists components added in this blueprint's SCS. " "It does not include inherited components from C++ parent classes " "(available via the CDO's OwnedComponents) or from parent blueprint SCS nodes.\n")); @@ -72,20 +72,20 @@ private: { // Indent to show hierarchy for (int32 i = 0; i < Depth; i++) - UMCPServer::Print(TEXT(" ")); + UWingServer::Print(TEXT(" ")); FString ClassName = Node->ComponentClass - ? MCPUtils::FormatName(Node->ComponentClass) + ? WingUtils::FormatName(Node->ComponentClass) : TEXT("None"); - UMCPServer::Printf(TEXT("%s %s"), + UWingServer::Printf(TEXT("%s %s"), *ClassName, - *MCPUtils::FormatName(Node->ComponentTemplate)); + *WingUtils::FormatName(Node->ComponentTemplate)); if (bIsSceneRoot && Depth == 0) - UMCPServer::Print(TEXT(" [SceneRoot]")); + UWingServer::Print(TEXT(" [SceneRoot]")); - UMCPServer::Print(TEXT("\n")); + UWingServer::Print(TEXT("\n")); for (USCS_Node* Child : Node->GetChildNodes()) { diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_ListEventDispatchers.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_ListEventDispatchers.h index 259cdc8e..3df9f5be 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_ListEventDispatchers.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_ListEventDispatchers.h @@ -1,11 +1,11 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPTypes.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingTypes.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingUtils.h" #include "Engine/Blueprint.h" #include "EdGraph/EdGraph.h" #include "EdGraph/EdGraphPin.h" @@ -20,7 +20,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_Blueprint_ListEventDispatchers : public UObject, public IMCPHandler +class UWing_Blueprint_ListEventDispatchers : public UObject, public IWingHandler { GENERATED_BODY() @@ -35,7 +35,7 @@ public: virtual void Handle() override { - MCPFetcher F; + WingFetcher F; UBlueprint* BP = F.Walk(Blueprint).Cast(); if (!BP) return; @@ -44,33 +44,33 @@ public: for (const FName& DelegateName : DelegateNameSet) { - UMCPServer::Printf(TEXT("%s("), *DelegateName.ToString()); + UWingServer::Printf(TEXT("%s("), *DelegateName.ToString()); UEdGraph* SigGraph = FBlueprintEditorUtils::GetDelegateSignatureGraphByName(BP, DelegateName); if (SigGraph) { bool bFirst = true; - for (UK2Node_FunctionEntry* FE : MCPUtils::AllNodes(SigGraph)) + for (UK2Node_FunctionEntry* FE : WingUtils::AllNodes(SigGraph)) { for (const TSharedPtr& PinInfo : FE->UserDefinedPins) { if (!PinInfo.IsValid()) continue; - if (!bFirst) UMCPServer::Print(TEXT(", ")); + if (!bFirst) UWingServer::Print(TEXT(", ")); bFirst = false; - UMCPServer::Printf(TEXT("%s %s"), - *UMCPTypes::TypeToText(PinInfo->PinType), + UWingServer::Printf(TEXT("%s %s"), + *UWingTypes::TypeToText(PinInfo->PinType), *PinInfo->PinName.ToString()); } break; // only need the first entry node } } - UMCPServer::Print(TEXT(")\n")); + UWingServer::Print(TEXT(")\n")); } if (DelegateNameSet.Num() == 0) { - UMCPServer::Print(TEXT("No event dispatchers found.\n")); + UWingServer::Print(TEXT("No event dispatchers found.\n")); } } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_ListInterfaces.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_ListInterfaces.h index 9d7cab6a..1d2c00c3 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_ListInterfaces.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_ListInterfaces.h @@ -1,10 +1,10 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingUtils.h" #include "Engine/Blueprint.h" #include "Blueprint_ListInterfaces.generated.h" @@ -14,7 +14,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_Blueprint_ListInterfaces : public UObject, public IMCPHandler +class UWing_Blueprint_ListInterfaces : public UObject, public IWingHandler { GENERATED_BODY() @@ -30,7 +30,7 @@ public: virtual void Handle() override { - MCPFetcher F; + WingFetcher F; F.Walk(Blueprint); if (!F.Ok()) return; UBlueprint* BP = F.Cast(); @@ -42,17 +42,17 @@ public: if (!IfaceDesc.Interface) continue; bAny = true; - UMCPServer::Printf(TEXT("Interface: %s\n"), *MCPUtils::FormatName(IfaceDesc.Interface)); + UWingServer::Printf(TEXT("Interface: %s\n"), *WingUtils::FormatName(IfaceDesc.Interface)); for (const UEdGraph* Graph : IfaceDesc.Graphs) { if (!Graph) continue; - UMCPServer::Printf(TEXT(" %s\n"), *MCPUtils::FormatName(Graph)); + UWingServer::Printf(TEXT(" %s\n"), *WingUtils::FormatName(Graph)); } } if (!bAny) { - UMCPServer::Print(TEXT("No interfaces implemented.\n")); + UWingServer::Print(TEXT("No interfaces implemented.\n")); } } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_RefreshAllNodes.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_RefreshAllNodes.h index 111baff4..6175a214 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_RefreshAllNodes.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_RefreshAllNodes.h @@ -1,10 +1,10 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingUtils.h" #include "Engine/Blueprint.h" #include "EdGraph/EdGraph.h" #include "EdGraph/EdGraphNode.h" @@ -18,7 +18,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_Blueprint_RefreshAllNodes : public UObject, public IMCPHandler +class UWing_Blueprint_RefreshAllNodes : public UObject, public IWingHandler { GENERATED_BODY() @@ -35,19 +35,19 @@ public: virtual void Handle() override { // Load Blueprint - MCPFetcher F; + WingFetcher F; UBlueprint* BP = F.Asset(Blueprint).Cast(); if (!BP) return; - int32 GraphCount = MCPUtils::AllGraphs(BP).Num(); - int32 NodeCount = MCPUtils::AllNodes(BP).Num(); + int32 GraphCount = WingUtils::AllGraphs(BP).Num(); + int32 NodeCount = WingUtils::AllNodes(BP).Num(); // Refresh all nodes FBlueprintEditorUtils::RefreshAllNodes(BP); // Remove orphaned pins from all nodes int32 OrphanedPinsRemoved = 0; - for (UEdGraphNode* Node : MCPUtils::AllNodes(BP)) + for (UEdGraphNode* Node : WingUtils::AllNodes(BP)) { for (int32 i = Node->Pins.Num() - 1; i >= 0; --i) { @@ -62,26 +62,26 @@ public: } // Summary - UMCPServer::Printf(TEXT("Refreshed %s: %d graphs, %d nodes"), *MCPUtils::FormatName(BP), GraphCount, NodeCount); + UWingServer::Printf(TEXT("Refreshed %s: %d graphs, %d nodes"), *WingUtils::FormatName(BP), GraphCount, NodeCount); if (OrphanedPinsRemoved > 0) { - UMCPServer::Printf(TEXT(", %d orphaned pins removed"), OrphanedPinsRemoved); + UWingServer::Printf(TEXT(", %d orphaned pins removed"), OrphanedPinsRemoved); } - UMCPServer::Print(TEXT("\n")); + UWingServer::Print(TEXT("\n")); // Collect compiler warnings and errors if (BP->Status == BS_Error) { - UMCPServer::Print(TEXT("ERROR: Blueprint has compiler errors after refresh\n")); + UWingServer::Print(TEXT("ERROR: Blueprint has compiler errors after refresh\n")); } - for (UEdGraphNode* Node : MCPUtils::AllNodes(BP)) + for (UEdGraphNode* Node : WingUtils::AllNodes(BP)) { if (!Node->bHasCompilerMessage) continue; const TCHAR* Prefix = (Node->ErrorType == EMessageSeverity::Error) ? TEXT("ERROR") : TEXT("WARNING"); - UMCPServer::Printf(TEXT("%s: [%s] %s: %s\n"), - Prefix, *MCPUtils::FormatName(Node->GetGraph()), - *MCPUtils::FormatName(Node), *Node->ErrorMsg); + UWingServer::Printf(TEXT("%s: [%s] %s: %s\n"), + Prefix, *WingUtils::FormatName(Node->GetGraph()), + *WingUtils::FormatName(Node), *Node->ErrorMsg); } } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_RemoveComponent.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_RemoveComponent.h index e91cbd76..8f2b594c 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_RemoveComponent.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_RemoveComponent.h @@ -1,10 +1,10 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingUtils.h" #include "Engine/Blueprint.h" #include "Engine/SimpleConstructionScript.h" #include "Engine/SCS_Node.h" @@ -16,7 +16,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_Blueprint_RemoveComponent : public UObject, public IMCPHandler +class UWing_Blueprint_RemoveComponent : public UObject, public IWingHandler { GENERATED_BODY() @@ -34,14 +34,14 @@ public: virtual void Handle() override { - MCPFetcher F; + WingFetcher F; UBlueprint* BP = F.Walk(Blueprint).Cast(); if (!BP) return; USimpleConstructionScript* SCS = BP->SimpleConstructionScript; if (!SCS) { - UMCPServer::Print(TEXT("ERROR: Not an Actor Blueprint (no SimpleConstructionScript).\n")); + UWingServer::Print(TEXT("ERROR: Not an Actor Blueprint (no SimpleConstructionScript).\n")); return; } @@ -51,7 +51,7 @@ public: for (USCS_Node* Node : AllNodes) { if (Node && Node->ComponentTemplate && - MCPUtils::Identifies(Component, Node->ComponentTemplate)) + WingUtils::Identifies(Component, Node->ComponentTemplate)) { NodeToRemove = Node; break; @@ -60,12 +60,12 @@ public: if (!NodeToRemove) { - UMCPServer::Printf(TEXT("ERROR: Component '%s' not found.\nAvailable components:\n"), + UWingServer::Printf(TEXT("ERROR: Component '%s' not found.\nAvailable components:\n"), *Component); for (USCS_Node* Node : AllNodes) { if (Node && Node->ComponentTemplate) - UMCPServer::Printf(TEXT(" %s\n"), *MCPUtils::FormatName(Node->ComponentTemplate)); + UWingServer::Printf(TEXT(" %s\n"), *WingUtils::FormatName(Node->ComponentTemplate)); } return; } @@ -74,21 +74,21 @@ public: const TArray& RootNodes = SCS->GetRootNodes(); if (RootNodes.Contains(NodeToRemove) && NodeToRemove->GetChildNodes().Num() > 0) { - UMCPServer::Printf(TEXT("ERROR: Cannot remove '%s' — it is a root component with %d child(ren). " + UWingServer::Printf(TEXT("ERROR: Cannot remove '%s' — it is a root component with %d child(ren). " "Remove or re-parent the children first.\n"), - *MCPUtils::FormatName(NodeToRemove->ComponentTemplate), + *WingUtils::FormatName(NodeToRemove->ComponentTemplate), NodeToRemove->GetChildNodes().Num()); return; } - FString RemovedName = MCPUtils::FormatName(NodeToRemove->ComponentTemplate); + FString RemovedName = WingUtils::FormatName(NodeToRemove->ComponentTemplate); // Remove the node (promotes children to parent if it has any — but we've guarded root above) SCS->RemoveNodeAndPromoteChildren(NodeToRemove); - bool bSaved = MCPUtils::SaveBlueprintPackage(BP); + bool bSaved = WingUtils::SaveBlueprintPackage(BP); - UMCPServer::Printf(TEXT("Removed component %s.%s\n"), + UWingServer::Printf(TEXT("Removed component %s.%s\n"), *RemovedName, bSaved ? TEXT("") : TEXT(" WARNING: save failed.")); } diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_RemoveFunctionParameter.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_RemoveFunctionParameter.h deleted file mode 100644 index c3d586d7..00000000 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_RemoveFunctionParameter.h +++ /dev/null @@ -1,115 +0,0 @@ -#pragma once - -#include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPUtils.h" -#include "K2Node_FunctionEntry.h" -#include "K2Node_CustomEvent.h" -#include "K2Node_EditablePinBase.h" -#include "Kismet2/BlueprintEditorUtils.h" -#include "Blueprint_RemoveFunctionParameter.generated.h" - - -// --------------------------------------------------------------------------- -// --------------------------------------------------------------------------- -// --------------------------------------------------------------------------- - -UCLASS() -class UMCP_Blueprint_RemoveFunctionParameter : public UObject, public IMCPHandler -{ - GENERATED_BODY() - -public: - UPROPERTY(meta=(Description="Blueprint package path")) - FString Blueprint; - - UPROPERTY(meta=(Description="Name of the function or custom event")) - FString FunctionName; - - UPROPERTY(meta=(Description="Name of the parameter to remove")) - FString ParamName; - - virtual FString GetDescription() const override - { - return TEXT("Remove a parameter from a function or custom event in a Blueprint."); - } - - virtual void Handle() override - { - MCPFetcher F; - UBlueprint* BP = F.Asset(Blueprint).Cast(); - if (!BP) return; - - // Find the entry node (function entry or custom event) - UK2Node_EditablePinBase* EntryNode = nullptr; - - for (UK2Node_FunctionEntry* FuncEntry : MCPUtils::AllNodes(BP)) - { - if (MCPUtils::Identifies(FunctionName, FuncEntry->GetGraph())) - { - EntryNode = FuncEntry; - break; - } - } - - if (!EntryNode) - { - for (UK2Node_CustomEvent* CustomEvent : MCPUtils::AllNodes(BP)) - { - if (CustomEvent->CustomFunctionName.ToString().Equals(FunctionName, ESearchCase::IgnoreCase)) - { - EntryNode = CustomEvent; - break; - } - } - } - - if (!EntryNode) - { - UMCPServer::Printf(TEXT("Error: Function or event '%s' not found.\nAvailable:\n"), *FunctionName); - for (UK2Node_FunctionEntry* FE : MCPUtils::AllNodes(BP)) - UMCPServer::Printf(TEXT(" function: %s\n"), *MCPUtils::FormatName(FE->GetGraph())); - for (UK2Node_CustomEvent* CE : MCPUtils::AllNodes(BP)) - UMCPServer::Printf(TEXT(" event: %s\n"), *MCPUtils::FormatName(CE)); - return; - } - - // Find the parameter to remove - int32 RemovedIndex = INDEX_NONE; - for (int32 i = 0; i < EntryNode->UserDefinedPins.Num(); ++i) - { - if (EntryNode->UserDefinedPins[i].IsValid() && - EntryNode->UserDefinedPins[i]->PinName.ToString().Equals(ParamName, ESearchCase::IgnoreCase)) - { - RemovedIndex = i; - break; - } - } - - if (RemovedIndex == INDEX_NONE) - { - UMCPServer::Printf(TEXT("Error: Parameter '%s' not found on %s.\nAvailable:\n"), - *ParamName, *MCPUtils::FormatName(EntryNode)); - for (const TSharedPtr& PinInfo : EntryNode->UserDefinedPins) - if (PinInfo.IsValid()) - UMCPServer::Printf(TEXT(" %s\n"), *PinInfo->PinName.ToString()); - return; - } - - // Remove the pin - EntryNode->UserDefinedPins.RemoveAt(RemovedIndex); - - // Reconstruct the node to update output pins - if (UEdGraph* OwningGraph = EntryNode->GetGraph()) - if (const UEdGraphSchema* Schema = OwningGraph->GetSchema()) - Schema->ReconstructNode(*EntryNode); - - bool bSaved = MCPUtils::SaveBlueprintPackage(BP); - - UMCPServer::Printf(TEXT("Removed parameter '%s' from %s.\n"), *ParamName, *MCPUtils::FormatName(EntryNode)); - if (!bSaved) - UMCPServer::Print(TEXT("Warning: save failed.\n")); - } -}; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_RemoveInterface.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_RemoveInterface.h index 1142003e..882a4658 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_RemoveInterface.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_RemoveInterface.h @@ -1,10 +1,10 @@ #pragma once #include "CoreMinimal.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPUtils.h" -#include "MCPServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingUtils.h" +#include "WingServer.h" #include "Engine/Blueprint.h" #include "Kismet2/BlueprintEditorUtils.h" #include "Blueprint_RemoveInterface.generated.h" @@ -15,7 +15,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_Blueprint_RemoveInterface : public UObject, public IMCPHandler +class UWing_Blueprint_RemoveInterface : public UObject, public IWingHandler { GENERATED_BODY() @@ -37,7 +37,7 @@ public: virtual void Handle() override { - MCPFetcher F; + WingFetcher F; UBlueprint* BP = F.Asset(Blueprint).Cast(); if (!BP) return; @@ -46,7 +46,7 @@ public: for (const FBPInterfaceDescription& IfaceDesc : BP->ImplementedInterfaces) { if (!IfaceDesc.Interface) continue; - if (MCPUtils::Identifies(InterfaceName, IfaceDesc.Interface)) + if (WingUtils::Identifies(InterfaceName, IfaceDesc.Interface)) { FoundInterface = IfaceDesc.Interface; break; @@ -55,11 +55,11 @@ public: if (!FoundInterface) { - UMCPServer::Printf(TEXT("ERROR: Interface '%s' not found. Implemented interfaces:\n"), *InterfaceName); + UWingServer::Printf(TEXT("ERROR: Interface '%s' not found. Implemented interfaces:\n"), *InterfaceName); for (const FBPInterfaceDescription& IfaceDesc : BP->ImplementedInterfaces) { if (IfaceDesc.Interface) - UMCPServer::Printf(TEXT(" %s\n"), *MCPUtils::FormatName(IfaceDesc.Interface)); + UWingServer::Printf(TEXT(" %s\n"), *WingUtils::FormatName(IfaceDesc.Interface)); } return; } @@ -67,8 +67,8 @@ public: FTopLevelAssetPath InterfacePath = FoundInterface->GetClassPathName(); FBlueprintEditorUtils::RemoveInterface(BP, InterfacePath, PreserveFunctions); - UMCPServer::Printf(TEXT("Removed interface %s\n"), *MCPUtils::FormatName(FoundInterface)); + UWingServer::Printf(TEXT("Removed interface %s\n"), *WingUtils::FormatName(FoundInterface)); if (PreserveFunctions) - UMCPServer::Print(TEXT("Function graphs preserved as regular functions.\n")); + UWingServer::Print(TEXT("Function graphs preserved as regular functions.\n")); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_Reparent.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_Reparent.h index 6da98bb8..9a480c45 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_Reparent.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Blueprint_Reparent.h @@ -1,10 +1,10 @@ #pragma once #include "CoreMinimal.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPUtils.h" -#include "MCPServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingUtils.h" +#include "WingServer.h" #include "Engine/Blueprint.h" #include "Kismet2/BlueprintEditorUtils.h" #include "Kismet2/KismetEditorUtilities.h" @@ -16,7 +16,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_Blueprint_Reparent : public UObject, public IMCPHandler +class UWing_Blueprint_Reparent : public UObject, public IWingHandler { GENERATED_BODY() @@ -35,18 +35,18 @@ public: virtual void Handle() override { // Load Blueprint - MCPFetcher F; + WingFetcher F; UBlueprint* BP = F.Asset(Blueprint).Cast(); if (!BP) return; - FString OldParentName = BP->ParentClass ? MCPUtils::FormatName(BP->ParentClass) : TEXT("None"); + FString OldParentName = BP->ParentClass ? WingUtils::FormatName(BP->ParentClass) : TEXT("None"); // Find the new parent class: try C++ classes first, then Blueprint package path - UClass* NewParentClassObj = MCPUtils::FindClassByName(NewParentClass); + UClass* NewParentClassObj = WingUtils::FindClassByName(NewParentClass); if (!NewParentClassObj) { - MCPFetcher F2; + WingFetcher F2; UBlueprint* ParentBP = F2.Asset(NewParentClass).Cast(); if (ParentBP && ParentBP->GeneratedClass) NewParentClassObj = ParentBP->GeneratedClass; @@ -54,7 +54,7 @@ public: if (!NewParentClassObj) { - UMCPServer::Printf(TEXT("ERROR: Could not find class '%s'. Provide a C++ class name or Blueprint package path.\n"), + UWingServer::Printf(TEXT("ERROR: Could not find class '%s'. Provide a C++ class name or Blueprint package path.\n"), *NewParentClass); return; } @@ -63,11 +63,11 @@ public: BP->ParentClass = NewParentClassObj; FBlueprintEditorUtils::RefreshAllNodes(BP); FKismetEditorUtilities::CompileBlueprint(BP); - bool bSaved = MCPUtils::SaveBlueprintPackage(BP); + bool bSaved = WingUtils::SaveBlueprintPackage(BP); - UMCPServer::Printf(TEXT("Reparented %s: %s -> %s\n"), - *MCPUtils::FormatName(BP), *OldParentName, *MCPUtils::FormatName(NewParentClassObj)); + UWingServer::Printf(TEXT("Reparented %s: %s -> %s\n"), + *WingUtils::FormatName(BP), *OldParentName, *WingUtils::FormatName(NewParentClassObj)); if (!bSaved) - UMCPServer::Print(TEXT("Warning: save failed\n")); + UWingServer::Print(TEXT("Warning: save failed\n")); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Class_Search.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Class_Search.h index 8735a799..e478c0cd 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Class_Search.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Class_Search.h @@ -1,9 +1,9 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingUtils.h" #include "UObject/UObjectIterator.h" #include "Class_Search.generated.h" @@ -17,7 +17,7 @@ // ============================================================ UCLASS() -class UMCP_Class_Search : public UObject, public IMCPHandler +class UWing_Class_Search : public UObject, public IWingHandler { GENERATED_BODY() @@ -46,7 +46,7 @@ public: { for (TObjectIterator It; It; ++It) { - if (MCPUtils::Identifies(ParentClass, *It)) + if (WingUtils::Identifies(ParentClass, *It)) { ParentClassObj = *It; break; @@ -54,7 +54,7 @@ public: } if (!ParentClassObj) { - UMCPServer::Printf(TEXT("Error: Parent class '%s' not found\n"), *ParentClass); + UWingServer::Printf(TEXT("Error: Parent class '%s' not found\n"), *ParentClass); return; } } @@ -69,7 +69,7 @@ public: if (Class->HasAnyClassFlags(CLASS_Deprecated | CLASS_NewerVersionExists)) continue; if (ParentClassObj && !Class->IsChildOf(ParentClassObj)) continue; - FString ClassName = MCPUtils::FormatName(Class); + FString ClassName = WingUtils::FormatName(Class); if (!Query.IsEmpty() && !ClassName.Contains(Query, ESearchCase::IgnoreCase)) continue; TotalMatched++; @@ -79,16 +79,16 @@ public: } } - UMCPServer::Printf(TEXT("Found %d classes"), TotalMatched); + UWingServer::Printf(TEXT("Found %d classes"), TotalMatched); if (TotalMatched > Limit) { - UMCPServer::Printf(TEXT(" (showing %d)"), Limit); + UWingServer::Printf(TEXT(" (showing %d)"), Limit); } - UMCPServer::Print(TEXT("\n")); + UWingServer::Print(TEXT("\n")); for (UClass* Class : Matches) { - UMCPServer::Printf(TEXT(" %s"), *MCPUtils::FormatName(Class)); + UWingServer::Printf(TEXT(" %s"), *WingUtils::FormatName(Class)); // Flags TStringBuilder<64> Flags; @@ -98,15 +98,15 @@ public: if (Class->ClassGeneratedBy) Flags.Append(TEXT(" Blueprint")); if (Flags.Len() > 0) { - UMCPServer::Printf(TEXT(" [%s]"), Flags.ToString() + 1); // skip leading space + UWingServer::Printf(TEXT(" [%s]"), Flags.ToString() + 1); // skip leading space } if (Class->GetSuperClass()) { - UMCPServer::Printf(TEXT(" : %s"), *MCPUtils::FormatName(Class->GetSuperClass())); + UWingServer::Printf(TEXT(" : %s"), *WingUtils::FormatName(Class->GetSuperClass())); } - UMCPServer::Print(TEXT("\n")); + UWingServer::Print(TEXT("\n")); } } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Class_ShowProperties.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Class_ShowProperties.h index 491a705a..1a4de83a 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Class_ShowProperties.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Class_ShowProperties.h @@ -1,10 +1,10 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPTypes.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingTypes.h" +#include "WingUtils.h" #include "Class_ShowProperties.generated.h" @@ -13,7 +13,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_Class_ShowProperties : public UObject, public IMCPHandler +class UWing_Class_ShowProperties : public UObject, public IWingHandler { GENERATED_BODY() @@ -31,14 +31,14 @@ public: virtual void Handle() override { - UClass* FoundClass = MCPUtils::FindClassByName(ClassName); + UClass* FoundClass = WingUtils::FindClassByName(ClassName); if (!FoundClass) { - UMCPServer::Printf(TEXT("ERROR: Class '%s' not found\n"), *ClassName); + UWingServer::Printf(TEXT("ERROR: Class '%s' not found\n"), *ClassName); return; } - UMCPServer::Printf(TEXT("Properties of %s:\n"), *MCPUtils::FormatName(FoundClass)); + UWingServer::Printf(TEXT("Properties of %s:\n"), *WingUtils::FormatName(FoundClass)); int32 Count = 0; for (TFieldIterator PropIt(FoundClass); PropIt; ++PropIt) @@ -63,18 +63,18 @@ public: if (Prop->HasAnyPropertyFlags(CPF_RepNotify)) Flags.Append(TEXT(" RepNotify")); UClass* OwnerClass = Prop->GetOwnerClass(); - UMCPServer::Printf(TEXT(" %s %s"), *UMCPTypes::TypeToText(Prop), *PropName); + UWingServer::Printf(TEXT(" %s %s"), *UWingTypes::TypeToText(Prop), *PropName); if (OwnerClass && OwnerClass != FoundClass) - UMCPServer::Printf(TEXT(" [%s]"), *MCPUtils::FormatName(OwnerClass)); + UWingServer::Printf(TEXT(" [%s]"), *WingUtils::FormatName(OwnerClass)); if (Flags.Len() > 0) - UMCPServer::Printf(TEXT(" (%s)"), Flags.ToString() + 1); // skip leading space - UMCPServer::Print(TEXT("\n")); + UWingServer::Printf(TEXT(" (%s)"), Flags.ToString() + 1); // skip leading space + UWingServer::Print(TEXT("\n")); Count++; } if (Count == 0) { - UMCPServer::Print(TEXT("No properties found.\n")); + UWingServer::Print(TEXT("No properties found.\n")); } } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Enum_Create.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Enum_Create.h index f9687504..fc4dd66f 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Enum_Create.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Enum_Create.h @@ -1,13 +1,13 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingUtils.h" #include "Engine/UserDefinedEnum.h" #include "Kismet2/EnumEditorUtils.h" #include "Factories/EnumFactory.h" -#include "MCPPackageMaker.h" +#include "WingPackageMaker.h" #include "Enum_Create.generated.h" @@ -16,7 +16,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_Enum_Create : public UObject, public IMCPHandler +class UWing_Enum_Create : public UObject, public IWingHandler { GENERATED_BODY() @@ -25,7 +25,7 @@ public: FString AssetPath; UPROPERTY(meta=(Description="Array of enum value names")) - FMCPJsonArray Values; + FWingJsonArray Values; virtual FString GetDescription() const override { @@ -34,7 +34,7 @@ public: virtual void Handle() override { - MCPPackageMaker Maker(AssetPath); + WingPackageMaker Maker(AssetPath); if (!Maker.Ok()) return; TArray EnumValues; @@ -45,7 +45,7 @@ public: } if (EnumValues.Num() == 0) { - UMCPServer::Print(TEXT("ERROR: Values must be a non-empty array of strings\n")); + UWingServer::Print(TEXT("ERROR: Values must be a non-empty array of strings\n")); return; } @@ -62,10 +62,10 @@ public: FEnumEditorUtils::SetEnumeratorDisplayName(NewEnum, NewIndex, FText::FromString(EnumValues[i])); } - bool bSaved = MCPUtils::SaveGenericPackage(NewEnum); + bool bSaved = WingUtils::SaveGenericPackage(NewEnum); - UMCPServer::Printf(TEXT("Created %s with %d values\n"), *NewEnum->GetPathName(), EnumValues.Num()); + UWingServer::Printf(TEXT("Created %s with %d values\n"), *NewEnum->GetPathName(), EnumValues.Num()); if (!bSaved) - UMCPServer::Print(TEXT("WARNING: Package save failed\n")); + UWingServer::Print(TEXT("WARNING: Package save failed\n")); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/MaterialFunction_Create.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/MaterialFunction_Create.h index 4073a5d8..0a1d9c0a 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/MaterialFunction_Create.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/MaterialFunction_Create.h @@ -1,12 +1,12 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingUtils.h" #include "Materials/MaterialFunction.h" #include "Factories/MaterialFunctionFactoryNew.h" -#include "MCPPackageMaker.h" +#include "WingPackageMaker.h" #include "MaterialFunction_Create.generated.h" @@ -15,7 +15,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_MaterialFunction_Create : public UObject, public IMCPHandler +class UWing_MaterialFunction_Create : public UObject, public IWingHandler { GENERATED_BODY() @@ -33,7 +33,7 @@ public: virtual void Handle() override { - MCPPackageMaker Maker(AssetPath); + WingPackageMaker Maker(AssetPath); if (!Maker.Ok()) return; // Create via IAssetTools + factory. @@ -44,10 +44,10 @@ public: if (!Description.IsEmpty()) MF->Description = Description; - bool bSaved = MCPUtils::SaveGenericPackage(MF); + bool bSaved = WingUtils::SaveGenericPackage(MF); - UMCPServer::Printf(TEXT("Created %s\n"), *MF->GetPathName()); + UWingServer::Printf(TEXT("Created %s\n"), *MF->GetPathName()); if (!bSaved) - UMCPServer::Print(TEXT("WARNING: Package save failed\n")); + UWingServer::Print(TEXT("WARNING: Package save failed\n")); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/StateMachine_AddState.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/StateMachine_AddState.h index 88a662b7..2c8ef12f 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/StateMachine_AddState.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/StateMachine_AddState.h @@ -1,10 +1,10 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingUtils.h" #include "EdGraph/EdGraph.h" #include "Kismet2/KismetEditorUtilities.h" #include "Animation/AnimBlueprint.h" @@ -20,7 +20,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_StateMachine_AddState : public UObject, public IMCPHandler +class UWing_StateMachine_AddState : public UObject, public IWingHandler { GENERATED_BODY() @@ -52,22 +52,22 @@ public: virtual void Handle() override { // Resolve the anim blueprint - MCPFetcher F; + WingFetcher F; UAnimBlueprint* AnimBP = F.Walk(Blueprint).Cast(); if (!AnimBP) return; // Find the state machine graph - UAnimationStateMachineGraph* SMGraph = MCPUtils::FindStateMachineGraph(AnimBP, Graph); + UAnimationStateMachineGraph* SMGraph = WingUtils::FindStateMachineGraph(AnimBP, Graph); if (!SMGraph) { - UMCPServer::Printf(TEXT("ERROR: State machine graph '%s' not found in %s\n"), *Graph, *MCPUtils::FormatName(AnimBP)); + UWingServer::Printf(TEXT("ERROR: State machine graph '%s' not found in %s\n"), *Graph, *WingUtils::FormatName(AnimBP)); return; } // Check for duplicate state name - if (MCPUtils::FindStateByName(SMGraph, StateName)) + if (WingUtils::FindStateByName(SMGraph, StateName)) { - UMCPServer::Printf(TEXT("ERROR: State '%s' already exists in %s\n"), *StateName, *MCPUtils::FormatName(SMGraph)); + UWingServer::Printf(TEXT("ERROR: State '%s' already exists in %s\n"), *StateName, *WingUtils::FormatName(SMGraph)); return; } @@ -93,7 +93,7 @@ public: // Optionally set animation asset if (!AnimationAsset.IsEmpty() && NewState->GetBoundGraph()) { - MCPFetcher F2; + WingFetcher F2; UAnimSequence* AnimSeq = F2.Asset(AnimationAsset).Cast(); if (!AnimSeq) return; @@ -109,9 +109,9 @@ public: // Compile and save FKismetEditorUtilities::CompileBlueprint(AnimBP); - MCPUtils::SaveBlueprintPackage(AnimBP); + WingUtils::SaveBlueprintPackage(AnimBP); - UMCPServer::Printf(TEXT("Created state '%s' in %s\n"), *StateName, *MCPUtils::FormatName(SMGraph)); - UMCPServer::Printf(TEXT(" node: %s\n"), *MCPUtils::FormatName(NewState)); + UWingServer::Printf(TEXT("Created state '%s' in %s\n"), *StateName, *WingUtils::FormatName(SMGraph)); + UWingServer::Printf(TEXT(" node: %s\n"), *WingUtils::FormatName(NewState)); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/StateMachine_AddTransition.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/StateMachine_AddTransition.h index e171c711..3d9628a3 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/StateMachine_AddTransition.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/StateMachine_AddTransition.h @@ -1,10 +1,10 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingUtils.h" #include "Kismet2/KismetEditorUtilities.h" #include "Animation/AnimBlueprint.h" #include "AnimStateNode.h" @@ -18,7 +18,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_StateMachine_AddTransition : public UObject, public IMCPHandler +class UWing_StateMachine_AddTransition : public UObject, public IWingHandler { GENERATED_BODY() @@ -51,21 +51,21 @@ public: virtual void Handle() override { - MCPFetcher F; + WingFetcher F; UAnimBlueprint* AnimBP = F.Asset(Blueprint).Cast(); if (!AnimBP) return; - UAnimationStateMachineGraph* SMGraph = MCPUtils::FindStateMachineGraph(AnimBP, Graph); + UAnimationStateMachineGraph* SMGraph = WingUtils::FindStateMachineGraph(AnimBP, Graph); if (!SMGraph) { - UMCPServer::Printf(TEXT("ERROR: State machine graph '%s' not found in '%s'\n"), *Graph, *MCPUtils::FormatName(AnimBP)); + UWingServer::Printf(TEXT("ERROR: State machine graph '%s' not found in '%s'\n"), *Graph, *WingUtils::FormatName(AnimBP)); return; } - UAnimStateNode* FromStateNode = MCPUtils::FindStateByName(SMGraph, FromState); + UAnimStateNode* FromStateNode = WingUtils::FindStateByName(SMGraph, FromState); if (!FromStateNode) return; - UAnimStateNode* ToStateNode = MCPUtils::FindStateByName(SMGraph, ToState); + UAnimStateNode* ToStateNode = WingUtils::FindStateByName(SMGraph, ToState); if (!ToStateNode) return; // Create transition node @@ -91,9 +91,9 @@ public: // Compile and save FKismetEditorUtilities::CompileBlueprint(AnimBP); - MCPUtils::SaveBlueprintPackage(AnimBP); + WingUtils::SaveBlueprintPackage(AnimBP); - UMCPServer::Printf(TEXT("Created transition %s -> %s: %s\n"), - *FromState, *ToState, *MCPUtils::FormatName(TransNode)); + UWingServer::Printf(TEXT("Created transition %s -> %s: %s\n"), + *FromState, *ToState, *WingUtils::FormatName(TransNode)); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/StateMachine_RemoveState.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/StateMachine_RemoveState.h index 13123483..b1dd4d2b 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/StateMachine_RemoveState.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/StateMachine_RemoveState.h @@ -1,10 +1,10 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingUtils.h" #include "Kismet2/KismetEditorUtilities.h" #include "Animation/AnimBlueprint.h" #include "AnimStateNode.h" @@ -18,7 +18,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_StateMachine_RemoveState : public UObject, public IMCPHandler +class UWing_StateMachine_RemoveState : public UObject, public IWingHandler { GENERATED_BODY() @@ -36,8 +36,8 @@ public: virtual void Handle() override { - // Fetch the state machine graph via MCPFetcher - MCPFetcher F; + // Fetch the state machine graph via WingFetcher + WingFetcher F; F.Walk(Graph); if (!F.Ok()) return; @@ -48,12 +48,12 @@ public: UBlueprint* BP = Cast(SMGraph->GetOuter()->GetOuter()); if (!BP) { - UMCPServer::Print(TEXT("ERROR: Could not find owning blueprint.\n")); + UWingServer::Print(TEXT("ERROR: Could not find owning blueprint.\n")); return; } // Find the state node - UAnimStateNode* StateNode = MCPUtils::FindStateByName(SMGraph, StateName); + UAnimStateNode* StateNode = WingUtils::FindStateByName(SMGraph, StateName); if (!StateNode) return; // Collect and remove transitions connected to this state @@ -74,9 +74,9 @@ public: // Compile and save FKismetEditorUtilities::CompileBlueprint(BP); - MCPUtils::SaveBlueprintPackage(BP); + WingUtils::SaveBlueprintPackage(BP); - UMCPServer::Printf(TEXT("Removed state %s and %d transition(s).\n"), - *MCPUtils::FormatName(StateNode), RemovedTransitions); + UWingServer::Printf(TEXT("Removed state %s and %d transition(s).\n"), + *WingUtils::FormatName(StateNode), RemovedTransitions); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/StateMachine_SetAnimation.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/StateMachine_SetAnimation.h index c5659202..185e3089 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/StateMachine_SetAnimation.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/StateMachine_SetAnimation.h @@ -1,10 +1,10 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingUtils.h" #include "EdGraph/EdGraph.h" #include "EdGraph/EdGraphNode.h" #include "Kismet2/KismetEditorUtilities.h" @@ -21,7 +21,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_StateMachine_SetAnimation : public UObject, public IMCPHandler +class UWing_StateMachine_SetAnimation : public UObject, public IWingHandler { GENERATED_BODY() @@ -46,31 +46,31 @@ public: virtual void Handle() override { // Resolve the anim blueprint - MCPFetcher F; + WingFetcher F; UAnimBlueprint* AnimBP = F.Walk(Blueprint).Cast(); if (!AnimBP) return; // Find the state machine graph - UAnimationStateMachineGraph* SMGraph = MCPUtils::FindStateMachineGraph(AnimBP, Graph); + UAnimationStateMachineGraph* SMGraph = WingUtils::FindStateMachineGraph(AnimBP, Graph); if (!SMGraph) { - UMCPServer::Printf(TEXT("ERROR: State machine graph '%s' not found in %s\n"), *Graph, *MCPUtils::FormatName(AnimBP)); + UWingServer::Printf(TEXT("ERROR: State machine graph '%s' not found in %s\n"), *Graph, *WingUtils::FormatName(AnimBP)); return; } // Find the target state - UAnimStateNode* StateNode = MCPUtils::FindStateByName(SMGraph, StateName); + UAnimStateNode* StateNode = WingUtils::FindStateByName(SMGraph, StateName); if (!StateNode) return; UEdGraph* InnerGraph = StateNode->GetBoundGraph(); if (!InnerGraph) { - UMCPServer::Printf(TEXT("ERROR: State '%s' has no bound graph\n"), *StateName); + UWingServer::Printf(TEXT("ERROR: State '%s' has no bound graph\n"), *StateName); return; } // Find the animation asset - MCPFetcher F2; + WingFetcher F2; UAnimSequence* AnimSeq = F2.Asset(AnimationAsset).Cast(); if (!AnimSeq) return; @@ -99,11 +99,11 @@ public: // Compile and save FKismetEditorUtilities::CompileBlueprint(AnimBP); - MCPUtils::SaveBlueprintPackage(AnimBP); + WingUtils::SaveBlueprintPackage(AnimBP); if (bCreatedNew) - UMCPServer::Printf(TEXT("Created sequence player in state '%s', assigned %s\n"), *StateName, *MCPUtils::FormatName(AnimSeq)); + UWingServer::Printf(TEXT("Created sequence player in state '%s', assigned %s\n"), *StateName, *WingUtils::FormatName(AnimSeq)); else - UMCPServer::Printf(TEXT("Updated sequence player in state '%s' to %s\n"), *StateName, *MCPUtils::FormatName(AnimSeq)); + UWingServer::Printf(TEXT("Updated sequence player in state '%s' to %s\n"), *StateName, *WingUtils::FormatName(AnimSeq)); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/StateMachine_SetBlendSpace.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/StateMachine_SetBlendSpace.h index fcadc5c4..964ff02e 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/StateMachine_SetBlendSpace.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/StateMachine_SetBlendSpace.h @@ -1,10 +1,10 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingUtils.h" #include "EdGraph/EdGraph.h" #include "EdGraph/EdGraphNode.h" #include "EdGraph/EdGraphPin.h" @@ -24,7 +24,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_StateMachine_SetBlendSpace : public UObject, public IMCPHandler +class UWing_StateMachine_SetBlendSpace : public UObject, public IWingHandler { GENERATED_BODY() @@ -56,22 +56,22 @@ public: virtual void Handle() override { // Load the anim blueprint - MCPFetcher F; + WingFetcher F; UAnimBlueprint* AnimBP = F.Asset(Blueprint).Cast(); if (!AnimBP) return; // Find the state machine graph and state - UAnimationStateMachineGraph* SMGraph = MCPUtils::FindStateMachineGraph(AnimBP, Graph); - if (!SMGraph) { UMCPServer::Printf(TEXT("ERROR: State machine graph '%s' not found\n"), *Graph); return; } + UAnimationStateMachineGraph* SMGraph = WingUtils::FindStateMachineGraph(AnimBP, Graph); + if (!SMGraph) { UWingServer::Printf(TEXT("ERROR: State machine graph '%s' not found\n"), *Graph); return; } - UAnimStateNode* StateNode = MCPUtils::FindStateByName(SMGraph, StateName); + UAnimStateNode* StateNode = WingUtils::FindStateByName(SMGraph, StateName); if (!StateNode) return; UEdGraph* InnerGraph = StateNode->GetBoundGraph(); - if (!InnerGraph) { UMCPServer::Printf(TEXT("ERROR: State '%s' has no bound graph\n"), *StateName); return; } + if (!InnerGraph) { UWingServer::Printf(TEXT("ERROR: State '%s' has no bound graph\n"), *StateName); return; } // Load the blend space asset - MCPFetcher F2; + WingFetcher F2; UBlendSpace* BlendSpaceAsset = F2.Asset(BlendSpace).Cast(); if (!BlendSpaceAsset) return; @@ -105,12 +105,12 @@ public: // Compile and save FKismetEditorUtilities::CompileBlueprint(AnimBP); - bool bSaved = MCPUtils::SaveBlueprintPackage(AnimBP); + bool bSaved = WingUtils::SaveBlueprintPackage(AnimBP); - UMCPServer::Printf(TEXT("BlendSpacePlayer %s placed in state %s\n"), - *MCPUtils::FormatName(BSNode), *StateName); + UWingServer::Printf(TEXT("BlendSpacePlayer %s placed in state %s\n"), + *WingUtils::FormatName(BSNode), *StateName); if (!bSaved) - UMCPServer::Print(TEXT("WARNING: Failed to save package\n")); + UWingServer::Print(TEXT("WARNING: Failed to save package\n")); } private: @@ -185,7 +185,7 @@ private: } if (!bVarFound) { - UMCPServer::Printf(TEXT("WARNING: Variable '%s' not found, skipping %s wire\n"), *VarName, PinName); + UWingServer::Printf(TEXT("WARNING: Variable '%s' not found, skipping %s wire\n"), *VarName, PinName); return; } diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/StateMachine_SetTransitionRule.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/StateMachine_SetTransitionRule.h index b0b68825..f3425e37 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/StateMachine_SetTransitionRule.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/StateMachine_SetTransitionRule.h @@ -1,10 +1,10 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingUtils.h" #include "Kismet2/KismetEditorUtilities.h" #include "Animation/AnimBlueprint.h" #include "AnimStateTransitionNode.h" @@ -17,7 +17,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_StateMachine_SetTransitionRule : public UObject, public IMCPHandler +class UWing_StateMachine_SetTransitionRule : public UObject, public IWingHandler { GENERATED_BODY() @@ -56,21 +56,21 @@ public: virtual void Handle() override { - MCPFetcher F; + WingFetcher F; UAnimBlueprint* AnimBP = F.Asset(Blueprint).Cast(); if (!AnimBP) return; - UAnimationStateMachineGraph* SMGraph = MCPUtils::FindStateMachineGraph(AnimBP, Graph); + UAnimationStateMachineGraph* SMGraph = WingUtils::FindStateMachineGraph(AnimBP, Graph); if (!SMGraph) { - UMCPServer::Printf(TEXT("ERROR: State machine graph '%s' not found in '%s'\n"), *Graph, *MCPUtils::FormatName(AnimBP)); + UWingServer::Printf(TEXT("ERROR: State machine graph '%s' not found in '%s'\n"), *Graph, *WingUtils::FormatName(AnimBP)); return; } - UAnimStateTransitionNode* TransNode = MCPUtils::FindTransition(SMGraph, FromState, ToState); + UAnimStateTransitionNode* TransNode = WingUtils::FindTransition(SMGraph, FromState, ToState); if (!TransNode) { - UMCPServer::Printf(TEXT("ERROR: Transition from '%s' to '%s' not found in graph '%s'\n"), + UWingServer::Printf(TEXT("ERROR: Transition from '%s' to '%s' not found in graph '%s'\n"), *FromState, *ToState, *Graph); return; } @@ -84,9 +84,9 @@ public: // Compile and save FKismetEditorUtilities::CompileBlueprint(AnimBP); - MCPUtils::SaveBlueprintPackage(AnimBP); + WingUtils::SaveBlueprintPackage(AnimBP); - UMCPServer::Printf(TEXT("Updated transition %s -> %s: %s\n"), - *FromState, *ToState, *MCPUtils::FormatName(TransNode)); + UWingServer::Printf(TEXT("Updated transition %s -> %s: %s\n"), + *FromState, *ToState, *WingUtils::FormatName(TransNode)); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Struct_Create.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Struct_Create.h index 9870324b..faf35ad7 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Struct_Create.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/HalfBaked/Struct_Create.h @@ -1,16 +1,16 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPTypes.h" -#include "MCPJson.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingTypes.h" +#include "WingJson.h" +#include "WingUtils.h" #include "StructUtils/UserDefinedStruct.h" #include "Kismet2/BlueprintEditorUtils.h" #include "UserDefinedStructure/UserDefinedStructEditorData.h" #include "Factories/StructureFactory.h" -#include "MCPPackageMaker.h" +#include "WingPackageMaker.h" #include "Struct_Create.generated.h" @@ -31,7 +31,7 @@ struct FStructPropertyEntry }; UCLASS() -class UMCP_Struct_Create : public UObject, public IMCPHandler +class UWing_Struct_Create : public UObject, public IWingHandler { GENERATED_BODY() @@ -40,7 +40,7 @@ public: FString AssetPath; UPROPERTY(meta=(Optional, Description="Array of initial properties, each with 'name' and 'type' fields")) - FMCPJsonArray Properties; + FWingJsonArray Properties; virtual FString GetDescription() const override { @@ -49,7 +49,7 @@ public: virtual void Handle() override { - MCPPackageMaker Maker(AssetPath); + WingPackageMaker Maker(AssetPath); if (!Maker.Ok()) return; // Create the struct using the AssetTools factory. @@ -61,11 +61,11 @@ public: for (const TSharedPtr& PropVal : Properties.Array) { FStructPropertyEntry Entry; - if (!MCPJson::PopulateFromJson(FStructPropertyEntry::StaticStruct(), &Entry, PropVal)) return; + if (!WingJson::PopulateFromJson(FStructPropertyEntry::StaticStruct(), &Entry, PropVal)) return; if (Entry.Name.IsEmpty() || Entry.Type.IsEmpty()) continue; FEdGraphPinType PinType; - if (!UMCPTypes::TextToType(Entry.Type, PinType)) + if (!UWingTypes::TextToType(Entry.Type, PinType)) continue; // Snapshot existing GUIDs so we can find the newly added one. @@ -88,12 +88,12 @@ public: PropsAdded++; } - bool bSaved = MCPUtils::SaveGenericPackage(NewStruct); + bool bSaved = WingUtils::SaveGenericPackage(NewStruct); - UMCPServer::Printf(TEXT("Created %s\n"), *NewStruct->GetPathName()); + UWingServer::Printf(TEXT("Created %s\n"), *NewStruct->GetPathName()); if (PropsAdded > 0) - UMCPServer::Printf(TEXT("Properties added: %d\n"), PropsAdded); + UWingServer::Printf(TEXT("Properties added: %d\n"), PropsAdded); if (!bSaved) - UMCPServer::Print(TEXT("WARNING: Package save failed\n")); + UWingServer::Print(TEXT("WARNING: Package save failed\n")); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Asset_Backup.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Asset_Backup.h index 9ea0c484..93766419 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Asset_Backup.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Asset_Backup.h @@ -1,9 +1,9 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingUtils.h" #include "Misc/Paths.h" #include "Misc/PackageName.h" #include "HAL/FileManager.h" @@ -15,7 +15,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_Asset_Backup : public UObject, public IMCPHandler +class UWing_Asset_Backup : public UObject, public IWingHandler { GENERATED_BODY() @@ -35,7 +35,7 @@ public: if (!IFileManager::Get().FileExists(*Filename)) { - UMCPServer::Printf(TEXT("ERROR: Asset file not found: %s\n"), *Filename); + UWingServer::Printf(TEXT("ERROR: Asset file not found: %s\n"), *Filename); return; } @@ -43,10 +43,10 @@ public: uint32 CopyResult = IFileManager::Get().Copy(*BackupFilename, *Filename, true); if (CopyResult != COPY_OK) { - UMCPServer::Printf(TEXT("ERROR: Failed to copy %s to %s\n"), *Filename, *BackupFilename); + UWingServer::Printf(TEXT("ERROR: Failed to copy %s to %s\n"), *Filename, *BackupFilename); return; } - UMCPServer::Printf(TEXT("Backed up to %s\n"), *BackupFilename); + UWingServer::Printf(TEXT("Backed up to %s\n"), *BackupFilename); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Asset_Delete.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Asset_Delete.h index 0545a501..39dd8bdc 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Asset_Delete.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Asset_Delete.h @@ -1,9 +1,9 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingUtils.h" #include "Misc/PackageName.h" #include "AssetRegistry/AssetRegistryModule.h" #include "AssetRegistry/IAssetRegistry.h" @@ -18,7 +18,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_Asset_Delete : public UObject, public IMCPHandler +class UWing_Asset_Delete : public UObject, public IWingHandler { GENERATED_BODY() @@ -44,7 +44,7 @@ public: if (!IFileManager::Get().FileExists(*PackageFilename)) { - UMCPServer::Printf(TEXT("ERROR: Asset file not found on disk: %s\n"), *PackageFilename); + UWingServer::Printf(TEXT("ERROR: Asset file not found on disk: %s\n"), *PackageFilename); return; } @@ -60,22 +60,22 @@ public: if (Referencers.Num() > 0 && !Force) { - UMCPServer::Printf(TEXT("ERROR: Asset is still referenced by %d package(s):\n"), Referencers.Num()); + UWingServer::Printf(TEXT("ERROR: Asset is still referenced by %d package(s):\n"), Referencers.Num()); for (const FName& Ref : Referencers) { FString RefStr = Ref.ToString(); UPackage* RefPackage = FindPackage(nullptr, *RefStr); - UMCPServer::Printf(TEXT(" %s%s\n"), *RefStr, + UWingServer::Printf(TEXT(" %s%s\n"), *RefStr, RefPackage ? TEXT(" (loaded)") : TEXT(" (on-disk only)")); } - UMCPServer::Print(TEXT("Use force=true to skip the reference check.\n")); + UWingServer::Print(TEXT("Use force=true to skip the reference check.\n")); return; } // Force delete: unload the package from memory first if (Force && Referencers.Num() > 0) { - UMCPServer::Printf(TEXT("WARNING: Force-deleting despite %d referencer(s).\n"), Referencers.Num()); + UWingServer::Printf(TEXT("WARNING: Force-deleting despite %d referencer(s).\n"), Referencers.Num()); } // Mark the package, and all the objects in it, as NOT @@ -109,7 +109,7 @@ public: if (!bDeleted) { - UMCPServer::Printf(TEXT("ERROR: Failed to delete file from disk: %s\n"), *PackageFilename); + UWingServer::Printf(TEXT("ERROR: Failed to delete file from disk: %s\n"), *PackageFilename); return; } @@ -122,6 +122,6 @@ public: Registry.ScanPathsSynchronous({PackageDir}, true); } - UMCPServer::Printf(TEXT("Deleted %s\n"), *Asset); + UWingServer::Printf(TEXT("Deleted %s\n"), *Asset); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Asset_FindReferences.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Asset_FindReferences.h index 0efa5806..e00dffeb 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Asset_FindReferences.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Asset_FindReferences.h @@ -1,9 +1,9 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingUtils.h" #include "AssetRegistry/AssetData.h" #include "AssetRegistry/IAssetRegistry.h" #include "Asset_FindReferences.generated.h" @@ -14,7 +14,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_Asset_FindReferences : public UObject, public IMCPHandler +class UWing_Asset_FindReferences : public UObject, public IWingHandler { GENERATED_BODY() @@ -35,7 +35,7 @@ public: FAssetData AssetData = Registry.GetAssetByObjectPath(FSoftObjectPath(Asset)); if (!AssetData.IsValid()) { - UMCPServer::Printf(TEXT("ERROR: Asset not found: %s\n"), *Asset); + UWingServer::Printf(TEXT("ERROR: Asset not found: %s\n"), *Asset); return; } @@ -44,7 +44,7 @@ public: if (Referencers.Num() == 0) { - UMCPServer::Print(TEXT("No referencers found.\n")); + UWingServer::Print(TEXT("No referencers found.\n")); return; } @@ -56,13 +56,13 @@ public: Registry.GetAssetsByPackageName(Ref, RefAssets); if (RefAssets.Num() > 0) { - UMCPServer::Printf(TEXT("%s %s\n"), - *MCPUtils::FormatName(RefAssets[0].GetClass()), + UWingServer::Printf(TEXT("%s %s\n"), + *WingUtils::FormatName(RefAssets[0].GetClass()), *RefStr); } else { - UMCPServer::Printf(TEXT("Unknown %s\n"), *RefStr); + UWingServer::Printf(TEXT("Unknown %s\n"), *RefStr); } } } diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Asset_Rename.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Asset_Rename.h index 1a0e9fc7..d05d15dc 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Asset_Rename.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Asset_Rename.h @@ -1,10 +1,10 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingUtils.h" #include "AssetToolsModule.h" #include "IAssetTools.h" #include "Asset_Rename.generated.h" @@ -15,7 +15,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_Asset_Rename : public UObject, public IMCPHandler +class UWing_Asset_Rename : public UObject, public IWingHandler { GENERATED_BODY() @@ -34,7 +34,7 @@ public: virtual void Handle() override { // Load the asset - MCPFetcher F; + WingFetcher F; UObject* AssetObj = F.Asset(Asset).GetObj(); if (!AssetObj) return; @@ -48,7 +48,7 @@ public: NewAssetName = NewPath; if (NewPackagePath.IsEmpty()) { - UMCPServer::Printf(TEXT("ERROR: Cannot determine directory from Asset '%s'\n"), *Asset); + UWingServer::Printf(TEXT("ERROR: Cannot determine directory from Asset '%s'\n"), *Asset); return; } } @@ -62,10 +62,10 @@ public: if (!AssetTools.RenameAssets(RenameData)) { - UMCPServer::Print(TEXT("ERROR: Rename failed. The target path may be invalid or a conflicting asset may exist.\n")); + UWingServer::Print(TEXT("ERROR: Rename failed. The target path may be invalid or a conflicting asset may exist.\n")); return; } - UMCPServer::Printf(TEXT("Renamed to %s/%s\n"), *NewPackagePath, *NewAssetName); + UWingServer::Printf(TEXT("Renamed to %s/%s\n"), *NewPackagePath, *NewAssetName); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Asset_Restore.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Asset_Restore.h index 341a3ba3..bf9c9954 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Asset_Restore.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Asset_Restore.h @@ -1,9 +1,9 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingUtils.h" #include "Misc/PackageName.h" #include "FileHelpers.h" #include "HAL/FileManager.h" @@ -16,7 +16,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_Asset_Restore : public UObject, public IMCPHandler +class UWing_Asset_Restore : public UObject, public IWingHandler { GENERATED_BODY() @@ -37,7 +37,7 @@ public: if (!IFileManager::Get().FileExists(*BackupFilename)) { - UMCPServer::Printf(TEXT("ERROR: Backup file not found: %s\n"), *BackupFilename); + UWingServer::Printf(TEXT("ERROR: Backup file not found: %s\n"), *BackupFilename); return; } @@ -52,7 +52,7 @@ public: uint32 CopyResult = IFileManager::Get().Copy(*Filename, *BackupFilename, true); if (CopyResult != COPY_OK) { - UMCPServer::Printf(TEXT("ERROR: Failed to copy backup over %s\n"), *Asset); + UWingServer::Printf(TEXT("ERROR: Failed to copy backup over %s\n"), *Asset); return; } @@ -64,12 +64,12 @@ public: UEditorLoadingAndSavingUtils::ReloadPackages({Package}, bReloaded, ErrorMessage, EReloadPackagesInteractionMode::AssumePositive); if (!bReloaded) { - UMCPServer::Printf(TEXT("WARNING: Restored %s but reload failed: %s\n"), + UWingServer::Printf(TEXT("WARNING: Restored %s but reload failed: %s\n"), *Asset, *ErrorMessage.ToString()); return; } } - UMCPServer::Printf(TEXT("Restored %s from backup\n"), *Asset); + UWingServer::Printf(TEXT("Restored %s from backup\n"), *Asset); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Asset_Search.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Asset_Search.h index 997cb4a1..24af8a38 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Asset_Search.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Asset_Search.h @@ -1,9 +1,9 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingUtils.h" #include "AssetRegistry/AssetRegistryModule.h" #include "AssetRegistry/IAssetRegistry.h" #include "Asset_Search.generated.h" @@ -14,7 +14,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_Asset_Search : public UObject, public IMCPHandler +class UWing_Asset_Search : public UObject, public IWingHandler { GENERATED_BODY() @@ -37,7 +37,7 @@ public: { if (Query.IsEmpty() && Type.IsEmpty()) { - UMCPServer::Print(TEXT("ERROR: At least one of Query or Type must be specified\n")); + UWingServer::Print(TEXT("ERROR: At least one of Query or Type must be specified\n")); return; } @@ -49,10 +49,10 @@ public: if (!Type.IsEmpty()) { - UClass* TypeClass = MCPUtils::FindClassByName(Type); + UClass* TypeClass = WingUtils::FindClassByName(Type); if (!TypeClass) { - UMCPServer::Printf(TEXT("ERROR: Unknown asset type '%s'\n"), *Type); + UWingServer::Printf(TEXT("ERROR: Unknown asset type '%s'\n"), *Type); return; } Filter.ClassPaths.Add(TypeClass->GetClassPathName()); @@ -79,18 +79,18 @@ public: for (const FAssetData& Data : Results) { - UMCPServer::Printf(TEXT("%s %s\n"), - *MCPUtils::FormatName(Data.GetClass()), + UWingServer::Printf(TEXT("%s %s\n"), + *WingUtils::FormatName(Data.GetClass()), *Data.PackageName.ToString()); } if (Results.Num() == 0) { - UMCPServer::Print(TEXT("No assets found.\n")); + UWingServer::Print(TEXT("No assets found.\n")); } else if (Results.Num() >= Limit) { - UMCPServer::Printf(TEXT("WARNING: You reached the limit of %d, to raise it, specify the Limit parameter.\n"), Limit); + UWingServer::Printf(TEXT("WARNING: You reached the limit of %d, to raise it, specify the Limit parameter.\n"), Limit); } } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/BlueprintVariable_Create.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/BlueprintVariable_Create.h index 58775238..0e9c81e8 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/BlueprintVariable_Create.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/BlueprintVariable_Create.h @@ -1,14 +1,14 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPJson.h" -#include "MCPProperty.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingJson.h" +#include "WingProperty.h" #include "BPVarEditor.h" -#include "MCPUtils.h" -#include "MCPTypes.h" +#include "WingUtils.h" +#include "WingTypes.h" #include "Engine/Blueprint.h" #include "EdGraphSchema_K2.h" #include "Kismet2/BlueprintEditorUtils.h" @@ -20,7 +20,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_BlueprintVariable_Create : public UObject, public IMCPHandler +class UWing_BlueprintVariable_Create : public UObject, public IWingHandler { GENERATED_BODY() @@ -32,7 +32,7 @@ public: FString Name; UPROPERTY(meta=(Optional, Description="Variable configuration: VarType, Category, DefaultValue, InstanceEditable, BlueprintReadOnly, ExposeOnSpawn, Private, ExposeToCinematics, etc.")) - FMCPJsonObject Config; + FWingJsonObject Config; virtual FString GetDescription() const override { @@ -41,7 +41,7 @@ public: virtual void Handle() override { - MCPFetcher F; + WingFetcher F; UBlueprint* BP = F.Walk(Blueprint).Cast(); if (!BP) return; @@ -49,7 +49,7 @@ public: FName VarFName(*Name); if (FBlueprintEditorUtils::FindNewVariableIndex(BP, VarFName) != INDEX_NONE) { - UMCPServer::Printf(TEXT("ERROR: Variable '%s' already exists in %s\n"), *Name, *MCPUtils::FormatName(BP)); + UWingServer::Printf(TEXT("ERROR: Variable '%s' already exists in %s\n"), *Name, *WingUtils::FormatName(BP)); return; } @@ -58,7 +58,7 @@ public: DefaultType.PinCategory = UEdGraphSchema_K2::PC_Int; if (!FBlueprintEditorUtils::AddMemberVariable(BP, VarFName, DefaultType)) { - UMCPServer::Printf(TEXT("ERROR: Failed to add variable '%s' to %s\n"), *Name, *MCPUtils::FormatName(BP)); + UWingServer::Printf(TEXT("ERROR: Failed to add variable '%s' to %s\n"), *Name, *WingUtils::FormatName(BP)); return; } @@ -73,7 +73,7 @@ public: return; } - UMCPServer::Printf(TEXT("Created variable %s (%s) in %s\n"), - *Name, *UMCPTypes::TypeToText(Editor.Desc->VarType), *MCPUtils::FormatName(BP)); + UWingServer::Printf(TEXT("Created variable %s (%s) in %s\n"), + *Name, *UWingTypes::TypeToText(Editor.Desc->VarType), *WingUtils::FormatName(BP)); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/BlueprintVariable_Delete.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/BlueprintVariable_Delete.h index bbfa9c85..d2069fc5 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/BlueprintVariable_Delete.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/BlueprintVariable_Delete.h @@ -1,10 +1,10 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingUtils.h" #include "BPVarEditor.h" #include "Engine/Blueprint.h" #include "Kismet2/BlueprintEditorUtils.h" @@ -16,7 +16,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_BlueprintVariable_Delete : public UObject, public IMCPHandler +class UWing_BlueprintVariable_Delete : public UObject, public IWingHandler { GENERATED_BODY() @@ -34,7 +34,7 @@ public: virtual void Handle() override { - MCPFetcher F; + WingFetcher F; UBlueprint* BP = F.Walk(Blueprint).Cast(); if (!BP) return; @@ -43,7 +43,7 @@ public: FBlueprintEditorUtils::RemoveMemberVariable(BP, Editor.Desc->VarName); - UMCPServer::Printf(TEXT("Removed variable %s from %s\n"), - *Variable, *MCPUtils::FormatName(BP)); + UWingServer::Printf(TEXT("Removed variable %s from %s\n"), + *Variable, *WingUtils::FormatName(BP)); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/BlueprintVariable_Dump.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/BlueprintVariable_Dump.h index aea4d4eb..796dffc0 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/BlueprintVariable_Dump.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/BlueprintVariable_Dump.h @@ -1,10 +1,10 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingUtils.h" #include "BPVarEditor.h" #include "Engine/Blueprint.h" #include "Kismet2/BlueprintEditorUtils.h" @@ -16,7 +16,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_BlueprintVariable_Dump : public UObject, public IMCPHandler +class UWing_BlueprintVariable_Dump : public UObject, public IWingHandler { GENERATED_BODY() @@ -34,14 +34,14 @@ public: virtual void Handle() override { - MCPFetcher F; + WingFetcher F; UBlueprint* BP = F.Walk(Blueprint).Cast(); if (!BP) return; FBPVarEditor Editor(BP, Variable); if (Editor.NotFound()) return; - UMCPServer::Printf(TEXT("Variable %s in %s:\n"), *Variable, *MCPUtils::FormatName(BP)); + UWingServer::Printf(TEXT("Variable %s in %s:\n"), *Variable, *WingUtils::FormatName(BP)); Editor.Dump(); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/BlueprintVariable_Modify.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/BlueprintVariable_Modify.h index 1325dff2..0cb89ee3 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/BlueprintVariable_Modify.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/BlueprintVariable_Modify.h @@ -1,14 +1,14 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPJson.h" -#include "MCPProperty.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingJson.h" +#include "WingProperty.h" #include "BPVarEditor.h" -#include "MCPUtils.h" -#include "MCPTypes.h" +#include "WingUtils.h" +#include "WingTypes.h" #include "Engine/Blueprint.h" #include "Kismet2/BlueprintEditorUtils.h" #include "BlueprintVariable_Modify.generated.h" @@ -19,7 +19,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_BlueprintVariable_Modify : public UObject, public IMCPHandler +class UWing_BlueprintVariable_Modify : public UObject, public IWingHandler { GENERATED_BODY() @@ -31,7 +31,7 @@ public: FString Variable; UPROPERTY(meta=(Description="Properties to change: VarType, Category, DefaultValue, InstanceEditable, BlueprintReadOnly, ExposeOnSpawn, Private, ExposeToCinematics, etc.")) - FMCPJsonObject Properties; + FWingJsonObject Properties; virtual FString GetDescription() const override { @@ -40,7 +40,7 @@ public: virtual void Handle() override { - MCPFetcher F; + WingFetcher F; UBlueprint* BP = F.Walk(Blueprint).Cast(); if (!BP) return; @@ -49,14 +49,14 @@ public: if (!Properties.Json || Properties.Json->Values.Num() == 0) { - UMCPServer::Print(TEXT("ERROR: No properties specified\n")); + UWingServer::Print(TEXT("ERROR: No properties specified\n")); return; } if (!Editor.ApplyJson(Properties.Json.Get())) return; - UMCPServer::Printf(TEXT("Modified variable %s (%s) in %s\n"), - *Variable, *UMCPTypes::TypeToText(Editor.Desc->VarType), *MCPUtils::FormatName(BP)); + UWingServer::Printf(TEXT("Modified variable %s (%s) in %s\n"), + *Variable, *UWingTypes::TypeToText(Editor.Desc->VarType), *WingUtils::FormatName(BP)); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Blueprint_Create.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Blueprint_Create.h index b08ad7de..d548a100 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Blueprint_Create.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Blueprint_Create.h @@ -1,12 +1,12 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPUtils.h" -#include "MCPTypes.h" -#include "MCPPackageMaker.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingUtils.h" +#include "WingTypes.h" +#include "WingPackageMaker.h" #include "Engine/Blueprint.h" #include "Kismet/BlueprintFunctionLibrary.h" #include "Kismet2/KismetEditorUtilities.h" @@ -18,7 +18,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_Blueprint_Create : public UObject, public IMCPHandler +class UWing_Blueprint_Create : public UObject, public IWingHandler { GENERATED_BODY() @@ -39,7 +39,7 @@ public: virtual void Handle() override { - MCPPackageMaker Maker(AssetPath); + WingPackageMaker Maker(AssetPath); if (!Maker.Ok()) return; // Resolve parent class based on blueprint type @@ -47,11 +47,11 @@ public: switch (BlueprintType) { case BPTYPE_Normal: - ParentClassObj = UMCPTypes::TextToOneObjectType(ParentClass); + ParentClassObj = UWingTypes::TextToOneObjectType(ParentClass); if (!ParentClassObj) return; break; case BPTYPE_MacroLibrary: - ParentClassObj = UMCPTypes::TextToOneObjectType(ParentClass); + ParentClassObj = UWingTypes::TextToOneObjectType(ParentClass); if (!ParentClassObj) return; break; case BPTYPE_Interface: @@ -61,7 +61,7 @@ public: ParentClassObj = UBlueprintFunctionLibrary::StaticClass(); break; default: - UMCPServer::Print(TEXT("ERROR: BlueprintType must be Normal, Interface, FunctionLibrary, or MacroLibrary\n")); + UWingServer::Print(TEXT("ERROR: BlueprintType must be Normal, Interface, FunctionLibrary, or MacroLibrary\n")); return; } @@ -79,16 +79,16 @@ public: if (!NewBP) { - UMCPServer::Print(TEXT("ERROR: FKismetEditorUtilities::CreateBlueprint returned null\n")); + UWingServer::Print(TEXT("ERROR: FKismetEditorUtilities::CreateBlueprint returned null\n")); return; } // Compile and save FKismetEditorUtilities::CompileBlueprint(NewBP); - bool bSaved = MCPUtils::SaveBlueprintPackage(NewBP); + bool bSaved = WingUtils::SaveBlueprintPackage(NewBP); // Report result - UMCPServer::Printf(TEXT("Created: %s\n"), *MCPUtils::FormatName(NewBP)); - if (!bSaved) UMCPServer::Print(TEXT("Warning: save failed\n")); + UWingServer::Printf(TEXT("Created: %s\n"), *WingUtils::FormatName(NewBP)); + if (!bSaved) UWingServer::Print(TEXT("Warning: save failed\n")); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Editor_ListOpenAssets.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Editor_ListOpenAssets.h index a4f25c07..30f5bd75 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Editor_ListOpenAssets.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Editor_ListOpenAssets.h @@ -1,8 +1,8 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" +#include "WingServer.h" +#include "WingHandler.h" #include "Editor.h" #include "Subsystems/AssetEditorSubsystem.h" #include "Editor_ListOpenAssets.generated.h" @@ -13,7 +13,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_Editor_ListOpenAssets : public UObject, public IMCPHandler +class UWing_Editor_ListOpenAssets : public UObject, public IWingHandler { GENERATED_BODY() @@ -28,14 +28,14 @@ public: UAssetEditorSubsystem* Sub = GEditor->GetEditorSubsystem(); if (!Sub) { - UMCPServer::Print(TEXT("Error: AssetEditorSubsystem not available\n")); + UWingServer::Print(TEXT("Error: AssetEditorSubsystem not available\n")); return; } TArray EditedAssets = Sub->GetAllEditedAssets(); if (EditedAssets.IsEmpty()) { - UMCPServer::Print(TEXT("No asset editors are open.\n")); + UWingServer::Print(TEXT("No asset editors are open.\n")); return; } @@ -43,7 +43,7 @@ public: { bool bDirty = Asset->GetOutermost()->IsDirty(); - UMCPServer::Printf(TEXT(" %s%s\n"), + UWingServer::Printf(TEXT(" %s%s\n"), bDirty ? TEXT("[unsaved] ") : TEXT(""), *Asset->GetPathName()); } diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Editor_OpenAsset.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Editor_OpenAsset.h index 23cf2956..d9573f7c 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Editor_OpenAsset.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Editor_OpenAsset.h @@ -1,9 +1,9 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" #include "Editor.h" #include "Subsystems/AssetEditorSubsystem.h" #include "Editor_OpenAsset.generated.h" @@ -14,7 +14,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_Editor_OpenAsset : public UObject, public IMCPHandler +class UWing_Editor_OpenAsset : public UObject, public IWingHandler { GENERATED_BODY() @@ -29,20 +29,20 @@ public: virtual void Handle() override { - MCPFetcher F; + WingFetcher F; UObject* Obj = F.Walk(Asset).Cast(); if (!Obj) return; UAssetEditorSubsystem* Sub = GEditor->GetEditorSubsystem(); if (!Sub) { - UMCPServer::Print(TEXT("Error: AssetEditorSubsystem not available\n")); + UWingServer::Print(TEXT("Error: AssetEditorSubsystem not available\n")); return; } if (Sub->OpenEditorForAsset(Obj)) - UMCPServer::Printf(TEXT("Opened editor for %s\n"), *Obj->GetPathName()); + UWingServer::Printf(TEXT("Opened editor for %s\n"), *Obj->GetPathName()); else - UMCPServer::Printf(TEXT("Error: Could not open editor for %s\n"), *Obj->GetPathName()); + UWingServer::Printf(TEXT("Error: Could not open editor for %s\n"), *Obj->GetPathName()); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_ChooseMenu.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_ChooseMenu.h index 785d1bc0..07bcfc0c 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_ChooseMenu.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_ChooseMenu.h @@ -1,10 +1,10 @@ #pragma once #include "CoreMinimal.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPToolMenu.h" -#include "MCPServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingToolMenu.h" +#include "WingServer.h" #include "ToolMenus.h" #include "GraphNode_ChooseMenu.generated.h" @@ -14,7 +14,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_GraphNode_ChooseMenu : public UObject, public IMCPHandler +class UWing_GraphNode_ChooseMenu : public UObject, public IWingHandler { GENERATED_BODY() @@ -35,29 +35,29 @@ public: private: virtual void Handle() override { - MCPFetcher F; + WingFetcher F; UEdGraphNode* NodeObj = F.Walk(Node).Cast(); if (!NodeObj) return; FToolMenuContext Context; - TArray Entries = MCPToolMenu::GetMenuItems(NodeObj, Context); + TArray Entries = WingToolMenu::GetMenuItems(NodeObj, Context); for (FToolMenuEntry &Entry : Entries) { FString LabelText = Entry.Label.Get().ToString(); if (!LabelText.Equals(Item, ESearchCase::IgnoreCase)) continue; - if (MCPToolMenu::Execute(Entry, Context)) + if (WingToolMenu::Execute(Entry, Context)) { - UMCPServer::Printf(TEXT("Executed: %s\n"), *LabelText); + UWingServer::Printf(TEXT("Executed: %s\n"), *LabelText); } else { - UMCPServer::Printf(TEXT("ERROR: Action '%s' cannot execute (greyed out)\n"), *LabelText); + UWingServer::Printf(TEXT("ERROR: Action '%s' cannot execute (greyed out)\n"), *LabelText); } return; } - UMCPServer::Printf(TEXT("ERROR: Menu item '%s' not found. Use GraphNode_ShowMenu to see available items.\n"), *Item); + UWingServer::Printf(TEXT("ERROR: Menu item '%s' not found. Use GraphNode_ShowMenu to see available items.\n"), *Item); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_Create.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_Create.h index 08ad6645..874f118d 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_Create.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_Create.h @@ -1,11 +1,11 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPJson.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingJson.h" +#include "WingUtils.h" #include "EdGraph/EdGraph.h" #include "EdGraph/EdGraphNode.h" #include "EdGraph/EdGraphSchema.h" @@ -33,7 +33,7 @@ struct FSpawnNodeEntry UCLASS() -class UMCP_GraphNode_Create : public UObject, public IMCPHandler +class UWing_GraphNode_Create : public UObject, public IWingHandler { GENERATED_BODY() @@ -42,7 +42,7 @@ public: FString Graph; UPROPERTY(meta=(Description="Array of {Type, posX, posY} objects. Use GraphNode_SearchTypes to find types.")) - FMCPJsonArray Nodes; + FWingJsonArray Nodes; virtual FString GetDescription() const override { @@ -52,7 +52,7 @@ public: virtual void Handle() override { - MCPFetcher F; + WingFetcher F; UEdGraph* TargetGraph = F.Walk(Graph).Cast(); if (!TargetGraph) return; @@ -62,20 +62,20 @@ public: for (const TSharedPtr& NodeVal : Nodes.Array) { FSpawnNodeEntry Entry; - if (!MCPJson::PopulateFromJson(FSpawnNodeEntry::StaticStruct(), &Entry, NodeVal)) + if (!WingJson::PopulateFromJson(FSpawnNodeEntry::StaticStruct(), &Entry, NodeVal)) continue; // Find the action by exact full name - TArray> Matches = MCPUtils::SearchGraphActions(TargetGraph, Entry.ActionName, 0, /*ExactMatch=*/true); + TArray> Matches = WingUtils::SearchGraphActions(TargetGraph, Entry.ActionName, 0, /*ExactMatch=*/true); if (Matches.Num() == 0) { - UMCPServer::Printf(TEXT("ERROR: No action found matching '%s'. Use GraphNodeSearchTypes to find available actions.\n"), + UWingServer::Printf(TEXT("ERROR: No action found matching '%s'. Use GraphNodeSearchTypes to find available actions.\n"), *Entry.ActionName); continue; } if (Matches.Num() > 1) { - UMCPServer::Printf(TEXT("ERROR: Ambiguous: %d actions match '%s'.\n"), + UWingServer::Printf(TEXT("ERROR: Ambiguous: %d actions match '%s'.\n"), Matches.Num(), *Entry.ActionName); continue; } @@ -85,18 +85,18 @@ public: UEdGraphNode* NewNode = Matches[0]->PerformAction(TargetGraph, nullptr, Location, /*bSelectNewNode=*/false); if (!NewNode) { - UMCPServer::Printf(TEXT("ERROR: PerformAction returned null for '%s'.\n"), *Entry.ActionName); + UWingServer::Printf(TEXT("ERROR: PerformAction returned null for '%s'.\n"), *Entry.ActionName); continue; } if (!NewNode->NodeGuid.IsValid()) NewNode->CreateNewGuid(); - UMCPServer::Printf(TEXT("Spawned: %s (%s)\n"), - *MCPUtils::FormatName(NewNode), *MCPUtils::FormatName(NewNode->GetClass())); + UWingServer::Printf(TEXT("Spawned: %s (%s)\n"), + *WingUtils::FormatName(NewNode), *WingUtils::FormatName(NewNode->GetClass())); SuccessCount++; } - UMCPServer::Printf(TEXT("Spawned %d/%d nodes.\n"), SuccessCount, TotalCount); + UWingServer::Printf(TEXT("Spawned %d/%d nodes.\n"), SuccessCount, TotalCount); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_Delete.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_Delete.h index 9a2b8a38..edf61b9e 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_Delete.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_Delete.h @@ -1,10 +1,10 @@ #pragma once #include "CoreMinimal.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPUtils.h" -#include "MCPServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingUtils.h" +#include "WingServer.h" #include "EdGraph/EdGraph.h" #include "EdGraph/EdGraphNode.h" #include "MaterialGraph/MaterialGraphNode.h" @@ -18,7 +18,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_GraphNode_Delete : public UObject, public IMCPHandler +class UWing_GraphNode_Delete : public UObject, public IWingHandler { GENERATED_BODY() @@ -34,17 +34,17 @@ public: virtual void Handle() override { - MCPFetcher F; + WingFetcher F; UEdGraphNode* FoundNode = F.Walk(Node).Cast(); if (!FoundNode) return; UEdGraph* Graph = FoundNode->GetGraph(); - FString NodeTitle = MCPUtils::FormatName(FoundNode); - FString GraphName = MCPUtils::FormatName(Graph); + FString NodeTitle = WingUtils::FormatName(FoundNode); + FString GraphName = WingUtils::FormatName(Graph); if (!FoundNode->CanUserDeleteNode()) { - UMCPServer::Printf(TEXT("ERROR: Cannot delete node '%s' in graph '%s' — it is not deletable.\n"), + UWingServer::Printf(TEXT("ERROR: Cannot delete node '%s' in graph '%s' — it is not deletable.\n"), *NodeTitle, *GraphName); return; } @@ -63,6 +63,6 @@ public: Graph->RemoveNode(FoundNode); } - UMCPServer::Printf(TEXT("Deleted node '%s' from graph '%s'.\n"), *NodeTitle, *GraphName); + UWingServer::Printf(TEXT("Deleted node '%s' from graph '%s'.\n"), *NodeTitle, *GraphName); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_Dump.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_Dump.h index 32cbc94f..710df50c 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_Dump.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_Dump.h @@ -1,9 +1,9 @@ #pragma once #include "CoreMinimal.h" -#include "MCPHandler.h" -#include "MCPServer.h" -#include "MCPFetcher.h" +#include "WingHandler.h" +#include "WingServer.h" +#include "WingFetcher.h" #include "GraphExport.h" #include "GraphNode_Dump.generated.h" @@ -13,7 +13,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_GraphNode_Dump : public UObject, public IMCPHandler +class UWing_GraphNode_Dump : public UObject, public IWingHandler { GENERATED_BODY() @@ -29,12 +29,12 @@ public: private: virtual void Handle() override { - MCPFetcher F; + WingFetcher F; UEdGraphNode* NodeObj = F.Walk(Node).Cast(); if (!NodeObj) return; - MCPGraphExport Exporter(NodeObj); - UMCPServer::Print(*Exporter.GetOutput()); - UMCPServer::Print(Exporter.GetDetails()); + WingGraphExport Exporter(NodeObj); + UWingServer::Print(*Exporter.GetOutput()); + UWingServer::Print(Exporter.GetDetails()); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_Duplicate.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_Duplicate.h index 530276d2..ead3ea33 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_Duplicate.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_Duplicate.h @@ -1,10 +1,10 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingUtils.h" #include "EdGraph/EdGraph.h" #include "EdGraph/EdGraphNode.h" #include "EdGraph/EdGraphPin.h" @@ -16,7 +16,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_GraphNode_Duplicate : public UObject, public IMCPHandler +class UWing_GraphNode_Duplicate : public UObject, public IWingHandler { GENERATED_BODY() @@ -25,7 +25,7 @@ public: FString Graph; UPROPERTY(meta=(Description="Array of node names to duplicate (as returned by FormatName)")) - FMCPJsonArray Nodes; + FWingJsonArray Nodes; UPROPERTY(meta=(Optional, Description="X offset for duplicated nodes")) int32 OffsetX = 50; @@ -42,13 +42,13 @@ public: virtual void Handle() override { - MCPFetcher F; + WingFetcher F; UEdGraph* TargetGraph = F.Walk(Graph).Cast(); if (!TargetGraph) return; if (Nodes.Array.Num() == 0) { - UMCPServer::Print(TEXT("ERROR: Nodes array is empty\n")); + UWingServer::Print(TEXT("ERROR: Nodes array is empty\n")); return; } @@ -60,7 +60,7 @@ public: UEdGraphNode* Found = nullptr; for (UEdGraphNode* Node : TargetGraph->Nodes) { - if (MCPUtils::Identifies(Name, Node)) + if (WingUtils::Identifies(Name, Node)) { Found = Node; break; @@ -68,7 +68,7 @@ public: } if (!Found) { - UMCPServer::Printf(TEXT("ERROR: Node '%s' not found in graph\n"), *Name); + UWingServer::Printf(TEXT("ERROR: Node '%s' not found in graph\n"), *Name); continue; } SourceNodes.Add(Found); @@ -82,7 +82,7 @@ public: UEdGraphNode* NewNode = DuplicateObject(SourceNode, TargetGraph); if (!NewNode) { - UMCPServer::Printf(TEXT("ERROR: Failed to duplicate %s\n"), *MCPUtils::FormatName(SourceNode)); + UWingServer::Printf(TEXT("ERROR: Failed to duplicate %s\n"), *WingUtils::FormatName(SourceNode)); continue; } @@ -97,7 +97,7 @@ public: } TargetGraph->AddNode(NewNode, false, false); - UMCPServer::Printf(TEXT("Duplicated: %s -> %s\n"), *MCPUtils::FormatName(SourceNode), *MCPUtils::FormatName(NewNode)); + UWingServer::Printf(TEXT("Duplicated: %s -> %s\n"), *WingUtils::FormatName(SourceNode), *WingUtils::FormatName(NewNode)); } } diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_GetComment.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_GetComment.h index 1e875917..5cd41b9d 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_GetComment.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_GetComment.h @@ -1,10 +1,10 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingUtils.h" #include "EdGraph/EdGraphNode.h" #include "GraphNode_GetComment.generated.h" @@ -14,7 +14,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_GraphNode_GetComment : public UObject, public IMCPHandler +class UWing_GraphNode_GetComment : public UObject, public IWingHandler { GENERATED_BODY() @@ -29,12 +29,12 @@ public: virtual void Handle() override { - MCPFetcher F; + WingFetcher F; UEdGraphNode* FoundNode = F.Walk(Node).Cast(); if (!FoundNode) return; - UMCPServer::Printf(TEXT("Node: %s\n"), *MCPUtils::FormatName(FoundNode)); - UMCPServer::Printf(TEXT("Comment: %s\n"), *FoundNode->NodeComment); - UMCPServer::Printf(TEXT("BubbleVisible: %s\n"), FoundNode->bCommentBubbleVisible ? TEXT("true") : TEXT("false")); + UWingServer::Printf(TEXT("Node: %s\n"), *WingUtils::FormatName(FoundNode)); + UWingServer::Printf(TEXT("Comment: %s\n"), *FoundNode->NodeComment); + UWingServer::Printf(TEXT("BubbleVisible: %s\n"), FoundNode->bCommentBubbleVisible ? TEXT("true") : TEXT("false")); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_SearchTypes.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_SearchTypes.h index fb5d16fc..cf20fd1c 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_SearchTypes.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_SearchTypes.h @@ -1,10 +1,10 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingUtils.h" #include "EdGraph/EdGraph.h" #include "EdGraph/EdGraphSchema.h" #include "GraphNode_SearchTypes.generated.h" @@ -15,7 +15,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_GraphNode_SearchTypes : public UObject, public IMCPHandler +class UWing_GraphNode_SearchTypes : public UObject, public IWingHandler { GENERATED_BODY() @@ -40,24 +40,24 @@ public: { int32 ClampedMax = FMath::Clamp(MaxResults, 1, 500); - MCPFetcher F; + WingFetcher F; UEdGraph* TargetGraph = F.Walk(Graph).Cast(); if (!TargetGraph) return; - TArray> Actions = MCPUtils::SearchGraphActions(TargetGraph, Query, ClampedMax, /*ExactMatch=*/false); + TArray> Actions = WingUtils::SearchGraphActions(TargetGraph, Query, ClampedMax, /*ExactMatch=*/false); for (const TSharedPtr& Action : Actions) { - UMCPServer::Printf(TEXT("%s\n"), *MCPUtils::ActionFullName(Action)); + UWingServer::Printf(TEXT("%s\n"), *WingUtils::ActionFullName(Action)); } if (Actions.Num() == 0) { - UMCPServer::Print(TEXT("No matching node types found.\n")); + UWingServer::Print(TEXT("No matching node types found.\n")); } else if (Actions.Num() >= ClampedMax) { - UMCPServer::Printf(TEXT("WARNING: Reached limit of %d results. Refine your query or increase MaxResults.\n"), ClampedMax); + UWingServer::Printf(TEXT("WARNING: Reached limit of %d results. Refine your query or increase MaxResults.\n"), ClampedMax); } } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_SetArgs.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_SetArgs.h index 893a0adb..cc5eac25 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_SetArgs.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_SetArgs.h @@ -1,15 +1,15 @@ #pragma once #include "CoreMinimal.h" -#include "MCPHandler.h" -#include "MCPServer.h" -#include "MCPFetcher.h" -#include "MCPUtils.h" +#include "WingHandler.h" +#include "WingServer.h" +#include "WingFetcher.h" +#include "WingUtils.h" #include "FunctionArgs.h" #include "GraphNode_SetArgs.generated.h" UCLASS() -class UMCP_GraphNode_SetArgs : public UObject, public IMCPHandler +class UWing_GraphNode_SetArgs : public UObject, public IWingHandler { GENERATED_BODY() @@ -27,18 +27,18 @@ public: virtual void Handle() override { - MCPFetcher F; + WingFetcher F; UEdGraphNode* NodeObj = F.Walk(Node).Cast(); if (!NodeObj) return; - if (!MCPFunctionArgs::HasArgs(NodeObj)) + if (!WingFunctionArgs::HasArgs(NodeObj)) { - UMCPServer::Printf(TEXT("ERROR: Node does not support editable args\n")); + UWingServer::Printf(TEXT("ERROR: Node does not support editable args\n")); return; } - if (!MCPFunctionArgs::SetArgs(NodeObj, Args)) return; + if (!WingFunctionArgs::SetArgs(NodeObj, Args)) return; - UMCPServer::Printf(TEXT("Args set to: %s\n"), *MCPFunctionArgs::GetArgs(NodeObj)); + UWingServer::Printf(TEXT("Args set to: %s\n"), *WingFunctionArgs::GetArgs(NodeObj)); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_SetComment.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_SetComment.h index 182fc022..b786d144 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_SetComment.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_SetComment.h @@ -1,10 +1,10 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingUtils.h" #include "EdGraph/EdGraphNode.h" #include "GraphNode_SetComment.generated.h" @@ -14,7 +14,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_GraphNode_SetComment : public UObject, public IMCPHandler +class UWing_GraphNode_SetComment : public UObject, public IWingHandler { GENERATED_BODY() @@ -33,7 +33,7 @@ public: virtual void Handle() override { - MCPFetcher F; + WingFetcher F; UEdGraphNode* FoundNode = F.Walk(Node).Cast(); if (!FoundNode) return; @@ -41,6 +41,6 @@ public: FoundNode->bCommentBubbleVisible = !Comment.IsEmpty(); FoundNode->bCommentBubblePinned = !Comment.IsEmpty(); - UMCPServer::Printf(TEXT("Comment set on %s\n"), *MCPUtils::FormatName(FoundNode)); + UWingServer::Printf(TEXT("Comment set on %s\n"), *WingUtils::FormatName(FoundNode)); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_SetDefaults.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_SetDefaults.h index 7048b954..8124234f 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_SetDefaults.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_SetDefaults.h @@ -1,12 +1,12 @@ #pragma once #include "CoreMinimal.h" -#include "MCPHandler.h" -#include "MCPServer.h" -#include "MCPFetcher.h" -#include "MCPProperty.h" -#include "MCPJson.h" -#include "MCPUtils.h" +#include "WingHandler.h" +#include "WingServer.h" +#include "WingFetcher.h" +#include "WingProperty.h" +#include "WingJson.h" +#include "WingUtils.h" #include "EdGraph/EdGraphPin.h" #include "EdGraphSchema_K2.h" #include "MaterialGraph/MaterialGraphSchema.h" @@ -34,7 +34,7 @@ struct FSetNodeDefaultEntry UCLASS() -class UMCP_GraphNode_SetDefaults : public UObject, public IMCPHandler +class UWing_GraphNode_SetDefaults : public UObject, public IWingHandler { GENERATED_BODY() @@ -43,7 +43,7 @@ public: FString Graph; UPROPERTY(meta=(Description="Array of {node, name, value} objects")) - FMCPJsonArray Pins; + FWingJsonArray Pins; virtual FString GetDescription() const override { @@ -56,7 +56,7 @@ public: void HandleK2Entry(const FSetNodeDefaultEntry& Entry, UEdGraph* GraphObj, const UEdGraphSchema_K2* K2Schema) { - MCPFetcher F(GraphObj); + WingFetcher F(GraphObj); UEdGraphPin* Pin = F.Node(Entry.Node).Pin(Entry.Name).Cast(); if (!Pin) return; @@ -64,7 +64,7 @@ public: if (Pin->Direction != EGPD_Input) { - UMCPServer::Printf(TEXT("error: %s is an output pin\n"), *MCPUtils::FormatName(Pin)); + UWingServer::Printf(TEXT("error: %s is an output pin\n"), *WingUtils::FormatName(Pin)); return; } @@ -77,10 +77,10 @@ public: FString Error = K2Schema->IsPinDefaultValid(Pin, UseDefaultValue, UseDefaultObject, UseDefaultText); if (!Error.IsEmpty()) { - UMCPServer::Printf(TEXT("error: %s: %s\n"), *MCPUtils::FormatName(Pin), *Error); + UWingServer::Printf(TEXT("error: %s: %s\n"), *WingUtils::FormatName(Pin), *Error); return; } - UMCPServer::AddTouchedObject(Node); + UWingServer::AddTouchedObject(Node); K2Schema->TrySetDefaultValue(*Pin, Entry.Value); } @@ -90,15 +90,15 @@ public: void HandleMaterialEntry(const FSetNodeDefaultEntry& Entry, UEdGraph* GraphObj) { - MCPFetcher F(GraphObj); + WingFetcher F(GraphObj); UEdGraphNode* Node = F.Node(Entry.Node).Cast(); if (!Node) return; - TArray All = MCPProperty::GetAll(Node, CPF_Edit); - MCPProperty P = MCPProperty::FindOneExactMatch(All, Entry.Name); + TArray All = WingProperty::GetAll(Node, CPF_Edit); + WingProperty P = WingProperty::FindOneExactMatch(All, Entry.Name); if (!P) return; - UMCPServer::AddTouchedObject(Node); + UWingServer::AddTouchedObject(Node); if (!P.SetText(Entry.Value)) return; @@ -109,7 +109,7 @@ public: virtual void Handle() override { // Fetch the graph once. - MCPFetcher GraphFetcher; + WingFetcher GraphFetcher; UEdGraph* GraphObj = GraphFetcher.Walk(Graph).Cast(); if (!GraphObj) return; @@ -119,14 +119,14 @@ public: if (!K2Schema && !MGSchema) { - UMCPServer::Printf(TEXT("error: unsupported graph schema %s\n"), *Schema->GetClass()->GetName()); + UWingServer::Printf(TEXT("error: unsupported graph schema %s\n"), *Schema->GetClass()->GetName()); return; } for (const TSharedPtr& PinVal : Pins.Array) { FSetNodeDefaultEntry Entry; - if (!MCPJson::PopulateFromJson(FSetNodeDefaultEntry::StaticStruct(), &Entry, PinVal)) + if (!WingJson::PopulateFromJson(FSetNodeDefaultEntry::StaticStruct(), &Entry, PinVal)) continue; if (K2Schema) @@ -135,6 +135,6 @@ public: HandleMaterialEntry(Entry, GraphObj); } - UMCPServer::Printf(TEXT("Done.\n")); + UWingServer::Printf(TEXT("Done.\n")); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_SetPositions.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_SetPositions.h index b2f2bd9b..bd191dd0 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_SetPositions.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_SetPositions.h @@ -1,11 +1,11 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPJson.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingJson.h" +#include "WingUtils.h" #include "Engine/Blueprint.h" #include "EdGraph/EdGraphNode.h" #include "GraphNode_SetPositions.generated.h" @@ -32,7 +32,7 @@ struct FMoveNodeEntry UCLASS() -class UMCP_GraphNode_SetPositions : public UObject, public IMCPHandler +class UWing_GraphNode_SetPositions : public UObject, public IWingHandler { GENERATED_BODY() @@ -41,7 +41,7 @@ public: FString Graph; UPROPERTY(meta=(Description="Array of {node, x, y} objects")) - FMCPJsonArray Nodes; + FWingJsonArray Nodes; virtual FString GetDescription() const override { @@ -50,7 +50,7 @@ public: virtual void Handle() override { - MCPFetcher F; + WingFetcher F; UEdGraph* TargetGraph = F.Walk(Graph).Cast(); if (!TargetGraph) return; @@ -59,9 +59,9 @@ public: for (const TSharedPtr& NodeVal : Nodes.Array) { FMoveNodeEntry Entry; - if (!MCPJson::PopulateFromJson(FMoveNodeEntry::StaticStruct(), &Entry, NodeVal)) continue; + if (!WingJson::PopulateFromJson(FMoveNodeEntry::StaticStruct(), &Entry, NodeVal)) continue; - MCPFetcher FN(TargetGraph); + WingFetcher FN(TargetGraph); UEdGraphNode* Node = FN.Node(Entry.Node).Cast(); if (!Node) continue; @@ -70,6 +70,6 @@ public: SuccessCount++; } - UMCPServer::Printf(TEXT("Moved %d/%d nodes.\n"), SuccessCount, Nodes.Array.Num()); + UWingServer::Printf(TEXT("Moved %d/%d nodes.\n"), SuccessCount, Nodes.Array.Num()); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_ShowMenu.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_ShowMenu.h index b22ac919..53c0e649 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_ShowMenu.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphNode_ShowMenu.h @@ -1,10 +1,10 @@ #pragma once #include "CoreMinimal.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPToolMenu.h" -#include "MCPServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingToolMenu.h" +#include "WingServer.h" #include "ToolMenus.h" #include "MaterialGraph/MaterialGraphNode.h" #include "GraphNode_ShowMenu.generated.h" @@ -15,7 +15,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_GraphNode_ShowMenu : public UObject, public IMCPHandler +class UWing_GraphNode_ShowMenu : public UObject, public IWingHandler { GENERATED_BODY() @@ -31,22 +31,22 @@ public: private: virtual void Handle() override { - MCPFetcher F; + WingFetcher F; UEdGraphNode* NodeObj = F.Walk(Node).Cast(); if (!NodeObj) return; if (Cast(NodeObj)) { - UMCPServer::Printf(TEXT("Material graph nodes do not have usable context menus.")); + UWingServer::Printf(TEXT("Material graph nodes do not have usable context menus.")); return; } FToolMenuContext Context; - TArray Entries = MCPToolMenu::GetMenuItems(NodeObj, Context); + TArray Entries = WingToolMenu::GetMenuItems(NodeObj, Context); for (FToolMenuEntry &Entry : Entries) { FString LabelText = Entry.Label.Get().ToString(); - UMCPServer::Printf(TEXT("%s\n"), *LabelText); + UWingServer::Printf(TEXT("%s\n"), *LabelText); } - if (Entries.IsEmpty()) UMCPServer::Printf(TEXT("No selectable menu entries right now.\n")); + if (Entries.IsEmpty()) UWingServer::Printf(TEXT("No selectable menu entries right now.\n")); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphPin_Connect.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphPin_Connect.h index 174795d5..ea802708 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphPin_Connect.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphPin_Connect.h @@ -1,11 +1,11 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPJson.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingJson.h" +#include "WingUtils.h" #include "Engine/Blueprint.h" #include "EdGraph/EdGraph.h" #include "EdGraph/EdGraphPin.h" @@ -31,7 +31,7 @@ struct FConnectPinsEntry UCLASS() -class UMCP_GraphPin_Connect : public UObject, public IMCPHandler +class UWing_GraphPin_Connect : public UObject, public IWingHandler { GENERATED_BODY() @@ -40,7 +40,7 @@ public: FString Graph; UPROPERTY(meta=(Description="Array of {sourcePin, targetPin} objects")) - FMCPJsonArray Connections; + FWingJsonArray Connections; virtual FString GetDescription() const override { @@ -49,7 +49,7 @@ public: virtual void Handle() override { - MCPFetcher F; + WingFetcher F; UEdGraph* G = F.Walk(Graph).Cast(); if (!G) return; @@ -59,14 +59,14 @@ public: for (const TSharedPtr& ConnVal : Connections.Array) { FConnectPinsEntry Entry; - if (!MCPJson::PopulateFromJson(FConnectPinsEntry::StaticStruct(), &Entry, ConnVal)) + if (!WingJson::PopulateFromJson(FConnectPinsEntry::StaticStruct(), &Entry, ConnVal)) continue; - MCPFetcher FS(G); + WingFetcher FS(G); UEdGraphPin* SourcePin = FS.Walk(Entry.SourcePin).Cast(); if (!SourcePin) continue; - MCPFetcher FT(G); + WingFetcher FT(G); UEdGraphPin* TargetPin = FT.Walk(Entry.TargetPin).Cast(); if (!TargetPin) continue; @@ -74,9 +74,9 @@ public: const FPinConnectionResponse Response = Schema->CanCreateConnection(SourcePin, TargetPin); if (Response.Response == CONNECT_RESPONSE_DISALLOW) { - UMCPServer::Printf(TEXT("error: Cannot connect %s.%s to %s.%s: %s\n"), - *MCPUtils::FormatName(SourcePin->GetOwningNode()), *MCPUtils::FormatName(SourcePin), - *MCPUtils::FormatName(TargetPin->GetOwningNode()), *MCPUtils::FormatName(TargetPin), + UWingServer::Printf(TEXT("error: Cannot connect %s.%s to %s.%s: %s\n"), + *WingUtils::FormatName(SourcePin->GetOwningNode()), *WingUtils::FormatName(SourcePin), + *WingUtils::FormatName(TargetPin->GetOwningNode()), *WingUtils::FormatName(TargetPin), *Response.Message.ToString()); continue; } @@ -85,6 +85,6 @@ public: SuccessCount++; } - UMCPServer::Printf(TEXT("Connected %d/%d pins.\n"), SuccessCount, TotalCount); + UWingServer::Printf(TEXT("Connected %d/%d pins.\n"), SuccessCount, TotalCount); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphPin_Disconnect.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphPin_Disconnect.h index 9816e02c..83baba64 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphPin_Disconnect.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/GraphPin_Disconnect.h @@ -1,11 +1,11 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPJson.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingJson.h" +#include "WingUtils.h" #include "Engine/Blueprint.h" #include "EdGraph/EdGraph.h" #include "EdGraph/EdGraphPin.h" @@ -30,7 +30,7 @@ struct FDisconnectPinEntry UCLASS() -class UMCP_GraphPin_Disconnect : public UObject, public IMCPHandler +class UWing_GraphPin_Disconnect : public UObject, public IWingHandler { GENERATED_BODY() @@ -39,7 +39,7 @@ public: FString Graph; UPROPERTY(meta=(Description="Array of {pin, targetPin?} objects. If targetPin is omitted, all connections on the pin are broken.")) - FMCPJsonArray Disconnections; + FWingJsonArray Disconnections; virtual FString GetDescription() const override { @@ -49,7 +49,7 @@ public: virtual void Handle() override { - MCPFetcher F; + WingFetcher F; UEdGraph* G = F.Walk(Graph).Cast(); if (!G) return; @@ -59,9 +59,9 @@ public: for (const TSharedPtr& DiscVal : Disconnections.Array) { FDisconnectPinEntry Entry; - if (!MCPJson::PopulateFromJson(FDisconnectPinEntry::StaticStruct(), &Entry, DiscVal)) continue; + if (!WingJson::PopulateFromJson(FDisconnectPinEntry::StaticStruct(), &Entry, DiscVal)) continue; - MCPFetcher FP(G); + WingFetcher FP(G); UEdGraphPin* Pin = FP.Walk(Entry.Pin).Cast(); if (!Pin) continue; @@ -69,15 +69,15 @@ public: if (!Entry.TargetPin.IsEmpty()) { - MCPFetcher FT(G); + WingFetcher FT(G); UEdGraphPin* Target = FT.Walk(Entry.TargetPin).Cast(); if (!Target) continue; if (!Pin->LinkedTo.Contains(Target)) { - UMCPServer::Printf(TEXT("Error: %s.%s is not connected to %s.%s\n"), - *MCPUtils::FormatName(Pin->GetOwningNode()), *MCPUtils::FormatName(Pin), - *MCPUtils::FormatName(Target->GetOwningNode()), *MCPUtils::FormatName(Target)); + UWingServer::Printf(TEXT("Error: %s.%s is not connected to %s.%s\n"), + *WingUtils::FormatName(Pin->GetOwningNode()), *WingUtils::FormatName(Pin), + *WingUtils::FormatName(Target->GetOwningNode()), *WingUtils::FormatName(Target)); continue; } @@ -93,14 +93,14 @@ public: } } - UMCPServer::Printf(TEXT("Disconnected %d link(s) from %s.%s\n"), + UWingServer::Printf(TEXT("Disconnected %d link(s) from %s.%s\n"), DisconnectedCount, - *MCPUtils::FormatName(Pin->GetOwningNode()), *MCPUtils::FormatName(Pin)); + *WingUtils::FormatName(Pin->GetOwningNode()), *WingUtils::FormatName(Pin)); SuccessCount++; TotalDisconnected += DisconnectedCount; } - UMCPServer::Printf(TEXT("Done: %d/%d succeeded, %d links broken.\n"), + UWingServer::Printf(TEXT("Done: %d/%d succeeded, %d links broken.\n"), SuccessCount, Disconnections.Array.Num(), TotalDisconnected); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Graph_Dump.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Graph_Dump.h index a6f1eff8..b85941a2 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Graph_Dump.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Graph_Dump.h @@ -1,10 +1,10 @@ #pragma once #include "CoreMinimal.h" -#include "MCPHandler.h" -#include "MCPServer.h" -#include "MCPFetcher.h" -#include "MCPUtils.h" +#include "WingHandler.h" +#include "WingServer.h" +#include "WingFetcher.h" +#include "WingUtils.h" #include "GraphExport.h" #include "Engine/Blueprint.h" #include "EdGraph/EdGraph.h" @@ -18,7 +18,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_Graph_Dump : public UObject, public IMCPHandler +class UWing_Graph_Dump : public UObject, public IWingHandler { GENERATED_BODY() @@ -36,19 +36,19 @@ public: virtual void Handle() override { - MCPFetcher F; + WingFetcher F; UEdGraph *G = F.Walk(Graph).Cast(); if (!G) return; - MCPGraphExport Exporter(G); - UMCPServer::Print(*Exporter.GetOutput()); + WingGraphExport Exporter(G); + UWingServer::Print(*Exporter.GetOutput()); if (bDetails) { - UMCPServer::Print(Exporter.GetDetails()); + UWingServer::Print(Exporter.GetDetails()); } else { - UMCPServer::Printf(TEXT("Note: use bDetails=true to see suppressed details.")); + UWingServer::Printf(TEXT("Note: use bDetails=true to see suppressed details.")); } } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/MaterialInstance_ClearParameter.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/MaterialInstance_ClearParameter.h index 620d98d4..c8cfd478 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/MaterialInstance_ClearParameter.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/MaterialInstance_ClearParameter.h @@ -1,10 +1,10 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingUtils.h" #include "MaterialParameter.h" #include "Materials/MaterialInstanceConstant.h" #include "MaterialTypes.h" @@ -16,7 +16,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_MaterialInstance_ClearParameter : public UObject, public IMCPHandler +class UWing_MaterialInstance_ClearParameter : public UObject, public IWingHandler { GENERATED_BODY() @@ -40,13 +40,13 @@ public: virtual void Handle() override { - MCPFetcher F; + WingFetcher F; UMaterialInstanceConstant* MI = F.Asset(MaterialInstance).Cast(); if (!MI) return; // Parse the association string. EMaterialParameterAssociation Association; - if (!MCPMaterialParameter::ParseMaterialParameterAssociation(ParameterAssociation, Association)) + if (!WingMaterialParameter::ParseMaterialParameterAssociation(ParameterAssociation, Association)) return; FMaterialParameterInfo ParamID(*Parameter, Association, ParameterLayer); @@ -68,13 +68,13 @@ public: if (Removed == 0) { - UMCPServer::Printf(TEXT("No override found for parameter '%s' (association=%s layer=%d) on %s"), - *Parameter, *ParameterAssociation, ParameterLayer, *MCPUtils::FormatName(MI)); + UWingServer::Printf(TEXT("No override found for parameter '%s' (association=%s layer=%d) on %s"), + *Parameter, *ParameterAssociation, ParameterLayer, *WingUtils::FormatName(MI)); return; } - MCPUtils::SaveGenericPackage(MI); - UMCPServer::Printf(TEXT("Cleared override for '%s' on %s\n"), - *Parameter, *MCPUtils::FormatName(MI)); + WingUtils::SaveGenericPackage(MI); + UWingServer::Printf(TEXT("Cleared override for '%s' on %s\n"), + *Parameter, *WingUtils::FormatName(MI)); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/MaterialInstance_Create.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/MaterialInstance_Create.h index dd4057d4..1aadfec2 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/MaterialInstance_Create.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/MaterialInstance_Create.h @@ -1,15 +1,15 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingUtils.h" #include "Materials/Material.h" #include "Materials/MaterialInterface.h" #include "Materials/MaterialInstanceConstant.h" #include "Factories/MaterialInstanceConstantFactoryNew.h" -#include "MCPPackageMaker.h" +#include "WingPackageMaker.h" #include "MaterialInstance_Create.generated.h" @@ -18,7 +18,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_MaterialInstance_Create : public UObject, public IMCPHandler +class UWing_MaterialInstance_Create : public UObject, public IWingHandler { GENERATED_BODY() @@ -36,16 +36,16 @@ public: virtual void Handle() override { - MCPPackageMaker Maker(AssetPath); + WingPackageMaker Maker(AssetPath); if (!Maker.Ok()) return; // Load parent material by package path. - MCPFetcher F; + WingFetcher F; UObject* ParentObj = F.Asset(ParentMaterial).GetObj(); UMaterialInterface* ParentMaterialObj = ParentObj ? Cast(ParentObj) : nullptr; if (!ParentMaterialObj) { - UMCPServer::Printf(TEXT("ERROR: Parent material '%s' not found or not a material\n"), *ParentMaterial); + UWingServer::Printf(TEXT("ERROR: Parent material '%s' not found or not a material\n"), *ParentMaterial); return; } @@ -57,16 +57,16 @@ public: MI->Parent = ParentMaterialObj; // Save. - bool bSaved = MCPUtils::SaveGenericPackage(MI); + bool bSaved = WingUtils::SaveGenericPackage(MI); - UMCPServer::Printf(TEXT("Created %s\n"), *MI->GetPathName()); + UWingServer::Printf(TEXT("Created %s\n"), *MI->GetPathName()); if (UMaterialInstance* ParentMI = Cast(ParentMaterialObj)) - UMCPServer::Printf(TEXT("Parent: %s\n"), *MCPUtils::FormatName(ParentMI)); + UWingServer::Printf(TEXT("Parent: %s\n"), *WingUtils::FormatName(ParentMI)); else if (UMaterial* ParentMat = Cast(ParentMaterialObj)) - UMCPServer::Printf(TEXT("Parent: %s\n"), *MCPUtils::FormatName(ParentMat)); + UWingServer::Printf(TEXT("Parent: %s\n"), *WingUtils::FormatName(ParentMat)); else - UMCPServer::Printf(TEXT("Parent: %s\n"), *ParentMaterialObj->GetPathName()); + UWingServer::Printf(TEXT("Parent: %s\n"), *ParentMaterialObj->GetPathName()); if (!bSaved) - UMCPServer::Print(TEXT("WARNING: Package save failed\n")); + UWingServer::Print(TEXT("WARNING: Package save failed\n")); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/MaterialInstance_DumpParameters.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/MaterialInstance_DumpParameters.h index 1d5c0c46..1285f6ef 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/MaterialInstance_DumpParameters.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/MaterialInstance_DumpParameters.h @@ -1,10 +1,10 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingUtils.h" #include "MaterialParameter.h" #include "Materials/MaterialInstanceConstant.h" #include "MaterialTypes.h" @@ -16,7 +16,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_MaterialInstance_DumpParameters : public UObject, public IMCPHandler +class UWing_MaterialInstance_DumpParameters : public UObject, public IWingHandler { GENERATED_BODY() @@ -31,19 +31,19 @@ public: virtual void Handle() override { - MCPFetcher F; + WingFetcher F; UMaterialInstanceConstant* MI = F.Asset(MaterialInstance).Cast(); if (!MI) return; - auto AllParams = MCPMaterialParameter::GetMaterialParameters(MI); + auto AllParams = WingMaterialParameter::GetMaterialParameters(MI); // Overridden parameters first. bool bHasOverrides = false; for (auto& [Info, Meta] : AllParams) { if (!Meta.bOverride) continue; - if (!bHasOverrides) { UMCPServer::Print(TEXT("\nOverridden Parameters:\n")); bHasOverrides = true; } - MCPMaterialParameter::FormatMaterialParameter(Info, Meta); + if (!bHasOverrides) { UWingServer::Print(TEXT("\nOverridden Parameters:\n")); bHasOverrides = true; } + WingMaterialParameter::FormatMaterialParameter(Info, Meta); } // Inherited (non-overridden) parameters. @@ -51,8 +51,8 @@ public: for (auto& [Info, Meta] : AllParams) { if (Meta.bOverride) continue; - if (!bHasInherited) { UMCPServer::Print(TEXT("\nInherited Parameters (not overridden):\n")); bHasInherited = true; } - MCPMaterialParameter::FormatMaterialParameter(Info, Meta); + if (!bHasInherited) { UWingServer::Print(TEXT("\nInherited Parameters (not overridden):\n")); bHasInherited = true; } + WingMaterialParameter::FormatMaterialParameter(Info, Meta); } } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/MaterialInstance_SetParameter.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/MaterialInstance_SetParameter.h index 53ca560b..525706e0 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/MaterialInstance_SetParameter.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/MaterialInstance_SetParameter.h @@ -1,10 +1,10 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingUtils.h" #include "MaterialParameter.h" #include "Materials/MaterialInstanceConstant.h" #include "MaterialTypes.h" @@ -17,7 +17,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_MaterialInstance_SetParameter : public UObject, public IMCPHandler +class UWing_MaterialInstance_SetParameter : public UObject, public IWingHandler { GENERATED_BODY() @@ -44,30 +44,30 @@ public: virtual void Handle() override { - MCPFetcher F; + WingFetcher F; UMaterialInstanceConstant* MI = F.Asset(MaterialInstance).Cast(); if (!MI) return; // Parse the association string. EMaterialParameterAssociation Association; - if (!MCPMaterialParameter::ParseMaterialParameterAssociation(ParameterAssociation, Association)) + if (!WingMaterialParameter::ParseMaterialParameterAssociation(ParameterAssociation, Association)) return; // Build the parameter ID to look up. FMaterialParameterInfo ParamID(*Parameter, Association, ParameterLayer); // Find it in the material's parameter map. - auto AllParams = MCPMaterialParameter::GetMaterialParameters(MI); + auto AllParams = WingMaterialParameter::GetMaterialParameters(MI); FMaterialParameterMetadata* Found = AllParams.Find(ParamID); if (!Found) { - UMCPServer::Printf(TEXT("No parameter named '%s' with association=%s layer=%d"), + UWingServer::Printf(TEXT("No parameter named '%s' with association=%s layer=%d"), *Parameter, *ParameterAssociation, ParameterLayer); return; } if (Found->PrimitiveDataIndex != INDEX_NONE) { - UMCPServer::Printf(TEXT("Parameter '%s' uses custom primitive data and cannot be set on a material instance"), *Parameter); + UWingServer::Printf(TEXT("Parameter '%s' uses custom primitive data and cannot be set on a material instance"), *Parameter); return; } @@ -80,7 +80,7 @@ public: float ScalarValue; if (!FDefaultValueHelper::ParseFloat(Value, ScalarValue)) { - UMCPServer::Printf(TEXT("Failed to parse '%s' as a float"), *Value); + UWingServer::Printf(TEXT("Failed to parse '%s' as a float"), *Value); return; } MI->SetScalarParameterValueEditorOnly(ParamID, ScalarValue); @@ -91,19 +91,19 @@ public: FLinearColor Color; if (!Color.InitFromString(Value)) { - UMCPServer::Printf(TEXT("Failed to parse '%s' as a color/vector (expected format: '(R=1,G=0,B=0,A=1)')"), *Value); + UWingServer::Printf(TEXT("Failed to parse '%s' as a color/vector (expected format: '(R=1,G=0,B=0,A=1)')"), *Value); return; } MI->SetVectorParameterValueEditorOnly(ParamID, Color); break; } default: - UMCPServer::Printf(TEXT("Parameters of type %d (see EMaterialParameterType) are not implemented"), (int)Type); + UWingServer::Printf(TEXT("Parameters of type %d (see EMaterialParameterType) are not implemented"), (int)Type); return; } - MCPUtils::SaveGenericPackage(MI); + WingUtils::SaveGenericPackage(MI); - UMCPServer::Printf(TEXT("Set '%s' = %s on %s\n"), - *Parameter, *Value, *MCPUtils::FormatName(MI)); + UWingServer::Printf(TEXT("Set '%s' = %s on %s\n"), + *Parameter, *Value, *WingUtils::FormatName(MI)); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Material_Compile.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Material_Compile.h index 212d5b39..47462ab3 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Material_Compile.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Material_Compile.h @@ -1,10 +1,10 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingUtils.h" #include "Materials/Material.h" #include "Material_Compile.generated.h" @@ -14,7 +14,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_Material_Compile : public UObject, public IMCPHandler +class UWing_Material_Compile : public UObject, public IWingHandler { GENERATED_BODY() @@ -30,7 +30,7 @@ public: virtual void Handle() override { // Load material - MCPFetcher F; + WingFetcher F; UMaterial* MaterialObj = F.Asset(Material).Cast(); if (!MaterialObj) return; @@ -48,14 +48,14 @@ public: if (Errors.IsEmpty()) { - UMCPServer::Printf(TEXT("%s compiled successfully.\n"), *MCPUtils::FormatName(MaterialObj)); + UWingServer::Printf(TEXT("%s compiled successfully.\n"), *WingUtils::FormatName(MaterialObj)); } else { - UMCPServer::Printf(TEXT("%s compiled with %d error(s):\n"), *MCPUtils::FormatName(MaterialObj), Errors.Num()); + UWingServer::Printf(TEXT("%s compiled with %d error(s):\n"), *WingUtils::FormatName(MaterialObj), Errors.Num()); for (const FString& Err : Errors) { - UMCPServer::Printf(TEXT(" %s\n"), *Err); + UWingServer::Printf(TEXT(" %s\n"), *Err); } } } diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Material_Create.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Material_Create.h index 0c788306..e2df6cf7 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Material_Create.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Material_Create.h @@ -1,13 +1,13 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingUtils.h" #include "Materials/Material.h" #include "MaterialDomain.h" #include "Factories/MaterialFactoryNew.h" -#include "MCPPackageMaker.h" +#include "WingPackageMaker.h" #include "Material_Create.generated.h" @@ -16,7 +16,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_Material_Create : public UObject, public IMCPHandler +class UWing_Material_Create : public UObject, public IWingHandler { GENERATED_BODY() @@ -31,15 +31,15 @@ public: virtual void Handle() override { - MCPPackageMaker Maker(Material); + WingPackageMaker Maker(Material); if (!Maker.Ok()) return; // Create via IAssetTools + factory. UMaterial* MaterialObj = Maker.CreateAsset(); if (!MaterialObj) return; - bool bSaved = MCPUtils::SaveGenericPackage(MaterialObj); - UMCPServer::Printf(TEXT("Created %s\n"), *MaterialObj->GetPathName()); - if (!bSaved) UMCPServer::Print(TEXT("WARNING: Package save failed\n")); + bool bSaved = WingUtils::SaveGenericPackage(MaterialObj); + UWingServer::Printf(TEXT("Created %s\n"), *MaterialObj->GetPathName()); + if (!bSaved) UWingServer::Print(TEXT("WARNING: Package save failed\n")); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Material_DumpParameters.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Material_DumpParameters.h index 8f684c25..d236c49d 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Material_DumpParameters.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Material_DumpParameters.h @@ -1,10 +1,10 @@ #pragma once #include "CoreMinimal.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPServer.h" -#include "MCPUtils.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingServer.h" +#include "WingUtils.h" #include "MaterialParameter.h" #include "MaterialTypes.h" #include "Material_DumpParameters.generated.h" @@ -15,7 +15,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_Material_DumpParameters : public UObject, public IMCPHandler +class UWing_Material_DumpParameters : public UObject, public IWingHandler { GENERATED_BODY() @@ -30,16 +30,16 @@ public: virtual void Handle() override { - MCPFetcher F; + WingFetcher F; UMaterial* Mat = F.Asset(Material).Cast(); if (!Mat) return; - auto AllParams = MCPMaterialParameter::GetMaterialParameters(Mat); + auto AllParams = WingMaterialParameter::GetMaterialParameters(Mat); for (auto& [Info, Meta] : AllParams) { - MCPMaterialParameter::FormatMaterialParameter(Info, Meta); + WingMaterialParameter::FormatMaterialParameter(Info, Meta); } - if (AllParams.IsEmpty()) UMCPServer::Printf(TEXT("No material parameters.\n")); + if (AllParams.IsEmpty()) UWingServer::Printf(TEXT("No material parameters.\n")); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Property_Dump.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Property_Dump.h index 41786dc4..ee444a15 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Property_Dump.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Property_Dump.h @@ -1,12 +1,12 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPProperty.h" -#include "MCPTypes.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingProperty.h" +#include "WingTypes.h" +#include "WingUtils.h" #include "Property_Dump.generated.h" @@ -15,7 +15,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_Property_Dump : public UObject, public IMCPHandler +class UWing_Property_Dump : public UObject, public IWingHandler { GENERATED_BODY() @@ -40,20 +40,20 @@ public: virtual void Handle() override { // Resolve the path to an object and get its editable template. - MCPFetcher F; + WingFetcher F; UObject* Template = F.Walk(Object).Cast(); if (!Template) return; - TArray AllProps = MCPProperty::GetAll(Template, CPF_Edit); - TArray Props = MCPProperty::FindAllSubstring(AllProps, Query); + TArray AllProps = WingProperty::GetAll(Template, CPF_Edit); + TArray Props = WingProperty::FindAllSubstring(AllProps, Query); if (Local) { UClass* ObjClass = Template->GetClass(); - Props.RemoveAll([ObjClass](const MCPProperty& P) { return P->GetOwnerStruct() != ObjClass; }); + Props.RemoveAll([ObjClass](const WingProperty& P) { return P->GetOwnerStruct() != ObjClass; }); } // Group properties by category. - TMap> ByCategory; - for (MCPProperty& P : Props) + TMap> ByCategory; + for (WingProperty& P : Props) { FString Category = P->HasMetaData(TEXT("Category")) ? P->GetMetaData(TEXT("Category")) : FString(); ByCategory.FindOrAdd(Category).Add(P); @@ -71,28 +71,28 @@ public: for (const FString& Category : Categories) { if (Category.IsEmpty()) - UMCPServer::Print(TEXT("\nUncategorized:\n")); + UWingServer::Print(TEXT("\nUncategorized:\n")); else - UMCPServer::Printf(TEXT("\n%s:\n"), *Category); + UWingServer::Printf(TEXT("\n%s:\n"), *Category); - for (MCPProperty& P : ByCategory[Category]) + for (WingProperty& P : ByCategory[Category]) { - FString PropName = MCPUtils::FormatName(P.Prop); + FString PropName = WingUtils::FormatName(P.Prop); FString ValueStr = P.GetText(); if (Truncate && (ValueStr.Len() > 80)) ValueStr = ValueStr.Left(80) + TEXT("..."); bool bEditable = !P->HasAnyPropertyFlags(CPF_EditConst); - UMCPServer::Printf(TEXT(" %s %s %s = %s\n"), + UWingServer::Printf(TEXT(" %s %s %s = %s\n"), bEditable ? TEXT("editable") : TEXT("readonly"), - *UMCPTypes::TypeToText(P.Prop), + *UWingTypes::TypeToText(P.Prop), *PropName, *ValueStr); } } if (Props.IsEmpty()) - UMCPServer::Print(TEXT(" (no blueprint-visible properties found)\n")); + UWingServer::Print(TEXT(" (no blueprint-visible properties found)\n")); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Property_Get.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Property_Get.h index 4045f313..7905ff45 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Property_Get.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Property_Get.h @@ -1,11 +1,11 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPProperty.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingProperty.h" +#include "WingUtils.h" #include "Property_Get.generated.h" @@ -14,7 +14,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_Property_Get : public UObject, public IMCPHandler +class UWing_Property_Get : public UObject, public IWingHandler { GENERATED_BODY() @@ -32,15 +32,15 @@ public: virtual void Handle() override { - MCPFetcher F; + WingFetcher F; UObject* Obj = F.Walk(Object).Cast(); if (!Obj) return; - TArray All = MCPProperty::GetAll(Obj, CPF_Edit); - MCPProperty P = MCPProperty::FindOneExactMatch(All, Property); + TArray All = WingProperty::GetAll(Obj, CPF_Edit); + WingProperty P = WingProperty::FindOneExactMatch(All, Property); if (!P) return; - UMCPServer::Print(P.GetText()); - UMCPServer::Print(TEXT("\n")); + UWingServer::Print(P.GetText()); + UWingServer::Print(TEXT("\n")); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Property_Set.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Property_Set.h index 9a072ffe..404adc25 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Property_Set.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/Property_Set.h @@ -1,11 +1,11 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPProperty.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingProperty.h" +#include "WingUtils.h" #include "Property_Set.generated.h" @@ -14,7 +14,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_Property_Set : public UObject, public IMCPHandler +class UWing_Property_Set : public UObject, public IWingHandler { GENERATED_BODY() @@ -23,7 +23,7 @@ public: FString Object; UPROPERTY(meta=(Description="Object mapping property names to new values in Unreal text format")) - FMCPJsonObject Properties; + FWingJsonObject Properties; virtual FString GetDescription() const override { @@ -33,28 +33,28 @@ public: virtual void Handle() override { // Resolve the path to an object and get its editable template. - MCPFetcher F; + WingFetcher F; UObject* Obj = F.Walk(Object).Cast(); if (!Obj) return; if (!Properties.Json || Properties.Json->Values.Num() == 0) { - UMCPServer::Print(TEXT("Error: No properties specified\n")); + UWingServer::Print(TEXT("Error: No properties specified\n")); return; } // Validation pass — resolve all properties and values before modifying anything. - TArray All = MCPProperty::GetAll(Obj, CPF_Edit); - TArray> Resolved; + TArray All = WingProperty::GetAll(Obj, CPF_Edit); + TArray> Resolved; for (const auto& Pair : Properties.Json->Values) { - MCPProperty P = MCPProperty::FindOneExactMatch(All, Pair.Key); + WingProperty P = WingProperty::FindOneExactMatch(All, Pair.Key); if (!P) return; FString ValueStr; if (!Pair.Value->TryGetString(ValueStr)) { - UMCPServer::Printf(TEXT("Error: Value for '%s' must be a string\n"), *Pair.Key); + UWingServer::Printf(TEXT("Error: Value for '%s' must be a string\n"), *Pair.Key); return; } Resolved.Emplace(P, ValueStr); @@ -70,10 +70,10 @@ public: } // Save. - bool bSaved = MCPUtils::SaveGenericPackage(Obj); + bool bSaved = WingUtils::SaveGenericPackage(Obj); - UMCPServer::Printf(TEXT("Set %d/%d properties.\n"), SuccessCount, Properties.Json->Values.Num()); + UWingServer::Printf(TEXT("Set %d/%d properties.\n"), SuccessCount, Properties.Json->Values.Num()); if (!bSaved) - UMCPServer::Print(TEXT("Warning: Save failed\n")); + UWingServer::Print(TEXT("Warning: Save failed\n")); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/ShowCommands.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/ShowCommands.h index 9234da00..7b91b5e4 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/ShowCommands.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/ShowCommands.h @@ -1,16 +1,16 @@ #pragma once #include "CoreMinimal.h" -#include "MCPHandler.h" -#include "MCPFetcher.h" -#include "MCPServer.h" -#include "MCPTypes.h" -#include "MCPJson.h" -#include "MCPUtils.h" +#include "WingHandler.h" +#include "WingFetcher.h" +#include "WingServer.h" +#include "WingTypes.h" +#include "WingJson.h" +#include "WingUtils.h" #include "ShowCommands.generated.h" UCLASS() -class UMCP_ShowCommands : public UObject, public IMCPHandler +class UWing_ShowCommands : public UObject, public IWingHandler { GENERATED_BODY() @@ -30,20 +30,20 @@ public: { if (Verbose) { - MCPUtils::FormatCommandHelp(Class); + WingUtils::FormatCommandHelp(Class); return; } - UMCPServer::Print(MCPUtils::GetHandlerName(Class)); - UMCPServer::Print(TEXT("(")); + UWingServer::Print(WingUtils::GetHandlerName(Class)); + UWingServer::Print(TEXT("(")); bool bFirst = true; for (TFieldIterator PropIt(Class, EFieldIterationFlags::None); PropIt; ++PropIt) { - if (!bFirst) UMCPServer::Print(TEXT(",")); + if (!bFirst) UWingServer::Print(TEXT(",")); bFirst = false; - if (PropIt->HasMetaData(TEXT("Optional"))) UMCPServer::Print(TEXT("?")); - UMCPServer::Print(PropIt->GetName()); + if (PropIt->HasMetaData(TEXT("Optional"))) UWingServer::Print(TEXT("?")); + UWingServer::Print(PropIt->GetName()); } - UMCPServer::Print(TEXT(")\n")); + UWingServer::Print(TEXT(")\n")); } void EmitCommandList(bool bHalfBaked) @@ -51,22 +51,22 @@ public: FString QueryLower = Query.ToLower(); FString PrevGroup; - for (UClass* Class : MCPUtils::CollectHandlerClasses()) + for (UClass* Class : WingUtils::CollectHandlerClasses()) { bool bIsHalfBaked = Class->GetMetaData(TEXT("ModuleRelativePath")).StartsWith(TEXT("HalfBaked/")); if (bIsHalfBaked != bHalfBaked) continue; - FString ToolName = MCPUtils::GetHandlerName(Class); + FString ToolName = WingUtils::GetHandlerName(Class); if (!ToolName.ToLower().Contains(QueryLower)) continue; // Blank line between groups - FString Group = MCPUtils::GetHandlerGroup(Class); + FString Group = WingUtils::GetHandlerGroup(Class); if (Group != PrevGroup) { if (!PrevGroup.IsEmpty()) - UMCPServer::Print(TEXT("\n")); + UWingServer::Print(TEXT("\n")); PrevGroup = Group; } @@ -76,10 +76,10 @@ public: virtual void Handle() override { - UMCPServer::Printf(TEXT("\n")); + UWingServer::Printf(TEXT("\n")); EmitCommandList(false); - // UMCPServer::Print(TEXT("\n--- Half-Baked (may have issues) ---\n\n")); + // UWingServer::Print(TEXT("\n--- Half-Baked (may have issues) ---\n\n")); // EmitCommandList(true); - UMCPServer::Printf(TEXT("\n")); + UWingServer::Printf(TEXT("\n")); } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/TypeName_Search.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/TypeName_Search.h index 1dd3ca09..960723f0 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/TypeName_Search.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/TypeName_Search.h @@ -1,10 +1,10 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPTypes.h" -#include "MCPUtils.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingTypes.h" +#include "WingUtils.h" #include "AssetRegistry/AssetData.h" #include "AssetRegistry/IAssetRegistry.h" #include "UObject/UObjectIterator.h" @@ -19,7 +19,7 @@ // --------------------------------------------------------------------------- UCLASS() -class UMCP_TypeName_Search : public UObject, public IMCPHandler +class UWing_TypeName_Search : public UObject, public IWingHandler { GENERATED_BODY() @@ -89,16 +89,16 @@ public: Kind = TEXT("Struct"); else if (const UClass* Class = Cast(Obj)) Kind = Class->IsChildOf(UInterface::StaticClass()) ? TEXT("Interface") : TEXT("Class"); - Results.Add(FString::Printf(TEXT("%s %s\n"), Kind, *UMCPTypes::TypeToText(Obj))); + Results.Add(FString::Printf(TEXT("%s %s\n"), Kind, *UWingTypes::TypeToText(Obj))); } Results.Sort(); for (const auto &Result : Results) { - UMCPServer::Print(Result); + UWingServer::Print(Result); } if (Results.Num() == Limit) { - UMCPServer::Printf(TEXT("Search limit reached, raise it with Limit=\n")); + UWingServer::Printf(TEXT("Search limit reached, raise it with Limit=\n")); } } }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/UserManual.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/UserManual.h index 51e6fd7a..bb3d0a53 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/UserManual.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Handlers/UserManual.h @@ -1,12 +1,12 @@ #pragma once #include "CoreMinimal.h" -#include "MCPHandler.h" -#include "MCPServer.h" +#include "WingHandler.h" +#include "WingServer.h" #include "UserManual.generated.h" UCLASS() -class UMCP_UserManual : public UObject, public IMCPHandler +class UWing_UserManual : public UObject, public IWingHandler { GENERATED_BODY() @@ -18,7 +18,7 @@ public: virtual void Handle() override { - UMCPServer::Print(TEXT( + UWingServer::Print(TEXT( "\n PATHS:" "\n" "\n Most commands require you to specify a path. A path starts" diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/BPVarEditor.cpp b/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/BPVarEditor.cpp index 76ef8ac6..c38e62ec 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/BPVarEditor.cpp +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/BPVarEditor.cpp @@ -1,8 +1,8 @@ #include "BPVarEditor.h" -#include "MCPJson.h" -#include "MCPServer.h" -#include "MCPTypes.h" -#include "MCPUtils.h" +#include "WingJson.h" +#include "WingServer.h" +#include "WingTypes.h" +#include "WingUtils.h" #include "EdGraphSchema_K2.h" #include "Kismet2/BlueprintEditorUtils.h" @@ -12,7 +12,7 @@ FBPVarEditor::FBPVarEditor(UBlueprint* BP, const FString& VarName) int32 VarIndex = FBlueprintEditorUtils::FindNewVariableIndex(BP, VarFName); if (VarIndex == INDEX_NONE) { - UMCPServer::Printf(TEXT("ERROR: Variable '%s' not found in %s\n"), *VarName, *MCPUtils::FormatName(BP)); + UWingServer::Printf(TEXT("ERROR: Variable '%s' not found in %s\n"), *VarName, *WingUtils::FormatName(BP)); return; } Desc = &BP->NewVariables[VarIndex]; @@ -23,7 +23,7 @@ FBPVarEditor::FBPVarEditor(UBlueprint* BP, const FString& VarName) UObject* CDO = BP->GeneratedClass->GetDefaultObject(); FProperty* Prop = BP->GeneratedClass->FindPropertyByName(VarFName); if (CDO && Prop) - DefaultValueProp = MCPProperty(Prop, CDO); + DefaultValueProp = WingProperty(Prop, CDO); } } @@ -31,12 +31,12 @@ void FBPVarEditor::Dump() { LoadFlags(); LoadDefault(); - TArray Props = MergedProperties(); - for (MCPProperty& P : Props) + TArray Props = MergedProperties(); + for (WingProperty& P : Props) { - UMCPServer::Printf(TEXT(" %s %s = %s\n"), - *UMCPTypes::TypeToText(P.Prop), - *MCPUtils::FormatName(P.Prop), + UWingServer::Printf(TEXT(" %s %s = %s\n"), + *UWingTypes::TypeToText(P.Prop), + *WingUtils::FormatName(P.Prop), *P.GetText()); } } @@ -47,7 +47,7 @@ bool FBPVarEditor::ApplyJson(const FJsonObject* Json) bool bHasType = Json->HasField(TEXT("VarType")); if (bHasDefault && bHasType) { - UMCPServer::Print(TEXT( + UWingServer::Print(TEXT( "ERROR: Cannot set VarType and DefaultValue in the same call.\n" "Change the type first, then recompile the blueprint,\n" "then set the default.\n")); @@ -56,8 +56,8 @@ bool FBPVarEditor::ApplyJson(const FJsonObject* Json) LoadFlags(); - TArray Props = MergedProperties(); - if (!MCPJson::PopulateFromJson(Props, Json, true)) + TArray Props = MergedProperties(); + if (!WingJson::PopulateFromJson(Props, Json, true)) return false; SaveFlags(); @@ -131,23 +131,23 @@ bool FBPVarEditor::SaveDefault() return true; } -TArray FBPVarEditor::MergedProperties() +TArray FBPVarEditor::MergedProperties() { - TArray Props = MCPProperty::GetAll( + TArray Props = WingProperty::GetAll( FBPVariableDescription::StaticStruct(), Desc, CPF_Edit); - MCPProperty::Remove(Props, TEXT("PropertyFlags")); - MCPProperty::Remove(Props, TEXT("MetaDataArray")); - MCPProperty::Remove(Props, TEXT("VarName")); - MCPProperty::Remove(Props, TEXT("VarGuid")); - MCPProperty::Remove(Props, TEXT("DefaultValue")); + WingProperty::Remove(Props, TEXT("PropertyFlags")); + WingProperty::Remove(Props, TEXT("MetaDataArray")); + WingProperty::Remove(Props, TEXT("VarName")); + WingProperty::Remove(Props, TEXT("VarGuid")); + WingProperty::Remove(Props, TEXT("DefaultValue")); - Props.Append(MCPProperty::GetAll( + Props.Append(WingProperty::GetAll( FBPVarEditor::StaticStruct(), this, (EPropertyFlags)0)); // Remove DefaultValue if we don't have a CDO property to back it. if (!DefaultValueProp) - MCPProperty::Remove(Props, TEXT("DefaultValue")); + WingProperty::Remove(Props, TEXT("DefaultValue")); return Props; } diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/FunctionArgs.cpp b/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/FunctionArgs.cpp index aedca1c0..99681da2 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/FunctionArgs.cpp +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/FunctionArgs.cpp @@ -2,17 +2,17 @@ #include "K2Node_EditablePinBase.h" #include "K2Node_FunctionResult.h" #include "K2Node_Tunnel.h" -#include "MCPTypes.h" -#include "MCPServer.h" +#include "WingTypes.h" +#include "WingServer.h" -bool MCPFunctionArgs::HasArgs(UEdGraphNode* Node) +bool WingFunctionArgs::HasArgs(UEdGraphNode* Node) { UK2Node_EditablePinBase* Editable = Cast(Node); if (!Editable) return false; return Editable->IsEditable(); } -FString MCPFunctionArgs::GetArgs(UEdGraphNode* Node) +FString WingFunctionArgs::GetArgs(UEdGraphNode* Node) { UK2Node_EditablePinBase* Editable = Cast(Node); if (!Editable) return FString(); @@ -21,12 +21,12 @@ FString MCPFunctionArgs::GetArgs(UEdGraphNode* Node) for (const TSharedPtr& Pin : Editable->UserDefinedPins) { if (SB.Len() > 0) SB << TEXT(", "); - SB << UMCPTypes::TypeToText(Pin->PinType) << TEXT(" ") << Pin->PinName.ToString(); + SB << UWingTypes::TypeToText(Pin->PinType) << TEXT(" ") << Pin->PinName.ToString(); } return FString(SB); } -EEdGraphPinDirection MCPFunctionArgs::GetPinDirection(UK2Node_EditablePinBase* Node) +EEdGraphPinDirection WingFunctionArgs::GetPinDirection(UK2Node_EditablePinBase* Node) { // FunctionResult takes inputs; Tunnel depends on its flags; everything else outputs. if (Node->IsA()) @@ -36,7 +36,7 @@ EEdGraphPinDirection MCPFunctionArgs::GetPinDirection(UK2Node_EditablePinBase* N return EGPD_Output; } -bool MCPFunctionArgs::ParseArgs(const FString& Args, TArray& OutArgs) +bool WingFunctionArgs::ParseArgs(const FString& Args, TArray& OutArgs) { FString Trimmed = Args.TrimStartAndEnd(); if (Trimmed.IsEmpty()) return true; @@ -53,7 +53,7 @@ bool MCPFunctionArgs::ParseArgs(const FString& Args, TArray& OutArgs int32 LastSpace; if (!Token.FindLastChar(TEXT(' '), LastSpace)) { - UMCPServer::Printf(TEXT("ERROR: Expected 'type name' but got '%s'\n"), *Token); + UWingServer::Printf(TEXT("ERROR: Expected 'type name' but got '%s'\n"), *Token); return false; } @@ -62,24 +62,24 @@ bool MCPFunctionArgs::ParseArgs(const FString& Args, TArray& OutArgs if (TypeStr.IsEmpty() || NameStr.IsEmpty()) { - UMCPServer::Printf(TEXT("ERROR: Expected 'type name' but got '%s'\n"), *Token); + UWingServer::Printf(TEXT("ERROR: Expected 'type name' but got '%s'\n"), *Token); return false; } FParsedArg Arg; - if (!UMCPTypes::TextToType(TypeStr, Arg.PinType)) return false; + if (!UWingTypes::TextToType(TypeStr, Arg.PinType)) return false; Arg.PinName = FName(*NameStr); OutArgs.Add(MoveTemp(Arg)); } return true; } -bool MCPFunctionArgs::SetArgs(UEdGraphNode* Node, const FString& Args) +bool WingFunctionArgs::SetArgs(UEdGraphNode* Node, const FString& Args) { UK2Node_EditablePinBase* Editable = Cast(Node); if (!Editable || !Editable->IsEditable()) { - UMCPServer::Printf(TEXT("ERROR: Node does not support editable pins\n")); + UWingServer::Printf(TEXT("ERROR: Node does not support editable pins\n")); return false; } diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/GraphExport.cpp b/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/GraphExport.cpp index 94363836..33a486d0 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/GraphExport.cpp +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/GraphExport.cpp @@ -1,6 +1,6 @@ #include "GraphExport.h" -#include "MCPTypes.h" -#include "MCPUtils.h" +#include "WingTypes.h" +#include "WingUtils.h" #include "Engine/Blueprint.h" #include "EdGraph/EdGraph.h" #include "EdGraph/EdGraphNode.h" @@ -14,7 +14,7 @@ #include "FunctionArgs.h" #include "MaterialGraph/MaterialGraphNode.h" -MCPGraphExport::MCPGraphExport(UEdGraph* InGraph) +WingGraphExport::WingGraphExport(UEdGraph* InGraph) : Graph(InGraph) { SortNodes(); @@ -24,7 +24,7 @@ MCPGraphExport::MCPGraphExport(UEdGraph* InGraph) EmitComments(); } -MCPGraphExport::MCPGraphExport(UEdGraphNode* InNode) +WingGraphExport::WingGraphExport(UEdGraphNode* InNode) : Graph(InNode->GetGraph()) { SortedNodes.Add(InNode); @@ -41,7 +41,7 @@ MCPGraphExport::MCPGraphExport(UEdGraphNode* InNode) // //////////////////////////////////////////////////////// -UEdGraphPin* MCPGraphExport::GetLinkedTo(UEdGraphPin* Pin) +UEdGraphPin* WingGraphExport::GetLinkedTo(UEdGraphPin* Pin) { while (true) { @@ -53,7 +53,7 @@ UEdGraphPin* MCPGraphExport::GetLinkedTo(UEdGraphPin* Pin) } } -bool MCPGraphExport::IsDefaultToSelf(UEdGraphPin* Pin) +bool WingGraphExport::IsDefaultToSelf(UEdGraphPin* Pin) { // Only valid call-function nodes can have default-to-self. UK2Node_CallFunction* CallNode = Cast(Pin->GetOwningNode()); @@ -72,7 +72,7 @@ bool MCPGraphExport::IsDefaultToSelf(UEdGraphPin* Pin) return Pin->PinName.ToString() == DefaultToSelfPinName; } -TArray MCPGraphExport::FilterPins(UEdGraphNode* Node, EEdGraphPinDirection Direction, FName Category) +TArray WingGraphExport::FilterPins(UEdGraphNode* Node, EEdGraphPinDirection Direction, FName Category) { TArray Result; for (UEdGraphPin* Pin : Node->Pins) @@ -84,12 +84,12 @@ TArray MCPGraphExport::FilterPins(UEdGraphNode* Node, EEdGraphPinD return Result; } -bool MCPGraphExport::HasExecPin(UEdGraphNode* Node, EEdGraphPinDirection Direction) +bool WingGraphExport::HasExecPin(UEdGraphNode* Node, EEdGraphPinDirection Direction) { return FilterPins(Node, Direction, UEdGraphSchema_K2::PC_Exec).Num() > 0; } -UEdGraphPin* MCPGraphExport::FindFirstPin(UEdGraphNode* Node, EEdGraphPinDirection Direction) +UEdGraphPin* WingGraphExport::FindFirstPin(UEdGraphNode* Node, EEdGraphPinDirection Direction) { for (UEdGraphPin* Pin : Node->Pins) { @@ -105,7 +105,7 @@ UEdGraphPin* MCPGraphExport::FindFirstPin(UEdGraphNode* Node, EEdGraphPinDirecti // //////////////////////////////////////////////////////// -FString MCPGraphExport::FormatPinSource(UEdGraphPin* Pin) +FString WingGraphExport::FormatPinSource(UEdGraphPin* Pin) { // If connected, show source node.pin UEdGraphPin* LinkedTo = GetLinkedTo(Pin); @@ -115,10 +115,10 @@ FString MCPGraphExport::FormatPinSource(UEdGraphPin* Pin) // For variable get nodes, just show the variable name. if (UK2Node_VariableGet* VarGet = Cast(LinkedToNode)) - return MCPUtils::FormatName(VarGet->VariableReference); + return WingUtils::FormatName(VarGet->VariableReference); - FString PinLabel = MCPUtils::FormatName(LinkedTo); - return FString::Printf(TEXT("%s.%s"), *MCPUtils::FormatName(LinkedToNode), *PinLabel); + FString PinLabel = WingUtils::FormatName(LinkedTo); + return FString::Printf(TEXT("%s.%s"), *WingUtils::FormatName(LinkedToNode), *PinLabel); } // String pins: always show in quotes (even if empty). @@ -156,7 +156,7 @@ FString MCPGraphExport::FormatPinSource(UEdGraphPin* Pin) } } -void MCPGraphExport::Traverse(UEdGraphNode* Node) +void WingGraphExport::Traverse(UEdGraphNode* Node) { if (Visited.Contains(Node)) return; Visited.Add(Node); @@ -177,7 +177,7 @@ void MCPGraphExport::Traverse(UEdGraphNode* Node) Traverse(LinkedPin->GetOwningNode()); } -void MCPGraphExport::SortNodes() +void WingGraphExport::SortNodes() { // Find starter nodes: have exec output but no exec input. TArray Starters; @@ -208,15 +208,15 @@ void MCPGraphExport::SortNodes() } } -void MCPGraphExport::EmitNode(UEdGraphNode* Node) +void WingGraphExport::EmitNode(UEdGraphNode* Node) { if (Node->IsA()) return; - Output.Appendf(TEXT("\nnode %s: %s\n"), *MCPUtils::FormatName(Node), *MCPUtils::FormatNodeTitle(Node)); + Output.Appendf(TEXT("\nnode %s: %s\n"), *WingUtils::FormatName(Node), *WingUtils::FormatNodeTitle(Node)); // Emit function args (if applicable). - if (MCPFunctionArgs::HasArgs(Node)) - Output.Appendf(TEXT(" args %s\n"), *MCPFunctionArgs::GetArgs(Node)); + if (WingFunctionArgs::HasArgs(Node)) + Output.Appendf(TEXT(" args %s\n"), *WingFunctionArgs::GetArgs(Node)); // Emit material expression properties (if applicable). EmitMaterialProperties(Node, Output, true); @@ -228,8 +228,8 @@ void MCPGraphExport::EmitNode(UEdGraphNode* Node) if (Pin->bHidden) continue; Output.Appendf(TEXT(" input %s %s = %s\n"), - *UMCPTypes::TypeToText(Pin->PinType), - *MCPUtils::FormatName(Pin), + *UWingTypes::TypeToText(Pin->PinType), + *WingUtils::FormatName(Pin), *FormatPinSource(Pin)); } @@ -240,7 +240,7 @@ void MCPGraphExport::EmitNode(UEdGraphNode* Node) if (Pin->PinType.PinCategory == UEdGraphSchema_K2::PC_Exec) continue; if (Pin->bHidden) continue; if (!ReturnPins.IsEmpty()) ReturnPins += TEXT(", "); - ReturnPins += MCPUtils::FormatName(Pin); + ReturnPins += WingUtils::FormatName(Pin); } if (!ReturnPins.IsEmpty()) { @@ -254,18 +254,18 @@ void MCPGraphExport::EmitNode(UEdGraphNode* Node) UEdGraphPin* LinkedTo = GetLinkedTo(Pin); if (!LinkedTo) continue; - FString Target = MCPUtils::FormatName(LinkedTo->GetOwningNode()); + FString Target = WingUtils::FormatName(LinkedTo->GetOwningNode()); if (ExecOuts.Num() == 1) Output.Appendf(TEXT(" goto %s\n"), *Target); else - Output.Appendf(TEXT(" goto-if %s %s\n"), *MCPUtils::FormatName(Pin), *Target); + Output.Appendf(TEXT(" goto-if %s %s\n"), *WingUtils::FormatName(Pin), *Target); } } -void MCPGraphExport::EmitMaterialProperty(UMaterialExpression* Expression, FProperty* Prop, FStringBuilderBase& Out) +void WingGraphExport::EmitMaterialProperty(UMaterialExpression* Expression, FProperty* Prop, FStringBuilderBase& Out) { - FString ValueStr = MCPUtils::GetPropertyValueText(Expression, Prop); + FString ValueStr = WingUtils::GetPropertyValueText(Expression, Prop); ValueStr.ReplaceInline(TEXT("\r\n"), TEXT(" ")); ValueStr.ReplaceInline(TEXT("\n"), TEXT(" ")); if (ValueStr.Len() > 80) @@ -274,19 +274,19 @@ void MCPGraphExport::EmitMaterialProperty(UMaterialExpression* Expression, FProp bool bEditable = !Prop->HasAnyPropertyFlags(CPF_EditConst); Out.Appendf(TEXT(" %s %s %s = %s\n"), bEditable ? TEXT("mxeditable") : TEXT("mxreadonly"), - *UMCPTypes::TypeToText(Prop), - *MCPUtils::FormatName(Prop), + *UWingTypes::TypeToText(Prop), + *WingUtils::FormatName(Prop), *ValueStr); } -void MCPGraphExport::EmitMaterialProperties(UEdGraphNode* Node, FStringBuilderBase& Out, bool bPrimary) +void WingGraphExport::EmitMaterialProperties(UEdGraphNode* Node, FStringBuilderBase& Out, bool bPrimary) { UMaterialGraphNode* MatNode = Cast(Node); if (!MatNode || !MatNode->MaterialExpression) return; UMaterialExpression* Expression = MatNode->MaterialExpression; FString PrimaryCategory = Expression->GetClass()->GetName(); - TArray Props = MCPUtils::SearchProperties(Expression, FString(), CPF_Edit, false); + TArray Props = WingUtils::SearchProperties(Expression, FString(), CPF_Edit, false); for (FProperty* Prop : Props) { @@ -296,7 +296,7 @@ void MCPGraphExport::EmitMaterialProperties(UEdGraphNode* Node, FStringBuilderBa } } -void MCPGraphExport::EmitLocalVariables() +void WingGraphExport::EmitLocalVariables() { for (UEdGraphNode* Node : Graph->Nodes) { @@ -307,15 +307,15 @@ void MCPGraphExport::EmitLocalVariables() { FString Default = Var.DefaultValue.IsEmpty() ? TEXT("") : Var.DefaultValue; Output.Appendf(TEXT("local %s %s = %s\n"), - *UMCPTypes::TypeToText(Var.VarType), - *MCPUtils::FormatName(Var), + *UWingTypes::TypeToText(Var.VarType), + *WingUtils::FormatName(Var), *Default); } break; } } -void MCPGraphExport::EmitGraph() +void WingGraphExport::EmitGraph() { for (UEdGraphNode* Node : SortedNodes) { @@ -326,21 +326,21 @@ void MCPGraphExport::EmitGraph() Output.Append(TEXT("\n")); } -void MCPGraphExport::EmitDetails() +void WingGraphExport::EmitDetails() { for (UEdGraphNode* Node : SortedNodes) { if (Node->IsA()) continue; if (Node->IsA()) continue; if (Node->IsA()) continue; - Details.Appendf(TEXT("\ndetails %s\n"), *MCPUtils::FormatName(Node)); + Details.Appendf(TEXT("\ndetails %s\n"), *WingUtils::FormatName(Node)); Details.Appendf(TEXT(" pos %d, %d\n"), Node->NodePosX, Node->NodePosY); EmitMaterialProperties(Node, Details, false); } } -void MCPGraphExport::EmitComments() +void WingGraphExport::EmitComments() { for (UEdGraphNode* CommentNode : SortedNodes) { @@ -352,10 +352,10 @@ void MCPGraphExport::EmitComments() int32 CH = CommentNode->NodeHeight; // Emit header. - Output.Appendf(TEXT("\ncomment %s:\n"), *MCPUtils::FormatName(CommentNode)); + Output.Appendf(TEXT("\ncomment %s:\n"), *WingUtils::FormatName(CommentNode)); // Emit wrapped, indented body. - Output.Append(MCPUtils::WrapText(CommentNode->NodeComment, 70, TEXT(" - "))); + Output.Append(WingUtils::WrapText(CommentNode->NodeComment, 70, TEXT(" - "))); Output.Append(TEXT("\n")); // Find contained nodes. @@ -366,7 +366,7 @@ void MCPGraphExport::EmitComments() int32 NX = Node->NodePosX; int32 NY = Node->NodePosY; if (NX >= CX && NY >= CY && NX <= CX + CW && NY <= CY + CH) - ContainedNames.Add(MCPUtils::FormatName(Node)); + ContainedNames.Add(WingUtils::FormatName(Node)); } if (ContainedNames.Num() > 0) diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/HandlerCodingStandards.md b/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/HandlerCodingStandards.md index cb209569..7971de3a 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/HandlerCodingStandards.md +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/HandlerCodingStandards.md @@ -1,10 +1,10 @@ -* Command-handlers are classes that implement the MCPHandler +* Command-handlers are classes that implement the WingHandler interface. The command's json parameters automatically get injected into the handler's properties using reflection code. Check out a few handlers to see how this works. -* Class MCPFetcher can precisely and easily retrieve objects +* Class WingFetcher can precisely and easily retrieve objects of all different kinds using a 'path'. Study the API of this class, we use it everywhere. It is the best tool when you need the caller to specify a blueprint, or a @@ -15,15 +15,15 @@ in a convenient interface. Please study this API. * The only valid way to get a name for an object is using - MCPUtils::FormatName(obj). We don't allow the use of + WingUtils::FormatName(obj). We don't allow the use of pin->GetName, or node->GetTitle, or any other name-fetching - routine. Using only MCPUtils::FormatName guarantees + routine. Using only WingUtils::FormatName guarantees consistency: that means, names output by one tool can be parsed by a different tool. * To check whether a string matches an object's name, there's only one valid way to do that as well: using - bool MCPUtils::Identifies(Name, Obj). + bool WingUtils::Identifies(Name, Obj). * Concise output is better. The output of these handlers will primarily be consumed by LLMs with finite context @@ -35,7 +35,7 @@ consume. * You can pass the output StringBuilder directly into - MCPFetcher and MCPAssets. If you do, these will automatically + WingFetcher and MCPAssets. If you do, these will automatically generate good error messages. If either of these classes returns 'false', you don't need to generate an error message: it's already been done. Any other routine that @@ -56,7 +56,7 @@ * When you're going to edit something, it's important to mark things dirty. There's a very powerful tool for that: - MCPUtils::PreEdit and MCPUtils::PostEdit, which can also - be accessed through MCPFetcher::PreEdit and PostEdit. + WingUtils::PreEdit and WingUtils::PostEdit, which can also + be accessed through WingFetcher::PreEdit and PostEdit. These routines are very careful about marking everything dirty, so you don't have to worry about it. diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/HandlerIssues.md b/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/HandlerIssues.md index 96300940..6cc395ce 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/HandlerIssues.md +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/HandlerIssues.md @@ -3,7 +3,7 @@ ## Breaking API Changes Several handlers switched from GUID-based node matching to -`MCPUtils::Identifies()`. Since the only caller is our own MCP +`WingUtils::Identifies()`. Since the only caller is our own MCP bridge (which uses `FormatName` output from dump commands), this is actually fine — but it's a one-way door. @@ -11,7 +11,7 @@ is actually fine — but it's a one-way door. DeleteMaterialExpression, DisconnectMaterialExpressionPin** — node param now expects FormatName identifiers, not GUIDs - **RemoveStructField, AddStructField** — switched from - MCPAssets (accepts bare names) to MCPFetcher (requires full + MCPAssets (accepts bare names) to WingFetcher (requires full paths) - **SetPinDefaultValues** — entry struct changed from `{Blueprint, Node, PinName, Value}` to `{Pin, Value}` where diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/MCPModule.cpp b/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/MCPModule.cpp deleted file mode 100644 index e9dd0ba0..00000000 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/MCPModule.cpp +++ /dev/null @@ -1,4 +0,0 @@ -#include "MCPModule.h" -#include "Modules/ModuleManager.h" - -IMPLEMENT_MODULE(FBlueprintMCPModule, BlueprintMCP); diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/MaterialParameter.cpp b/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/MaterialParameter.cpp index 259ad71f..0a8731ec 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/MaterialParameter.cpp +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/MaterialParameter.cpp @@ -1,8 +1,8 @@ #include "MaterialParameter.h" -#include "MCPUtils.h" -#include "MCPServer.h" +#include "WingUtils.h" +#include "WingServer.h" -TMap MCPMaterialParameter::GetMaterialParameters(UMaterialInterface* Material) +TMap WingMaterialParameter::GetMaterialParameters(UMaterialInterface* Material) { TMap Result; if (!Material) return Result; @@ -15,7 +15,7 @@ TMap MCPMaterialParameter::G return Result; } -bool MCPMaterialParameter::ParseMaterialParameterAssociation(const FString& Str, EMaterialParameterAssociation& OutAssociation) +bool WingMaterialParameter::ParseMaterialParameterAssociation(const FString& Str, EMaterialParameterAssociation& OutAssociation) { if (Str.Equals(TEXT("Global"), ESearchCase::IgnoreCase)) OutAssociation = GlobalParameter; @@ -25,13 +25,13 @@ bool MCPMaterialParameter::ParseMaterialParameterAssociation(const FString& Str, OutAssociation = BlendParameter; else { - UMCPServer::Printf(TEXT("ERROR: Invalid ParameterAssociation '%s' (expected 'Global', 'Layer', or 'Blend')\n"), *Str); + UWingServer::Printf(TEXT("ERROR: Invalid ParameterAssociation '%s' (expected 'Global', 'Layer', or 'Blend')\n"), *Str); return false; } return true; } -void MCPMaterialParameter::FormatMaterialParameter(const FMaterialParameterInfo& Info, const FMaterialParameterMetadata& Meta) +void WingMaterialParameter::FormatMaterialParameter(const FMaterialParameterInfo& Info, const FMaterialParameterMetadata& Meta) { // Association prefix for layer/blend parameters. FString Prefix; @@ -43,35 +43,35 @@ void MCPMaterialParameter::FormatMaterialParameter(const FMaterialParameterInfo& switch (Meta.Value.Type) { case EMaterialParameterType::Scalar: - UMCPServer::Printf(TEXT(" %sScalar \"%s\" = %g\n"), *Prefix, *Info.Name.ToString(), Meta.Value.AsScalar()); + UWingServer::Printf(TEXT(" %sScalar \"%s\" = %g\n"), *Prefix, *Info.Name.ToString(), Meta.Value.AsScalar()); break; case EMaterialParameterType::Vector: { FLinearColor C = Meta.Value.AsLinearColor(); - UMCPServer::Printf(TEXT(" %sVector \"%s\" = (R=%.3f, G=%.3f, B=%.3f, A=%.3f)\n"), + UWingServer::Printf(TEXT(" %sVector \"%s\" = (R=%.3f, G=%.3f, B=%.3f, A=%.3f)\n"), *Prefix, *Info.Name.ToString(), C.R, C.G, C.B, C.A); break; } case EMaterialParameterType::DoubleVector: { FVector4d V = Meta.Value.AsVector4d(); - UMCPServer::Printf(TEXT(" %sDoubleVector \"%s\" = (%.3f, %.3f, %.3f, %.3f)\n"), + UWingServer::Printf(TEXT(" %sDoubleVector \"%s\" = (%.3f, %.3f, %.3f, %.3f)\n"), *Prefix, *Info.Name.ToString(), V.X, V.Y, V.Z, V.W); break; } case EMaterialParameterType::Texture: { UTexture* Tex = Cast(Meta.Value.AsTextureObject()); - UMCPServer::Printf(TEXT(" %sTexture \"%s\" = %s\n"), - *Prefix, *Info.Name.ToString(), Tex ? *MCPUtils::FormatName(Tex) : TEXT("None")); + UWingServer::Printf(TEXT(" %sTexture \"%s\" = %s\n"), + *Prefix, *Info.Name.ToString(), Tex ? *WingUtils::FormatName(Tex) : TEXT("None")); break; } case EMaterialParameterType::StaticSwitch: - UMCPServer::Printf(TEXT(" %sStaticSwitch \"%s\" = %s\n"), + UWingServer::Printf(TEXT(" %sStaticSwitch \"%s\" = %s\n"), *Prefix, *Info.Name.ToString(), Meta.Value.AsStaticSwitch() ? TEXT("true") : TEXT("false")); break; default: - UMCPServer::Printf(TEXT(" %sType%d \"%s\"\n"), *Prefix, (int)Meta.Value.Type, *Info.Name.ToString()); + UWingServer::Printf(TEXT(" %sType%d \"%s\"\n"), *Prefix, (int)Meta.Value.Type, *Info.Name.ToString()); break; } } diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/MCPFetcher.cpp b/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/WingFetcher.cpp similarity index 59% rename from Plugins/BlueprintMCP/Source/BlueprintMCP/Private/MCPFetcher.cpp rename to Plugins/BlueprintMCP/Source/BlueprintMCP/Private/WingFetcher.cpp index 0aa82f5f..fd9401a9 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/MCPFetcher.cpp +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/WingFetcher.cpp @@ -1,6 +1,6 @@ -#include "MCPFetcher.h" -#include "MCPServer.h" -#include "MCPUtils.h" +#include "WingFetcher.h" +#include "WingServer.h" +#include "WingUtils.h" #include "Engine/Blueprint.h" #include "EdGraph/EdGraph.h" #include "EdGraph/EdGraphNode.h" @@ -15,30 +15,30 @@ #include "Engine/LevelScriptBlueprint.h" #include "Subsystems/AssetEditorSubsystem.h" -MCPFetcher::WalkFunc MCPFetcher::GetWalker(const FString& Step) +WingFetcher::WalkFunc WingFetcher::GetWalker(const FString& Step) { - if (Step.Equals(TEXT("graph"), ESearchCase::IgnoreCase)) return &MCPFetcher::Graph; - if (Step.Equals(TEXT("node"), ESearchCase::IgnoreCase)) return &MCPFetcher::Node; - if (Step.Equals(TEXT("pin"), ESearchCase::IgnoreCase)) return &MCPFetcher::Pin; - if (Step.Equals(TEXT("component"), ESearchCase::IgnoreCase)) return &MCPFetcher::Component; - if (Step.Equals(TEXT("levelblueprint"), ESearchCase::IgnoreCase)) return &MCPFetcher::LevelBlueprint; + if (Step.Equals(TEXT("graph"), ESearchCase::IgnoreCase)) return &WingFetcher::Graph; + if (Step.Equals(TEXT("node"), ESearchCase::IgnoreCase)) return &WingFetcher::Node; + if (Step.Equals(TEXT("pin"), ESearchCase::IgnoreCase)) return &WingFetcher::Pin; + if (Step.Equals(TEXT("component"), ESearchCase::IgnoreCase)) return &WingFetcher::Component; + if (Step.Equals(TEXT("levelblueprint"), ESearchCase::IgnoreCase)) return &WingFetcher::LevelBlueprint; return nullptr; } -void MCPFetcher::SetObj(UObject* InObj) +void WingFetcher::SetObj(UObject* InObj) { - UMCPServer::AddTouchedObject(InObj); + UWingServer::AddTouchedObject(InObj); Obj = InObj; ResultPin = nullptr; } -void MCPFetcher::SetPin(UEdGraphPin* InPin) +void WingFetcher::SetPin(UEdGraphPin* InPin) { ResultPin = InPin; Obj = nullptr; } -MCPFetcher& MCPFetcher::SetError() +WingFetcher& WingFetcher::SetError() { bError = true; Obj = nullptr; @@ -48,30 +48,30 @@ MCPFetcher& MCPFetcher::SetError() return *this; } -void MCPFetcher::PathFailed(const TCHAR* Expected) +void WingFetcher::PathFailed(const TCHAR* Expected) { SetError(); if (ResultPin) - UMCPServer::Printf(TEXT("ERROR: Path specifies a pin, but expected %s\n"), Expected); + UWingServer::Printf(TEXT("ERROR: Path specifies a pin, but expected %s\n"), Expected); else if (Obj) - UMCPServer::Printf(TEXT("ERROR: Path specifies a %s, but expected %s\n"), *Obj->GetClass()->GetName(), Expected); + UWingServer::Printf(TEXT("ERROR: Path specifies a %s, but expected %s\n"), *Obj->GetClass()->GetName(), Expected); else - UMCPServer::Printf(TEXT("ERROR: Path led to a null pointer\n")); + UWingServer::Printf(TEXT("ERROR: Path led to a null pointer\n")); } -MCPFetcher& MCPFetcher::TypeMismatch(const TCHAR* Walker, const TCHAR* Expected) +WingFetcher& WingFetcher::TypeMismatch(const TCHAR* Walker, const TCHAR* Expected) { SetError(); if (ResultPin) - UMCPServer::Printf(TEXT("ERROR: Input to '%s' is a pin, but expected %s\n"), Walker, Expected); + UWingServer::Printf(TEXT("ERROR: Input to '%s' is a pin, but expected %s\n"), Walker, Expected); else if (Obj) - UMCPServer::Printf(TEXT("ERROR: Input to '%s' is %s, but expected %s\n"), Walker, *Obj->GetClass()->GetName(), Expected); + UWingServer::Printf(TEXT("ERROR: Input to '%s' is %s, but expected %s\n"), Walker, *Obj->GetClass()->GetName(), Expected); else - UMCPServer::Printf(TEXT("ERROR: Path led to a null pointer\n")); + UWingServer::Printf(TEXT("ERROR: Path led to a null pointer\n")); return *this; } -MCPFetcher& MCPFetcher::Walk(const FString& Path) +WingFetcher& WingFetcher::Walk(const FString& Path) { if (bError) return *this; @@ -79,7 +79,7 @@ MCPFetcher& MCPFetcher::Walk(const FString& Path) Path.ParseIntoArray(Segments, TEXT(",")); if (Segments.Num() == 0) { - UMCPServer::Print(TEXT("ERROR: Empty path\n")); + UWingServer::Print(TEXT("ERROR: Empty path\n")); return SetError(); } @@ -99,7 +99,7 @@ MCPFetcher& MCPFetcher::Walk(const FString& Path) WalkFunc Func = GetWalker(Key); if (!Func) { - UMCPServer::Printf(TEXT("ERROR: Unknown path step '%s'\n"), *Key); + UWingServer::Printf(TEXT("ERROR: Unknown path step '%s'\n"), *Key); return SetError(); } (this->*Func)(Value); @@ -109,14 +109,14 @@ MCPFetcher& MCPFetcher::Walk(const FString& Path) return *this; } -MCPFetcher& MCPFetcher::Asset(const FString& PackagePath) +WingFetcher& WingFetcher::Asset(const FString& PackagePath) { if (bError) return *this; SetObj(LoadObject(nullptr, *PackagePath)); if (!Obj) { - UMCPServer::Printf(TEXT("ERROR: Could not load asset '%s'\n"), *PackagePath); + UWingServer::Printf(TEXT("ERROR: Could not load asset '%s'\n"), *PackagePath); return SetError(); } @@ -126,13 +126,13 @@ MCPFetcher& MCPFetcher::Asset(const FString& PackagePath) UAssetEditorSubsystem* Sub = GEditor->GetEditorSubsystem(); if (!Sub || !Sub->OpenEditorForAsset(Obj)) { - UMCPServer::Printf(TEXT("ERROR: Could not open editor for '%s'\n"), *PackagePath); + UWingServer::Printf(TEXT("ERROR: Could not open editor for '%s'\n"), *PackagePath); return SetError(); } Editor = Sub->FindEditorForAsset(OriginalAsset, false); if (!Editor) { - UMCPServer::Printf(TEXT("ERROR: Could not find editor instance for '%s'\n"), *PackagePath); + UWingServer::Printf(TEXT("ERROR: Could not find editor instance for '%s'\n"), *PackagePath); return SetError(); } @@ -145,12 +145,12 @@ MCPFetcher& MCPFetcher::Asset(const FString& PackagePath) return *this; } -bool MCPFetcher::CheckAssetIsA(UClass* StaticClass) +bool WingFetcher::CheckAssetIsA(UClass* StaticClass) { if (bError) return false; if (!OriginalAsset || !OriginalAsset->IsA(StaticClass)) { - UMCPServer::Printf(TEXT("ERROR: Asset is %s, expected %s\n"), + UWingServer::Printf(TEXT("ERROR: Asset is %s, expected %s\n"), OriginalAsset ? *OriginalAsset->GetClass()->GetName() : TEXT("null"), *StaticClass->GetName()); SetError(); @@ -159,7 +159,7 @@ bool MCPFetcher::CheckAssetIsA(UClass* StaticClass) return true; } -MCPFetcher& MCPFetcher::Graph(const FString& Value) +WingFetcher& WingFetcher::Graph(const FString& Value) { if (bError) return *this; @@ -168,13 +168,13 @@ MCPFetcher& MCPFetcher::Graph(const FString& Value) { if (!Value.IsEmpty()) { - UMCPServer::Printf(TEXT("ERROR: Materials do not have named graphs (got '%s')\n"), *Value); + UWingServer::Printf(TEXT("ERROR: Materials do not have named graphs (got '%s')\n"), *Value); return SetError(); } - MCPUtils::EnsureMaterialGraph(Mat); + WingUtils::EnsureMaterialGraph(Mat); if (!Mat->MaterialGraph) { - UMCPServer::Printf(TEXT("ERROR: Material '%s' has no material graph\n"), *Mat->GetName()); + UWingServer::Printf(TEXT("ERROR: Material '%s' has no material graph\n"), *Mat->GetName()); return SetError(); } SetObj(Mat->MaterialGraph); @@ -185,15 +185,15 @@ MCPFetcher& MCPFetcher::Graph(const FString& Value) if (!BP) return TypeMismatch(TEXT("graph"), TEXT("Blueprint or Material")); - TArray Matches = MCPUtils::AllGraphsNamed(BP, Value); + TArray Matches = WingUtils::AllGraphsNamed(BP, Value); if (Matches.Num() == 0) { - UMCPServer::Printf(TEXT("ERROR: Graph '%s' not found in %s\n"), *Value, *BP->GetName()); + UWingServer::Printf(TEXT("ERROR: Graph '%s' not found in %s\n"), *Value, *BP->GetName()); return SetError(); } if (Matches.Num() > 1) { - UMCPServer::Printf(TEXT("ERROR: Ambiguous graph '%s' in %s — %d matches\n"), *Value, *BP->GetName(), Matches.Num()); + UWingServer::Printf(TEXT("ERROR: Ambiguous graph '%s' in %s — %d matches\n"), *Value, *BP->GetName(), Matches.Num()); return SetError(); } @@ -201,7 +201,7 @@ MCPFetcher& MCPFetcher::Graph(const FString& Value) return *this; } -MCPFetcher& MCPFetcher::Node(const FString& Value) +WingFetcher& WingFetcher::Node(const FString& Value) { if (bError) return *this; @@ -211,18 +211,18 @@ MCPFetcher& MCPFetcher::Node(const FString& Value) UEdGraphNode* Found = nullptr; for (UEdGraphNode* N : G->Nodes) { - if (!N || !MCPUtils::Identifies(Value, N)) + if (!N || !WingUtils::Identifies(Value, N)) continue; if (Found) { - UMCPServer::Printf(TEXT("ERROR: Ambiguous node '%s' in graph %s\n"), *Value, *G->GetName()); + UWingServer::Printf(TEXT("ERROR: Ambiguous node '%s' in graph %s\n"), *Value, *G->GetName()); return SetError(); } Found = N; } if (!Found) { - UMCPServer::Printf(TEXT("ERROR: Node '%s' not found in graph %s\n"), *Value, *G->GetName()); + UWingServer::Printf(TEXT("ERROR: Node '%s' not found in graph %s\n"), *Value, *G->GetName()); return SetError(); } SetObj(Found); @@ -233,15 +233,15 @@ MCPFetcher& MCPFetcher::Node(const FString& Value) if (UBlueprint* BP = ::Cast(Obj)) { UEdGraphNode* Found = nullptr; - for (UEdGraph* G : MCPUtils::AllGraphs(BP)) + for (UEdGraph* G : WingUtils::AllGraphs(BP)) { for (UEdGraphNode* N : G->Nodes) { - if (!N || !MCPUtils::Identifies(Value, N)) + if (!N || !WingUtils::Identifies(Value, N)) continue; if (Found) { - UMCPServer::Printf(TEXT("ERROR: Ambiguous node '%s' in %s\n"), *Value, *BP->GetName()); + UWingServer::Printf(TEXT("ERROR: Ambiguous node '%s' in %s\n"), *Value, *BP->GetName()); return SetError(); } Found = N; @@ -249,7 +249,7 @@ MCPFetcher& MCPFetcher::Node(const FString& Value) } if (!Found) { - UMCPServer::Printf(TEXT("ERROR: Node '%s' not found in %s\n"), *Value, *BP->GetName()); + UWingServer::Printf(TEXT("ERROR: Node '%s' not found in %s\n"), *Value, *BP->GetName()); return SetError(); } SetObj(Found); @@ -259,7 +259,7 @@ MCPFetcher& MCPFetcher::Node(const FString& Value) return TypeMismatch(TEXT("node"), TEXT("graph or Blueprint")); } -MCPFetcher& MCPFetcher::Pin(const FString& Value) +WingFetcher& WingFetcher::Pin(const FString& Value) { if (bError) return *this; @@ -269,20 +269,20 @@ MCPFetcher& MCPFetcher::Pin(const FString& Value) UEdGraphPin* Found = nullptr; for (UEdGraphPin *P : N->Pins) { - if (!MCPUtils::Identifies(Value, P)) + if (!WingUtils::Identifies(Value, P)) continue; if (Found) { - UMCPServer::Printf(TEXT("ERROR: Ambiguous pin '%s' on node %s\n"), - *Value, *MCPUtils::FormatName(N)); + UWingServer::Printf(TEXT("ERROR: Ambiguous pin '%s' on node %s\n"), + *Value, *WingUtils::FormatName(N)); return SetError(); } Found = P; } if (!Found) { - UMCPServer::Printf(TEXT("ERROR: Pin '%s' not found on node %s\n"), - *Value, *MCPUtils::FormatName(N)); + UWingServer::Printf(TEXT("ERROR: Pin '%s' not found on node %s\n"), + *Value, *WingUtils::FormatName(N)); return SetError(); } @@ -290,7 +290,7 @@ MCPFetcher& MCPFetcher::Pin(const FString& Value) return *this; } -MCPFetcher& MCPFetcher::Component(const FString& Value) +WingFetcher& WingFetcher::Component(const FString& Value) { if (bError) return *this; @@ -301,7 +301,7 @@ MCPFetcher& MCPFetcher::Component(const FString& Value) USimpleConstructionScript* SCS = BP->SimpleConstructionScript; if (!SCS) { - UMCPServer::Printf(TEXT("ERROR: Blueprint %s has no SimpleConstructionScript (not an Actor Blueprint)\n"), *BP->GetName()); + UWingServer::Printf(TEXT("ERROR: Blueprint %s has no SimpleConstructionScript (not an Actor Blueprint)\n"), *BP->GetName()); return SetError(); } @@ -315,11 +315,11 @@ MCPFetcher& MCPFetcher::Component(const FString& Value) } } - UMCPServer::Printf(TEXT("ERROR: Component '%s' not found in %s\n"), *Value, *BP->GetName()); + UWingServer::Printf(TEXT("ERROR: Component '%s' not found in %s\n"), *Value, *BP->GetName()); return SetError(); } -MCPFetcher& MCPFetcher::LevelBlueprint(const FString& Value) +WingFetcher& WingFetcher::LevelBlueprint(const FString& Value) { if (bError) return *this; @@ -329,14 +329,14 @@ MCPFetcher& MCPFetcher::LevelBlueprint(const FString& Value) if (!World->PersistentLevel) { - UMCPServer::Print(TEXT("ERROR: World has no PersistentLevel\n")); + UWingServer::Print(TEXT("ERROR: World has no PersistentLevel\n")); return SetError(); } ULevelScriptBlueprint* LevelBP = World->PersistentLevel->GetLevelScriptBlueprint(true); if (!LevelBP) { - UMCPServer::Print(TEXT("ERROR: World has no level blueprint\n")); + UWingServer::Print(TEXT("ERROR: World has no level blueprint\n")); return SetError(); } diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/MCPJson.cpp b/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/WingJson.cpp similarity index 63% rename from Plugins/BlueprintMCP/Source/BlueprintMCP/Private/MCPJson.cpp rename to Plugins/BlueprintMCP/Source/BlueprintMCP/Private/WingJson.cpp index 73095690..d27277f7 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/MCPJson.cpp +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/WingJson.cpp @@ -1,12 +1,12 @@ -#include "MCPJson.h" -#include "MCPTypes.h" -#include "MCPServer.h" +#include "WingJson.h" +#include "WingTypes.h" +#include "WingServer.h" #include "UObject/UnrealType.h" #include "UObject/EnumProperty.h" #include "Dom/JsonValue.h" -bool MCPJson::PopulateFromJson(MCPProperty& P, const FJsonObject* Json, bool AllOptional) +bool WingJson::PopulateFromJson(WingProperty& P, const FJsonObject* Json, bool AllOptional) { FString JsonKey = P.Prop->GetName(); bool bOptional = AllOptional || P.Prop->HasMetaData(TEXT("Optional")); @@ -15,7 +15,7 @@ bool MCPJson::PopulateFromJson(MCPProperty& P, const FJsonObject* Json, bool All { if (!bOptional) { - UMCPServer::Printf(TEXT("ERROR: Missing required parameter '%s'\n"), *JsonKey); + UWingServer::Printf(TEXT("ERROR: Missing required parameter '%s'\n"), *JsonKey); return false; } return true; @@ -23,28 +23,28 @@ bool MCPJson::PopulateFromJson(MCPProperty& P, const FJsonObject* Json, bool All void* ValuePtr = P.Prop->ContainerPtrToValuePtr(P.Container); - // Special handling for FMCPJsonObject and FMCPJsonArray + // Special handling for FWingJsonObject and FWingJsonArray if (FStructProperty* StructProp = CastField(P.Prop)) { - if (StructProp->Struct == FMCPJsonObject::StaticStruct()) + if (StructProp->Struct == FWingJsonObject::StaticStruct()) { if (!Json->HasTypedField(JsonKey)) { - UMCPServer::Printf(TEXT("ERROR: '%s' must be an object\n"), *JsonKey); + UWingServer::Printf(TEXT("ERROR: '%s' must be an object\n"), *JsonKey); return false; } - static_cast(ValuePtr)->Json = Json->GetObjectField(JsonKey); + static_cast(ValuePtr)->Json = Json->GetObjectField(JsonKey); return true; } - if (StructProp->Struct == FMCPJsonArray::StaticStruct()) + if (StructProp->Struct == FWingJsonArray::StaticStruct()) { if (!Json->HasTypedField(JsonKey)) { - UMCPServer::Printf(TEXT("ERROR: '%s' must be an array\n"), *JsonKey); + UWingServer::Printf(TEXT("ERROR: '%s' must be an array\n"), *JsonKey); return false; } - static_cast(ValuePtr)->Array = Json->GetArrayField(JsonKey); + static_cast(ValuePtr)->Array = Json->GetArrayField(JsonKey); return true; } } @@ -63,7 +63,7 @@ bool MCPJson::PopulateFromJson(MCPProperty& P, const FJsonObject* Json, bool All { DoubleProp->SetPropertyValue(ValuePtr, D); return true; } if (FByteProperty* ByteProp = CastField(P.Prop)) { ByteProp->SetPropertyValue(ValuePtr, (uint8)D); return true; } - UMCPServer::Printf(TEXT("ERROR: '%s' received a number but expects %s\n"), *JsonKey, *P.Prop->GetCPPType()); + UWingServer::Printf(TEXT("ERROR: '%s' received a number but expects %s\n"), *JsonKey, *P.Prop->GetCPPType()); return false; } @@ -71,7 +71,7 @@ bool MCPJson::PopulateFromJson(MCPProperty& P, const FJsonObject* Json, bool All { if (FBoolProperty* BoolProp = CastField(P.Prop)) { BoolProp->SetPropertyValue(ValuePtr, JsonValue->AsBool()); return true; } - UMCPServer::Printf(TEXT("ERROR: '%s' received a boolean but expects %s\n"), *JsonKey, *P.Prop->GetCPPType()); + UWingServer::Printf(TEXT("ERROR: '%s' received a boolean but expects %s\n"), *JsonKey, *P.Prop->GetCPPType()); return false; } @@ -80,18 +80,18 @@ bool MCPJson::PopulateFromJson(MCPProperty& P, const FJsonObject* Json, bool All return P.SetText(JsonValue->AsString()); } - UMCPServer::Printf(TEXT("ERROR: '%s' must be a string, number, or boolean\n"), *JsonKey); + UWingServer::Printf(TEXT("ERROR: '%s' must be a string, number, or boolean\n"), *JsonKey); return false; } -bool MCPJson::PopulateFromJson( - TArray& Props, const FJsonObject* Json, bool AllOptional) +bool WingJson::PopulateFromJson( + TArray& Props, const FJsonObject* Json, bool AllOptional) { bool Ok = true; // Build a set of known property names for the unknown-field check. TSet KnownKeys; - for (const MCPProperty& P : Props) + for (const WingProperty& P : Props) KnownKeys.Add(P.Prop->GetName()); // Check for unknown fields in the JSON @@ -99,33 +99,33 @@ bool MCPJson::PopulateFromJson( { if (!KnownKeys.Contains(KV.Key)) { - UMCPServer::Printf(TEXT("ERROR: Unknown parameter '%s'\n"), *KV.Key); + UWingServer::Printf(TEXT("ERROR: Unknown parameter '%s'\n"), *KV.Key); Ok = false; } } // Populate each property from JSON - for (MCPProperty& P : Props) + for (WingProperty& P : Props) { if (!PopulateFromJson(P, Json, AllOptional)) Ok = false; } return Ok; } -bool MCPJson::PopulateFromJson( +bool WingJson::PopulateFromJson( UStruct* StructType, void* Container, const FJsonObject* Json) { - TArray Props = MCPProperty::GetAll(StructType, Container, (EPropertyFlags)0); + TArray Props = WingProperty::GetAll(StructType, Container, (EPropertyFlags)0); return PopulateFromJson(Props, Json); } -bool MCPJson::PopulateFromJson( +bool WingJson::PopulateFromJson( UStruct* StructType, void* Container, const TSharedPtr& JsonValue) { if (!JsonValue.IsValid() || (JsonValue->Type != EJson::Object)) { - UMCPServer::Print(TEXT("ERROR: Expected a JSON object\n")); + UWingServer::Print(TEXT("ERROR: Expected a JSON object\n")); return false; } return PopulateFromJson(StructType, Container, JsonValue->AsObject().Get()); diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/MCPNotifier.cpp b/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/WingNotifier.cpp similarity index 93% rename from Plugins/BlueprintMCP/Source/BlueprintMCP/Private/MCPNotifier.cpp rename to Plugins/BlueprintMCP/Source/BlueprintMCP/Private/WingNotifier.cpp index 03849ae9..25e5056a 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/MCPNotifier.cpp +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/WingNotifier.cpp @@ -1,4 +1,4 @@ -#include "MCPNotifier.h" +#include "WingNotifier.h" #include "EdGraph/EdGraphNode.h" #include "EdGraph/EdGraph.h" #include "Engine/Blueprint.h" @@ -6,7 +6,7 @@ #include "Kismet2/BlueprintEditorUtils.h" #include "MaterialEditingLibrary.h" -void MCPNotifier::AddTouchedObject(UObject* Obj) +void WingNotifier::AddTouchedObject(UObject* Obj) { if (!Obj) return; bool bAlreadyInSet = false; @@ -16,7 +16,7 @@ void MCPNotifier::AddTouchedObject(UObject* Obj) Obj->PreEditChange(nullptr); } -void MCPNotifier::SendNotifications() +void WingNotifier::SendNotifications() { TSet Nodes; TSet Graphs; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/MCPProperty.cpp b/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/WingProperty.cpp similarity index 61% rename from Plugins/BlueprintMCP/Source/BlueprintMCP/Private/MCPProperty.cpp rename to Plugins/BlueprintMCP/Source/BlueprintMCP/Private/WingProperty.cpp index af5e7483..38385f90 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/MCPProperty.cpp +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/WingProperty.cpp @@ -1,7 +1,7 @@ -#include "MCPProperty.h" -#include "MCPUtils.h" -#include "MCPServer.h" -#include "MCPTypes.h" +#include "WingProperty.h" +#include "WingUtils.h" +#include "WingServer.h" +#include "WingTypes.h" #include "Engine/Blueprint.h" #include "Materials/MaterialExpression.h" #include "MaterialGraph/MaterialGraphNode.h" @@ -14,20 +14,20 @@ static bool IsPinTypeProperty(FProperty* Prop) return StructProp && StructProp->Struct == FEdGraphPinType::StaticStruct(); } -MCPProperty::MCPProperty(FProperty* InProp, void* InContainer) +WingProperty::WingProperty(FProperty* InProp, void* InContainer) : Prop(InProp), Container(InContainer) {} -FString MCPProperty::GetText() const +FString WingProperty::GetText() const { void* ValuePtr = Prop->ContainerPtrToValuePtr(Container); if (IsPinTypeProperty(Prop)) - return UMCPTypes::TypeToText(*static_cast(ValuePtr)); + return UWingTypes::TypeToText(*static_cast(ValuePtr)); FString Result; Prop->ExportTextItem_Direct(Result, ValuePtr, nullptr, nullptr, PPF_None); return Result; } -bool MCPProperty::TryParseEnum(UEnum* Enum, const FString& Text, int64 &OutValue) +bool WingProperty::TryParseEnum(UEnum* Enum, const FString& Text, int64 &OutValue) { int Index = Enum->GetIndexByNameString(Text); if (Index == INDEX_NONE) @@ -40,7 +40,7 @@ bool MCPProperty::TryParseEnum(UEnum* Enum, const FString& Text, int64 &OutValue } if (Index == INDEX_NONE) { - UMCPServer::Printf(TEXT("ERROR: '%s' is not a valid value for %s\n"), + UWingServer::Printf(TEXT("ERROR: '%s' is not a valid value for %s\n"), *Text, *Enum->GetName()); OutValue = 0; return false; @@ -52,13 +52,13 @@ bool MCPProperty::TryParseEnum(UEnum* Enum, const FString& Text, int64 &OutValue } } -bool MCPProperty::TrySetText(const FString &Value) +bool WingProperty::TrySetText(const FString &Value) { void* ValuePtr = Prop->ContainerPtrToValuePtr(Container); - // Pin types get parsed by UMCPTypes. + // Pin types get parsed by UWingTypes. if (IsPinTypeProperty(Prop)) - return UMCPTypes::TextToType(Value, *static_cast(ValuePtr)); + return UWingTypes::TextToType(Value, *static_cast(ValuePtr)); // Byte Enum types get parsed by TryParseEnum, above. if (FByteProperty* ByteProp = CastField(Prop)) @@ -85,14 +85,14 @@ bool MCPProperty::TrySetText(const FString &Value) const TCHAR* Result = Prop->ImportText_Direct(*Value, ValuePtr, nullptr, PPF_None); if (!Result) { - UMCPServer::Printf(TEXT("ERROR: Failed to parse '%s' for property '%s' (type: %s)\n"), - *Value, *MCPUtils::FormatName(Prop), *Prop->GetCPPType()); + UWingServer::Printf(TEXT("ERROR: Failed to parse '%s' for property '%s' (type: %s)\n"), + *Value, *WingUtils::FormatName(Prop), *Prop->GetCPPType()); return false; } return true; } -bool MCPProperty::SetText(const FString& Value) +bool WingProperty::SetText(const FString& Value) { if (!TrySetText(Value)) return false; @@ -105,7 +105,7 @@ bool MCPProperty::SetText(const FString& Value) return true; } -void MCPProperty::Collect(UStruct* StructType, void* Container, TArray &Props, EPropertyFlags Flags) +void WingProperty::Collect(UStruct* StructType, void* Container, TArray &Props, EPropertyFlags Flags) { for (TFieldIterator It(StructType); It; ++It) { @@ -114,15 +114,15 @@ void MCPProperty::Collect(UStruct* StructType, void* Container, TArray& Props, const FString& Name) +void WingProperty::Remove(TArray& Props, const FString& Name) { - Props.RemoveAll([&](const MCPProperty& P) { return P.Prop->GetName() == Name; }); + Props.RemoveAll([&](const WingProperty& P) { return P.Prop->GetName() == Name; }); } -TArray MCPProperty::GetAll(UObject* Obj, EPropertyFlags Flags) +TArray WingProperty::GetAll(UObject* Obj, EPropertyFlags Flags) { if (!Obj) return {}; - TArray Result; + TArray Result; // Blueprints don't have editable properties. So // instead, we fetch properties from the generated CDO, @@ -132,7 +132,7 @@ TArray MCPProperty::GetAll(UObject* Obj, EPropertyFlags Flags) { if (BP->GeneratedClass == nullptr) { - UMCPServer::Printf(TEXT("ERROR: Blueprint '%s' has no GeneratedClass\n"), *Obj->GetName()); + UWingServer::Printf(TEXT("ERROR: Blueprint '%s' has no GeneratedClass\n"), *Obj->GetName()); return {}; } Obj = BP->GeneratedClass->GetDefaultObject(); @@ -153,42 +153,42 @@ TArray MCPProperty::GetAll(UObject* Obj, EPropertyFlags Flags) return Result; } -TArray MCPProperty::GetAll(UStruct* StructType, void* Container, EPropertyFlags Flags) +TArray WingProperty::GetAll(UStruct* StructType, void* Container, EPropertyFlags Flags) { - TArray Result; + TArray Result; Collect(StructType, Container, Result, Flags); return Result; } -TArray MCPProperty::FindAllSubstring(const TArray& Props, const FString& Substring) +TArray WingProperty::FindAllSubstring(const TArray& Props, const FString& Substring) { if (Substring.IsEmpty()) return Props; - TArray Result; - for (const MCPProperty& P : Props) + TArray Result; + for (const WingProperty& P : Props) { - if (MCPUtils::FormatName(P.Prop).Contains(Substring, ESearchCase::IgnoreCase)) + if (WingUtils::FormatName(P.Prop).Contains(Substring, ESearchCase::IgnoreCase)) Result.Add(P); } return Result; } -MCPProperty MCPProperty::FindOneExactMatch(const TArray& Props, const FString& Name) +WingProperty WingProperty::FindOneExactMatch(const TArray& Props, const FString& Name) { - TArray Matches; - for (const MCPProperty& P : Props) + TArray Matches; + for (const WingProperty& P : Props) { - if (MCPUtils::Identifies(Name, P.Prop)) + if (WingUtils::Identifies(Name, P.Prop)) Matches.Add(P); } if (Matches.Num() == 0) { - UMCPServer::Printf(TEXT("ERROR: Property '%s' not found\n"), *Name); - return MCPProperty(); + UWingServer::Printf(TEXT("ERROR: Property '%s' not found\n"), *Name); + return WingProperty(); } if (Matches.Num() > 1) { - UMCPServer::Printf(TEXT("ERROR: Ambiguous property '%s'\n"), *Name); - return MCPProperty(); + UWingServer::Printf(TEXT("ERROR: Ambiguous property '%s'\n"), *Name); + return WingProperty(); } return Matches[0]; } diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/MCPServer.cpp b/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/WingServer.cpp similarity index 85% rename from Plugins/BlueprintMCP/Source/BlueprintMCP/Private/MCPServer.cpp rename to Plugins/BlueprintMCP/Source/BlueprintMCP/Private/WingServer.cpp index 0d75098c..14b934d3 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/MCPServer.cpp +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/WingServer.cpp @@ -1,8 +1,8 @@ -#include "MCPServer.h" -#include "MCPHandler.h" -#include "MCPJson.h" +#include "WingServer.h" +#include "WingHandler.h" +#include "WingJson.h" #include "LogCapture.h" -#include "MCPUtils.h" +#include "WingUtils.h" #include "UObject/StrongObjectPtr.h" #include "Materials/MaterialExpression.h" #include "AssetRegistry/AssetRegistryModule.h" @@ -100,20 +100,20 @@ #include "AnimationGraph.h" #include "AnimationTransitionGraph.h" -UMCPServer* UMCPServer::GMCPServer = nullptr; +UWingServer* UWingServer::GWingServer = nullptr; // ============================================================ // Initialization and Shutdown // ============================================================ -void UMCPServer::Initialize(FSubsystemCollectionBase& Collection) +void UWingServer::Initialize(FSubsystemCollectionBase& Collection) { Super::Initialize(Collection); - GMCPServer = this; + GWingServer = this; // Create TCP listen socket ISocketSubsystem* SocketSub = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM); - ListenSocket = SocketSub->CreateSocket(NAME_Stream, TEXT("MCPServer"), false); + ListenSocket = SocketSub->CreateSocket(NAME_Stream, TEXT("WingServer"), false); if (!ListenSocket) { UE_LOG(LogTemp, Error, TEXT("BlueprintMCP: Failed to create listen socket")); @@ -144,14 +144,14 @@ void UMCPServer::Initialize(FSubsystemCollectionBase& Collection) return; } - BuildMCPHandlerRegistry(); + BuildWingHandlerRegistry(); LogCapture.bEnabled = false; LogCapture.Install(); bRunning = true; UE_LOG(LogTemp, Display, TEXT("BlueprintMCP: MCP server listening on tcp://localhost:%d"), Port); } -void UMCPServer::Deinitialize() +void UWingServer::Deinitialize() { if (!bRunning) { @@ -203,7 +203,7 @@ void UMCPServer::Deinitialize() LogCapture.Uninstall(); bRunning = false; bShuttingDown = false; - GMCPServer = nullptr; + GWingServer = nullptr; UE_LOG(LogTemp, Display, TEXT("BlueprintMCP: Server stopped.")); Super::Deinitialize(); } @@ -212,7 +212,7 @@ void UMCPServer::Deinitialize() // FTickableEditorObject interface // ============================================================ -void UMCPServer::Tick(float DeltaTime) +void UWingServer::Tick(float DeltaTime) { // Accept new connections (non-blocking) AcceptNewConnections(); @@ -239,26 +239,26 @@ void UMCPServer::Tick(float DeltaTime) } } -void UMCPServer::TickServer(float DeltaTime) +void UWingServer::TickServer(float DeltaTime) { - if (GMCPServer) GMCPServer->Tick(DeltaTime); + if (GWingServer) GWingServer->Tick(DeltaTime); } -bool UMCPServer::IsTickable() const +bool UWingServer::IsTickable() const { return bRunning; } -TStatId UMCPServer::GetStatId() const +TStatId UWingServer::GetStatId() const { - RETURN_QUICK_DECLARE_CYCLE_STAT(UMCPServer, STATGROUP_Tickables); + RETURN_QUICK_DECLARE_CYCLE_STAT(UWingServer, STATGROUP_Tickables); } // ============================================================ // HandleRequest — Given a command, execute it. // ============================================================ -FString UMCPServer::HandleRequest(const FString& Line) +FString UWingServer::HandleRequest(const FString& Line) { LogCapture.CapturedErrors.Empty(); LogCapture.bEnabled = true; @@ -270,7 +270,7 @@ FString UMCPServer::HandleRequest(const FString& Line) LogCapture.bEnabled = false; for (const FString& Msg : LogCapture.CapturedErrors) { - UMCPServer::Printf(TEXT("UE_LOG: %s\n"), *Msg); + UWingServer::Printf(TEXT("UE_LOG: %s\n"), *Msg); } LogCapture.CapturedErrors.Empty(); FString Result = HandlerOutput.ToString(); @@ -282,7 +282,7 @@ FString UMCPServer::HandleRequest(const FString& Line) return Result; } -void UMCPServer::TryCallHandler(const FString &Line) +void UWingServer::TryCallHandler(const FString &Line) { // Turn the request string into a JSON tree. TSharedPtr Request; @@ -290,7 +290,7 @@ void UMCPServer::TryCallHandler(const FString &Line) FJsonSerializer::Deserialize(Reader, Request); if (!Request.IsValid()) { - UMCPServer::Printf(TEXT("Request is not valid JSON")); + UWingServer::Printf(TEXT("Request is not valid JSON")); return; } @@ -298,28 +298,28 @@ void UMCPServer::TryCallHandler(const FString &Line) FString Command; if (!Request->TryGetStringField(TEXT("command"), Command)) { - UMCPServer::Printf(TEXT("Request does not contain 'command' parameter")); + UWingServer::Printf(TEXT("Request does not contain 'command' parameter")); return; } Request->RemoveField(TEXT("command")); // Find the handler UClass for the specified command. - UClass** HandlerClass = MCPHandlerRegistry.Find(Command); + UClass** HandlerClass = WingHandlerRegistry.Find(Command); if (!HandlerClass) { - UMCPServer::Printf(TEXT("Unknown command: %s"), *Command); + UWingServer::Printf(TEXT("Unknown command: %s"), *Command); return; } // Make an object of the handler class. TStrongObjectPtr HandlerObj(NewObject(GetTransientPackage(), *HandlerClass)); - IMCPHandler* Handler = Cast(HandlerObj.Get()); + IWingHandler* Handler = Cast(HandlerObj.Get()); // Populate the handler object with the request parameters. - if (!MCPJson::PopulateFromJson(HandlerObj->GetClass(), HandlerObj.Get(), &*Request)) + if (!WingJson::PopulateFromJson(HandlerObj->GetClass(), HandlerObj.Get(), &*Request)) { - UMCPServer::Printf(TEXT("\nUsage:\n\n")); - MCPUtils::FormatCommandHelp(*HandlerClass); + UWingServer::Printf(TEXT("\nUsage:\n\n")); + WingUtils::FormatCommandHelp(*HandlerClass); return; } @@ -331,7 +331,7 @@ void UMCPServer::TryCallHandler(const FString &Line) // Connection Maintenance // ============================================================ -void UMCPServer::AcceptNewConnections() +void UWingServer::AcceptNewConnections() { if (!ListenSocket) return; @@ -351,7 +351,7 @@ void UMCPServer::AcceptNewConnections() UE_LOG(LogTemp, Display, TEXT("BlueprintMCP: Client connected.")); } -void UMCPServer::CleanupFinishedClients() +void UWingServer::CleanupFinishedClients() { ISocketSubsystem* SocketSub = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM); @@ -368,7 +368,7 @@ void UMCPServer::CleanupFinishedClients() } } -void UMCPServer::ClientThreadFunc(UMCPServer* Server, TSharedPtr Client) +void UWingServer::ClientThreadFunc(UWingServer* Server, TSharedPtr Client) { FSocket* Socket = Client->Socket; FString LineBuffer; @@ -405,7 +405,7 @@ void UMCPServer::ClientThreadFunc(UMCPServer* Server, TSharedPtr Msg = MakeShared(); + TSharedPtr Msg = MakeShared(); Msg->Line = Line; TFuture Future = Msg->Response.GetFuture(); @@ -435,13 +435,13 @@ void UMCPServer::ClientThreadFunc(UMCPServer* Server, TSharedPtr -struct MCPPrivateAccessor +struct WingPrivateAccessor { friend typename Tag::type GetPtr(Tag) { return M; } }; @@ -35,7 +35,7 @@ struct Tag_FToolMenuEntry_Action using type = FToolUIActionChoice FToolMenuEntry::*; friend type GetPtr(Tag_FToolMenuEntry_Action); }; -template struct MCPPrivateAccessor; +template struct WingPrivateAccessor; static const FToolUIActionChoice& GetAction(const FToolMenuEntry& Entry) { @@ -49,7 +49,7 @@ struct Tag_FToolMenuEntry_Command using type = TSharedPtr FToolMenuEntry::*; friend type GetPtr(Tag_FToolMenuEntry_Command); }; -template struct MCPPrivateAccessor; +template struct WingPrivateAccessor; static bool HasCommand(const FToolMenuEntry& Entry) { @@ -63,7 +63,7 @@ static bool HasCommand(const FToolMenuEntry& Entry) // the LLM can easily remember what to type. // ============================================================ -FText MCPToolMenu::MakeBetterLabel(const UEdGraphPin *Pin, const FText &EntryLabel) +FText WingToolMenu::MakeBetterLabel(const UEdGraphPin *Pin, const FText &EntryLabel) { FString Sanitized = EntryLabel.ToString(); int32 Dst = 0; @@ -88,7 +88,7 @@ FText MCPToolMenu::MakeBetterLabel(const UEdGraphPin *Pin, const FText &EntryLab Sanitized.LeftInline(Dst); if (Pin) { - Sanitized = FString::Printf(TEXT("Pin:%s:%s"), *MCPUtils::FormatName(Pin), *Sanitized); + Sanitized = FString::Printf(TEXT("Pin:%s:%s"), *WingUtils::FormatName(Pin), *Sanitized); } return FText::FromString(Sanitized); } @@ -97,7 +97,7 @@ FText MCPToolMenu::MakeBetterLabel(const UEdGraphPin *Pin, const FText &EntryLab // Check if an array of entries contains a specific label. // ============================================================ -bool MCPToolMenu::ContainsText(const TArray &Texts, const FText &Value) +bool WingToolMenu::ContainsText(const TArray &Texts, const FText &Value) { for (const FText &Text : Texts) { @@ -113,7 +113,7 @@ bool MCPToolMenu::ContainsText(const TArray &Texts, const FText &Value) // AddEntry — create a synthetic menu entry with a direct action. // ============================================================ -void MCPToolMenu::AddEntry(TArray& Entries, UEdGraphPin* Pin, +void WingToolMenu::AddEntry(TArray& Entries, UEdGraphPin* Pin, const TCHAR* Label, FCanExecuteAction CanExec, FExecuteAction Exec) { if (!CanExec.Execute()) @@ -127,7 +127,7 @@ void MCPToolMenu::AddEntry(TArray& Entries, UEdGraphPin* Pin, Entries.Add(MoveTemp(Entry)); } -void MCPToolMenu::AddSyntheticEntries(TArray &Entries, UEdGraphNode *NodePtr) +void WingToolMenu::AddSyntheticEntries(TArray &Entries, UEdGraphNode *NodePtr) { const UEdGraphSchema_K2 *K2Schema = Cast(NodePtr->GetSchema()); if (K2Schema == nullptr) return; @@ -150,7 +150,7 @@ void MCPToolMenu::AddSyntheticEntries(TArray &Entries, UEdGraphN // do anything with the labels yet. // ============================================================ -TArray MCPToolMenu::GetMenuItems( +TArray WingToolMenu::GetMenuItems( UGraphNodeContextMenuContext* GNC, const FToolMenuContext &TMC) { TArray Result; @@ -164,7 +164,7 @@ TArray MCPToolMenu::GetMenuItems( return Result; } -TArray MCPToolMenu::GetMenuItems(UEdGraphNode *Node, const FToolMenuContext &Context) +TArray WingToolMenu::GetMenuItems(UEdGraphNode *Node, const FToolMenuContext &Context) { // Create the two context objects. TArray Result; @@ -192,7 +192,7 @@ TArray MCPToolMenu::GetMenuItems(UEdGraphNode *Node, const FTool for (const UEdGraphPin *Pin : Node->Pins) { if (Pin->bHidden) continue; - FString PinName = MCPUtils::FormatName(Pin); + FString PinName = WingUtils::FormatName(Pin); GNC->Init(Node->GetGraph(), Node, Pin, false); TArray PinEntries = GetMenuItems(GNC, Context); for (FToolMenuEntry &PinEntry : PinEntries) @@ -225,7 +225,7 @@ TArray MCPToolMenu::GetMenuItems(UEdGraphNode *Node, const FTool // selection/focus state which we can't reliably provide. // ============================================================ -bool MCPToolMenu::CanExecute(const FToolMenuEntry& Entry, const FToolMenuContext& Context) +bool WingToolMenu::CanExecute(const FToolMenuEntry& Entry, const FToolMenuContext& Context) { if (HasCommand(Entry)) return false; @@ -252,7 +252,7 @@ bool MCPToolMenu::CanExecute(const FToolMenuEntry& Entry, const FToolMenuContext return false; } -bool MCPToolMenu::Execute(const FToolMenuEntry& Entry, const FToolMenuContext& Context) +bool WingToolMenu::Execute(const FToolMenuEntry& Entry, const FToolMenuContext& Context) { if (HasCommand(Entry)) return false; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/MCPTypes.cpp b/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/WingTypes.cpp similarity index 84% rename from Plugins/BlueprintMCP/Source/BlueprintMCP/Private/MCPTypes.cpp rename to Plugins/BlueprintMCP/Source/BlueprintMCP/Private/WingTypes.cpp index 8e4f69fa..4f15d01b 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/MCPTypes.cpp +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/WingTypes.cpp @@ -1,5 +1,5 @@ -#include "MCPTypes.h" -#include "MCPServer.h" +#include "WingTypes.h" +#include "WingServer.h" #include "Editor.h" #include "EdGraphSchema_K2.h" #include "Engine/Blueprint.h" @@ -9,7 +9,7 @@ // Choose Short Name // --------------------------------------------------------------------------- -FString UMCPTypes::GetNameWithoutUnderscoreC(const UObject *Obj) +FString UWingTypes::GetNameWithoutUnderscoreC(const UObject *Obj) { FString Name = Obj->GetName(); if (Name.EndsWith(TEXT("_C"))) @@ -23,13 +23,13 @@ FString UMCPTypes::GetNameWithoutUnderscoreC(const UObject *Obj) return Name; } -void UMCPTypes::ReserveShortName(FName Name) +void UWingTypes::ReserveShortName(FName Name) { FString NameStr = Name.ToString(); ShortToPath.Add(NameStr.ToLower(), FString(TEXT("PRIMITIVE"))); } -FString UMCPTypes::ChooseShortName(const UObject* Obj) +FString UWingTypes::ChooseShortName(const UObject* Obj) { if (!Cast(Obj) && !Cast(Obj) && !Cast(Obj)) return FString(); @@ -61,7 +61,7 @@ FString UMCPTypes::ChooseShortName(const UObject* Obj) } } -void UMCPTypes::ChooseShortNames(UPackage* Package) +void UWingTypes::ChooseShortNames(UPackage* Package) { if (Package == nullptr) return; @@ -78,7 +78,7 @@ void UMCPTypes::ChooseShortNames(UPackage* Package) // TypeToText // --------------------------------------------------------------------------- -FString UMCPTypes::TypeToTextInner(FName Category, FName SubCategory, UObject* SubCategoryObject) +FString UWingTypes::TypeToTextInner(FName Category, FName SubCategory, UObject* SubCategoryObject) { if ((Category == UEdGraphSchema_K2::PC_Boolean) || (Category == UEdGraphSchema_K2::PC_Int) || @@ -131,9 +131,9 @@ FString UMCPTypes::TypeToTextInner(FName Category, FName SubCategory, UObject* S return FString(); } -FString UMCPTypes::TypeToText(const FEdGraphPinType& PinType) +FString UWingTypes::TypeToText(const FEdGraphPinType& PinType) { - UMCPTypes* Types = GEditor->GetEditorSubsystem(); + UWingTypes* Types = GEditor->GetEditorSubsystem(); if (!Types) return FString(); FString Inner = Types->TypeToTextInner(PinType.PinCategory, PinType.PinSubCategory, PinType.PinSubCategoryObject.Get()); @@ -158,7 +158,7 @@ FString UMCPTypes::TypeToText(const FEdGraphPinType& PinType) return Inner; } -FString UMCPTypes::TypeToText(const FProperty *Property) +FString UWingTypes::TypeToText(const FProperty *Property) { FEdGraphPinType PinType; if (!GetDefault()->ConvertPropertyToPinType(Property, PinType)) @@ -171,9 +171,9 @@ FString UMCPTypes::TypeToText(const FProperty *Property) } } -FString UMCPTypes::TypeToText(const UObject* Obj) +FString UWingTypes::TypeToText(const UObject* Obj) { - UMCPTypes* Types = GEditor->GetEditorSubsystem(); + UWingTypes* Types = GEditor->GetEditorSubsystem(); if (!Types) return FString(); return Types->ChooseShortName(Obj); } @@ -182,7 +182,7 @@ FString UMCPTypes::TypeToText(const UObject* Obj) // Subsystem lifecycle // --------------------------------------------------------------------------- -void UMCPTypes::Initialize(FSubsystemCollectionBase& Collection) +void UWingTypes::Initialize(FSubsystemCollectionBase& Collection) { Super::Initialize(Collection); @@ -212,10 +212,10 @@ void UMCPTypes::Initialize(FSubsystemCollectionBase& Collection) for (UPackage* Pkg : Packages) ChooseShortNames(Pkg); - UE_LOG(LogTemp, Display, TEXT("MCPTypes: Registered %d types"), ShortToPath.Num()); + UE_LOG(LogTemp, Display, TEXT("WingTypes: Registered %d types"), ShortToPath.Num()); } -void UMCPTypes::Deinitialize() +void UWingTypes::Deinitialize() { Super::Deinitialize(); } @@ -224,7 +224,7 @@ void UMCPTypes::Deinitialize() // Tokenizer // --------------------------------------------------------------------------- -void UMCPTypes::Tokenize(const FString& Input) +void UWingTypes::Tokenize(const FString& Input) { Tokens.Empty(); Cursor = 0; @@ -262,7 +262,7 @@ void UMCPTypes::Tokenize(const FString& Input) // Path to Object Conversion // --------------------------------------------------------------------------- -bool UMCPTypes::ResolvePath(const FString &Name, const FString &Path, FEdGraphPinType &OutType) +bool UWingTypes::ResolvePath(const FString &Name, const FString &Path, FEdGraphPinType &OutType) { // Load the object. UObject* Obj = LoadObject(nullptr, *Path); @@ -314,13 +314,13 @@ bool UMCPTypes::ResolvePath(const FString &Name, const FString &Path, FEdGraphPi // Parsing Types // --------------------------------------------------------------------------- -bool UMCPTypes::TokenIs(const TCHAR* Text) const +bool UWingTypes::TokenIs(const TCHAR* Text) const { if (Cursor >= Tokens.Num()) return false; return Tokens[Cursor].Equals(Text, ESearchCase::IgnoreCase); } -bool UMCPTypes::TokenIs(const TCHAR* Text, TCHAR Next) const +bool UWingTypes::TokenIs(const TCHAR* Text, TCHAR Next) const { if (Cursor >= Tokens.Num() - 1) return false; return (Tokens[Cursor].Equals(Text, ESearchCase::IgnoreCase)) && @@ -328,20 +328,20 @@ bool UMCPTypes::TokenIs(const TCHAR* Text, TCHAR Next) const (Tokens[Cursor+1][0] == Next); } -bool UMCPTypes::TokenIs(TCHAR Next) const +bool UWingTypes::TokenIs(TCHAR Next) const { if (Cursor >= Tokens.Num()) return false; return (Tokens[Cursor].Len() == 1) && (Tokens[Cursor][0] == Next); } -bool UMCPTypes::TokenIsID() const +bool UWingTypes::TokenIsID() const { if (Cursor >= Tokens.Num()) return false; return FChar::IsAlnum(Tokens[Cursor][0]); } -bool UMCPTypes::ParseEOF() +bool UWingTypes::ParseEOF() { if (Cursor != Tokens.Num()) { @@ -351,7 +351,7 @@ bool UMCPTypes::ParseEOF() return true; } -bool UMCPTypes::ParseChar(TCHAR c) +bool UWingTypes::ParseChar(TCHAR c) { if (!TokenIs(c)) { @@ -362,7 +362,7 @@ bool UMCPTypes::ParseChar(TCHAR c) return true; } -bool UMCPTypes::ParsePlainIdentifier(FEdGraphPinType& OutType) +bool UWingTypes::ParsePlainIdentifier(FEdGraphPinType& OutType) { if (!TokenIsID()) { @@ -394,7 +394,7 @@ bool UMCPTypes::ParsePlainIdentifier(FEdGraphPinType& OutType) } } -bool UMCPTypes::ParseWrapped(FName Wrapper, FEdGraphPinType& OutType) +bool UWingTypes::ParseWrapped(FName Wrapper, FEdGraphPinType& OutType) { Cursor++; if (!ParseChar('<')) return false; @@ -409,7 +409,7 @@ bool UMCPTypes::ParseWrapped(FName Wrapper, FEdGraphPinType& OutType) return true; } -bool UMCPTypes::ParseMaybeWrapped(FEdGraphPinType& OutType) +bool UWingTypes::ParseMaybeWrapped(FEdGraphPinType& OutType) { if (TokenIs(TEXT("Soft"), '<')) { @@ -426,7 +426,7 @@ bool UMCPTypes::ParseMaybeWrapped(FEdGraphPinType& OutType) else return ParsePlainIdentifier(OutType); } -bool UMCPTypes::ParseArrayOrSet(FEdGraphPinType& OutType) +bool UWingTypes::ParseArrayOrSet(FEdGraphPinType& OutType) { Cursor++; if (!ParseChar('<')) return false; @@ -435,7 +435,7 @@ bool UMCPTypes::ParseArrayOrSet(FEdGraphPinType& OutType) return true; } -bool UMCPTypes::ParseMap(FEdGraphPinType& OutType) +bool UWingTypes::ParseMap(FEdGraphPinType& OutType) { Cursor++; if (!ParseChar('<')) return false; @@ -450,7 +450,7 @@ bool UMCPTypes::ParseMap(FEdGraphPinType& OutType) return true; } -bool UMCPTypes::ParseType(FEdGraphPinType& OutType) +bool UWingTypes::ParseType(FEdGraphPinType& OutType) { if (TokenIs(TEXT("Array"), '<')) { @@ -475,9 +475,9 @@ bool UMCPTypes::ParseType(FEdGraphPinType& OutType) return true; } -FString UMCPTypes::TryTextToType(const FString& Text, FEdGraphPinType& OutPinType) +FString UWingTypes::TryTextToType(const FString& Text, FEdGraphPinType& OutPinType) { - UMCPTypes* Types = GEditor->GetEditorSubsystem(); + UWingTypes* Types = GEditor->GetEditorSubsystem(); check(Types); Types->Error.Empty(); Types->Tokenize(Text); @@ -486,15 +486,15 @@ FString UMCPTypes::TryTextToType(const FString& Text, FEdGraphPinType& OutPinTyp return FString(); } -bool UMCPTypes::TextToType(const FString& Text, FEdGraphPinType& OutPinType) +bool UWingTypes::TextToType(const FString& Text, FEdGraphPinType& OutPinType) { FString Error = TryTextToType(Text, OutPinType); if (Error.IsEmpty()) return true; - UMCPServer::Print(Error); + UWingServer::Print(Error); return false; } -UClass* UMCPTypes::TextToOneObjectType(const FString& Text) +UClass* UWingTypes::TextToOneObjectType(const FString& Text) { FEdGraphPinType PinType; if (!TextToType(Text, PinType)) return nullptr; @@ -502,13 +502,13 @@ UClass* UMCPTypes::TextToOneObjectType(const FString& Text) if ((!Class) || (PinType.PinCategory != UEdGraphSchema_K2::PC_Object) || (PinType.IsContainer())) { - UMCPServer::Printf(TEXT("ERROR: '%s' is not a plain object class\n"), *Text); + UWingServer::Printf(TEXT("ERROR: '%s' is not a plain object class\n"), *Text); return nullptr; } return Class; } -UClass* UMCPTypes::TextToOneInterfaceType(const FString& Text) +UClass* UWingTypes::TextToOneInterfaceType(const FString& Text) { FEdGraphPinType PinType; if (!TextToType(Text, PinType)) return nullptr; @@ -516,7 +516,7 @@ UClass* UMCPTypes::TextToOneInterfaceType(const FString& Text) if ((!Class) || (PinType.PinCategory != UEdGraphSchema_K2::PC_Interface) || (PinType.IsContainer())) { - UMCPServer::Printf(TEXT("ERROR: '%s' is not an interface class\n"), *Text); + UWingServer::Printf(TEXT("ERROR: '%s' is not an interface class\n"), *Text); return nullptr; } return Class; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/MCPUtils.cpp b/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/WingUtils.cpp similarity index 80% rename from Plugins/BlueprintMCP/Source/BlueprintMCP/Private/MCPUtils.cpp rename to Plugins/BlueprintMCP/Source/BlueprintMCP/Private/WingUtils.cpp index c21f1c90..a4b891fc 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/MCPUtils.cpp +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/WingUtils.cpp @@ -1,8 +1,8 @@ -#include "MCPUtils.h" -#include "MCPJson.h" -#include "MCPTypes.h" -#include "MCPServer.h" -#include "MCPHandler.h" +#include "WingUtils.h" +#include "WingJson.h" +#include "WingTypes.h" +#include "WingServer.h" +#include "WingHandler.h" #include "Engine/Blueprint.h" #include "Engine/MemberReference.h" #include "Engine/World.h" @@ -41,7 +41,7 @@ #include "Animation/BlendSpace.h" #include "Engine/Texture.h" -// SEH support (Windows only) — defined in BlueprintMCPServer.cpp +// SEH support (Windows only) — defined in BlueprintWingServer.cpp #if PLATFORM_WINDOWS extern int32 TryCompileBlueprintSEH(UBlueprint* BP, EBlueprintCompileOptions Opts); extern int32 TrySavePackageSEH( @@ -53,7 +53,7 @@ extern int32 TrySavePackageSEH( // Name Formatting // ============================================================ -void MCPUtils::SanitizeNameInPlace(FString &Name) +void WingUtils::SanitizeNameInPlace(FString &Name) { int32 Dst = 0; for (int32 Src = 0; Src < Name.Len(); Src++) @@ -70,123 +70,123 @@ void MCPUtils::SanitizeNameInPlace(FString &Name) } -FString MCPUtils::FormatName(const UWorld *World) +FString WingUtils::FormatName(const UWorld *World) { return World->GetPathName(); } -FString MCPUtils::FormatName(const UBlueprint *BP) +FString WingUtils::FormatName(const UBlueprint *BP) { return BP->GetPathName(); } -FString MCPUtils::FormatName(const UActorComponent *C) +FString WingUtils::FormatName(const UActorComponent *C) { return C->GetName(); } -FString MCPUtils::FormatName(const UEdGraph *Graph) +FString WingUtils::FormatName(const UEdGraph *Graph) { FString Name = Graph->GetName(); SanitizeNameInPlace(Name); return Name; } -FString MCPUtils::FormatName(const UEdGraphNode* Node) +FString WingUtils::FormatName(const UEdGraphNode* Node) { return Node->GetName(); } -FString MCPUtils::FormatName(const UEdGraphPin *Pin) +FString WingUtils::FormatName(const UEdGraphPin *Pin) { FString Name = Pin->PinName.ToString(); SanitizeNameInPlace(Name); return Name; } -FString MCPUtils::FormatName(const FMemberReference &Ref) +FString WingUtils::FormatName(const FMemberReference &Ref) { FString Name = Ref.GetMemberName().ToString(); SanitizeNameInPlace(Name); return Name; } -FString MCPUtils::FormatName(const FBPVariableDescription &Var) +FString WingUtils::FormatName(const FBPVariableDescription &Var) { FString Name = Var.VarName.ToString(); SanitizeNameInPlace(Name); return Name; } -FString MCPUtils::FormatName(const UStruct *Struct) +FString WingUtils::FormatName(const UStruct *Struct) { FString Name = Struct->GetName(); SanitizeNameInPlace(Name); return Name; } -FString MCPUtils::FormatName(const UMaterial *Material) +FString WingUtils::FormatName(const UMaterial *Material) { return Material->GetPathName(); } -FString MCPUtils::FormatName(const UMaterialInstance *MaterialInstance) +FString WingUtils::FormatName(const UMaterialInstance *MaterialInstance) { return MaterialInstance->GetPathName(); } -FString MCPUtils::FormatName(const UMaterialFunction *MaterialFunction) +FString WingUtils::FormatName(const UMaterialFunction *MaterialFunction) { return MaterialFunction->GetPathName(); } -FString MCPUtils::FormatName(const UMaterialExpression *Expression) +FString WingUtils::FormatName(const UMaterialExpression *Expression) { FString Name = Expression->GetName(); SanitizeNameInPlace(Name); return Name; } -FString MCPUtils::FormatName(const UStaticMesh *Mesh) +FString WingUtils::FormatName(const UStaticMesh *Mesh) { return Mesh->GetPathName(); } -FString MCPUtils::FormatName(const USkeletalMesh *Mesh) +FString WingUtils::FormatName(const USkeletalMesh *Mesh) { return Mesh->GetPathName(); } -FString MCPUtils::FormatName(const UAnimSequence *Anim) +FString WingUtils::FormatName(const UAnimSequence *Anim) { return Anim->GetPathName(); } -FString MCPUtils::FormatName(const UBlendSpace *BlendSpace) +FString WingUtils::FormatName(const UBlendSpace *BlendSpace) { return BlendSpace->GetPathName(); } -FString MCPUtils::FormatName(const UTexture *Texture) +FString WingUtils::FormatName(const UTexture *Texture) { return Texture->GetPathName(); } -FString MCPUtils::FormatName(const UScriptStruct *Struct) +FString WingUtils::FormatName(const UScriptStruct *Struct) { FString Name = Struct->GetName(); SanitizeNameInPlace(Name); return Name; } -FString MCPUtils::FormatName(const UEnum *Enum) +FString WingUtils::FormatName(const UEnum *Enum) { FString Name = Enum->GetName(); SanitizeNameInPlace(Name); return Name; } -FString MCPUtils::FormatName(const FProperty *Prop) +FString WingUtils::FormatName(const FProperty *Prop) { return Prop->GetName(); } @@ -195,10 +195,10 @@ FString MCPUtils::FormatName(const FProperty *Prop) // Identifies // ============================================================ -// Most types are handled by the template in MCPUtils.h. +// Most types are handled by the template in WingUtils.h. // UEdGraphNode also matches by GUID: -bool MCPUtils::Identifies(const FString &Name, const UEdGraphNode* Node) +bool WingUtils::Identifies(const FString &Name, const UEdGraphNode* Node) { if (Node->NodeGuid.ToString().Equals(Name, ESearchCase::IgnoreCase)) return true; @@ -210,7 +210,7 @@ bool MCPUtils::Identifies(const FString &Name, const UEdGraphNode* Node) // ============================================================ -FString MCPUtils::FormatNodeTitle(const UEdGraphNode *Node) +FString WingUtils::FormatNodeTitle(const UEdGraphNode *Node) { FString Title = Node->GetNodeTitle(ENodeTitleType::FullTitle).ToString(); int32 NewlineIdx; @@ -227,7 +227,7 @@ FString MCPUtils::FormatNodeTitle(const UEdGraphNode *Node) // Text formatting // ============================================================ -FString MCPUtils::WrapText(const FString& Text, int32 ColLimit, const FString& Prefix) +FString WingUtils::WrapText(const FString& Text, int32 ColLimit, const FString& Prefix) { FString Clean = Text; Clean.ReplaceInline(TEXT("\r\n"), TEXT("\n")); @@ -263,7 +263,7 @@ FString MCPUtils::WrapText(const FString& Text, int32 ColLimit, const FString& P // Enum helpers // ============================================================ -FString MCPUtils::EnumToString(UEnum* Enum, int64 Value, const FString& Prefix) +FString WingUtils::EnumToString(UEnum* Enum, int64 Value, const FString& Prefix) { FString Full = Enum->GetNameStringByValue(Value); if (!Prefix.IsEmpty() && Full.StartsWith(Prefix)) @@ -271,12 +271,12 @@ FString MCPUtils::EnumToString(UEnum* Enum, int64 Value, const FString& Prefix) return Full; } -bool MCPUtils::StringToEnum(UEnum* Enum, const FString& Str, int64& OutValue, const FString& Prefix) +bool WingUtils::StringToEnum(UEnum* Enum, const FString& Str, int64& OutValue, const FString& Prefix) { OutValue = Enum->GetValueByNameString(Prefix + Str); if (OutValue == INDEX_NONE) { - UMCPServer::Printf(TEXT("ERROR: Invalid value '%s' for %s\n"), *Str, *Enum->GetName()); + UWingServer::Printf(TEXT("ERROR: Invalid value '%s' for %s\n"), *Str, *Enum->GetName()); return false; } return true; @@ -286,14 +286,14 @@ bool MCPUtils::StringToEnum(UEnum* Enum, const FString& Str, int64& OutValue, co // Blueprint helpers // ============================================================ -TArray MCPUtils::AllGraphs(UBlueprint* BP) +TArray WingUtils::AllGraphs(UBlueprint* BP) { TArray Graphs; BP->GetAllGraphs(Graphs); return Graphs; } -TArray MCPUtils::AllGraphsNamed(UBlueprint* BP, const FString& Name) +TArray WingUtils::AllGraphsNamed(UBlueprint* BP, const FString& Name) { TArray Result; for (UEdGraph* Graph : AllGraphs(BP)) @@ -302,7 +302,7 @@ TArray MCPUtils::AllGraphsNamed(UBlueprint* BP, const FString& Name) return Result; } -TArray MCPUtils::AllNodes(UBlueprint* BP) +TArray WingUtils::AllNodes(UBlueprint* BP) { TArray Nodes; for (UEdGraph* Graph : AllGraphs(BP)) @@ -310,7 +310,7 @@ TArray MCPUtils::AllNodes(UBlueprint* BP) return Nodes; } -bool MCPUtils::SaveBlueprintPackage(UBlueprint* BP) +bool WingUtils::SaveBlueprintPackage(UBlueprint* BP) { UPackage* Package = BP->GetPackage(); UE_LOG(LogTemp, Display, TEXT("BlueprintMCP: SaveBlueprintPackage — begin for '%s'"), *BP->GetName()); @@ -440,7 +440,7 @@ bool MCPUtils::SaveBlueprintPackage(UBlueprint* BP) // FindClassByName // ============================================================ -UClass* MCPUtils::FindClassByName(const FString& ClassName) +UClass* WingUtils::FindClassByName(const FString& ClassName) { // Exact match first (handles both C++ classes and Blueprint _C classes) for (TObjectIterator It; It; ++It) @@ -469,7 +469,7 @@ UClass* MCPUtils::FindClassByName(const FString& ClassName) // Material helpers // ============================================================ -void MCPUtils::EnsureMaterialGraph(UMaterial* Material) +void WingUtils::EnsureMaterialGraph(UMaterial* Material) { if (!Material) return; if (!Material->MaterialGraph) @@ -486,7 +486,7 @@ void MCPUtils::EnsureMaterialGraph(UMaterial* Material) } } -UMaterial* MCPUtils::ReplaceMaterialWithTransientCopy(UMaterial* Material) +UMaterial* WingUtils::ReplaceMaterialWithTransientCopy(UMaterial* Material) { if (!Material) return nullptr; @@ -514,7 +514,7 @@ UMaterial* MCPUtils::ReplaceMaterialWithTransientCopy(UMaterial* Material) return Material; } -bool MCPUtils::SaveGenericPackage(UObject* Asset) +bool WingUtils::SaveGenericPackage(UObject* Asset) { if (!Asset) return false; UPackage* Package = Asset->GetPackage(); @@ -556,7 +556,7 @@ bool MCPUtils::SaveGenericPackage(UObject* Asset) // Anim blueprint helpers // ============================================================ -UAnimationStateMachineGraph* MCPUtils::FindStateMachineGraph(UBlueprint* BP, const FString& GraphName) +UAnimationStateMachineGraph* WingUtils::FindStateMachineGraph(UBlueprint* BP, const FString& GraphName) { TArray AllGraphs; BP->GetAllGraphs(AllGraphs); @@ -573,7 +573,7 @@ UAnimationStateMachineGraph* MCPUtils::FindStateMachineGraph(UBlueprint* BP, con return nullptr; } -UAnimStateNode* MCPUtils::FindStateByName(UAnimationStateMachineGraph* SMGraph, const FString& StateName) +UAnimStateNode* WingUtils::FindStateByName(UAnimationStateMachineGraph* SMGraph, const FString& StateName) { for (UEdGraphNode* Node : SMGraph->Nodes) { @@ -585,11 +585,11 @@ UAnimStateNode* MCPUtils::FindStateByName(UAnimationStateMachineGraph* SMGraph, } } } - UMCPServer::Printf(TEXT("ERROR: State '%s' not found in graph '%s'\n"), *StateName, *SMGraph->GetName()); + UWingServer::Printf(TEXT("ERROR: State '%s' not found in graph '%s'\n"), *StateName, *SMGraph->GetName()); return nullptr; } -UAnimStateTransitionNode* MCPUtils::FindTransition(UAnimationStateMachineGraph* SMGraph, +UAnimStateTransitionNode* WingUtils::FindTransition(UAnimationStateMachineGraph* SMGraph, const FString& FromStateName, const FString& ToStateName) { for (UEdGraphNode* Node : SMGraph->Nodes) @@ -613,7 +613,7 @@ UAnimStateTransitionNode* MCPUtils::FindTransition(UAnimationStateMachineGraph* // Graph actions (node spawning) // ============================================================ -FString MCPUtils::ActionFullName(const TSharedPtr& Action) +FString WingUtils::ActionFullName(const TSharedPtr& Action) { FString Category = Action->GetCategory().ToString(); FString MenuName = Action->GetMenuDescription().ToString(); @@ -622,7 +622,7 @@ FString MCPUtils::ActionFullName(const TSharedPtr& Action) return Category + TEXT("|") + MenuName; } -TArray> MCPUtils::SearchGraphActions(UEdGraph* Graph, const FString& Query, int32 MaxResults, bool ExactMatch) +TArray> WingUtils::SearchGraphActions(UEdGraph* Graph, const FString& Query, int32 MaxResults, bool ExactMatch) { FString QueryLower = Query.ToLower(); TArray> Result; @@ -663,17 +663,17 @@ TArray> MCPUtils::SearchGraphActions(UEdGraph* // ============================================================ // ============================================================ -// CollectHandlerClasses — find all concrete IMCPHandler classes +// CollectHandlerClasses — find all concrete IWingHandler classes // ============================================================ -TArray MCPUtils::CollectHandlerClasses() +TArray WingUtils::CollectHandlerClasses() { TArray Result; for (TObjectIterator It; It; ++It) { UClass* Class = *It; if (Class->HasAnyClassFlags(CLASS_Abstract)) continue; - if (!Class->ImplementsInterface(UMCPHandler::StaticClass())) continue; + if (!Class->ImplementsInterface(UWingHandler::StaticClass())) continue; Result.Add(Class); } Result.Sort([](UClass& A, UClass& B) { return GetHandlerName(&A) < GetHandlerName(&B); }); @@ -684,11 +684,11 @@ TArray MCPUtils::CollectHandlerClasses() // GetHandlerName — derive tool name from handler class name // ============================================================ -FString MCPUtils::GetHandlerName(UClass* HandlerClass) +FString WingUtils::GetHandlerName(UClass* HandlerClass) { FString Name = HandlerClass->GetName(); - // Strip "MCP_" prefix - if (Name.StartsWith(TEXT("MCP_"))) + // Strip "Wing_" prefix + if (Name.StartsWith(TEXT("Wing_"))) Name = Name.Mid(4); return Name; } @@ -697,11 +697,11 @@ FString MCPUtils::GetHandlerName(UClass* HandlerClass) // GetHandlerGroup — derive group name from handler class name // ============================================================ -FString MCPUtils::GetHandlerGroup(UClass* HandlerClass) +FString WingUtils::GetHandlerGroup(UClass* HandlerClass) { FString Name = HandlerClass->GetName(); - // Strip "MCP_" prefix - if (Name.StartsWith(TEXT("MCP_"))) + // Strip "Wing_" prefix + if (Name.StartsWith(TEXT("Wing_"))) Name = Name.Mid(4); // Everything before the underscore is the group int32 UnderscoreIdx; @@ -718,11 +718,11 @@ FString MCPUtils::GetHandlerGroup(UClass* HandlerClass) // FindPropertyByName // ============================================================ -FProperty* MCPUtils::FindPropertyByName(UObject* Obj, const FString& Name) +FProperty* WingUtils::FindPropertyByName(UObject* Obj, const FString& Name) { if (!Obj) { - UMCPServer::Print(TEXT("ERROR: Object is null\n")); + UWingServer::Print(TEXT("ERROR: Object is null\n")); return nullptr; } @@ -732,14 +732,14 @@ FProperty* MCPUtils::FindPropertyByName(UObject* Obj, const FString& Name) if (!Identifies(Name, *PropIt)) continue; if (Found) { - UMCPServer::Printf(TEXT("ERROR: Ambiguous property '%s' on %s\n"), *Name, *FormatName(Obj->GetClass())); + UWingServer::Printf(TEXT("ERROR: Ambiguous property '%s' on %s\n"), *Name, *FormatName(Obj->GetClass())); return nullptr; } Found = *PropIt; } if (!Found) - UMCPServer::Printf(TEXT("ERROR: Property '%s' not found on %s\n"), *Name, *FormatName(Obj->GetClass())); + UWingServer::Printf(TEXT("ERROR: Property '%s' not found on %s\n"), *Name, *FormatName(Obj->GetClass())); return Found; } @@ -748,7 +748,7 @@ FProperty* MCPUtils::FindPropertyByName(UObject* Obj, const FString& Name) // GetPropertyValueText // ============================================================ -FString MCPUtils::GetPropertyValueText(UObject* Container, FProperty* Prop) +FString WingUtils::GetPropertyValueText(UObject* Container, FProperty* Prop) { FString Result; void* ValuePtr = Prop->ContainerPtrToValuePtr(Container); @@ -760,26 +760,26 @@ FString MCPUtils::GetPropertyValueText(UObject* Container, FProperty* Prop) // SetPropertyValueText // ============================================================ -bool MCPUtils::SetPropertyValueText(UObject* Container, FProperty* Prop, const FString& Value) +bool WingUtils::SetPropertyValueText(UObject* Container, FProperty* Prop, const FString& Value) { void* ValuePtr = Prop->ContainerPtrToValuePtr(Container); const TCHAR* ImportResult = Prop->ImportText_Direct(*Value, ValuePtr, Container, PPF_None); if (!ImportResult) { - UMCPServer::Printf(TEXT("ERROR: Failed to parse '%s' for property '%s' (type: %s)\n"), + UWingServer::Printf(TEXT("ERROR: Failed to parse '%s' for property '%s' (type: %s)\n"), *Value, *FormatName(Prop), *Prop->GetCPPType()); return false; } return true; } -bool MCPUtils::SetPropertyValueText(void* Container, FProperty* Prop, const FString& Value, UObject* Owner) +bool WingUtils::SetPropertyValueText(void* Container, FProperty* Prop, const FString& Value, UObject* Owner) { void* ValuePtr = Prop->ContainerPtrToValuePtr(Container); const TCHAR* ImportResult = Prop->ImportText_Direct(*Value, ValuePtr, Owner, PPF_None); if (!ImportResult) { - UMCPServer::Printf(TEXT("ERROR: Failed to parse '%s' for property '%s' (type: %s)\n"), + UWingServer::Printf(TEXT("ERROR: Failed to parse '%s' for property '%s' (type: %s)\n"), *Value, *FormatName(Prop), *Prop->GetCPPType()); return false; } @@ -790,7 +790,7 @@ bool MCPUtils::SetPropertyValueText(void* Container, FProperty* Prop, const FStr // SearchProperties // ============================================================ -TArray MCPUtils::SearchProperties(UObject* Obj, const FString& Query, EPropertyFlags Flags, bool bLocal) +TArray WingUtils::SearchProperties(UObject* Obj, const FString& Query, EPropertyFlags Flags, bool bLocal) { TArray Result; if (!Obj) return Result; @@ -812,43 +812,43 @@ TArray MCPUtils::SearchProperties(UObject* Obj, const FString& Query // FormatCommandHelp — verbose description of one handler command // ============================================================ -void MCPUtils::FormatCommandHelp(UClass* HandlerClass) +void WingUtils::FormatCommandHelp(UClass* HandlerClass) { - const IMCPHandler* Handler = Cast(HandlerClass->GetDefaultObject()); + const IWingHandler* Handler = Cast(HandlerClass->GetDefaultObject()); if (!Handler) return; FString ToolName = GetHandlerName(HandlerClass); - UMCPServer::Print(TEXT("\n")); - UMCPServer::Print(WrapText(Handler->GetDescription(), 80, TEXT("// "))); - UMCPServer::Print(TEXT("\n")); + UWingServer::Print(TEXT("\n")); + UWingServer::Print(WrapText(Handler->GetDescription(), 80, TEXT("// "))); + UWingServer::Print(TEXT("\n")); // Command signature line - UMCPServer::Print(ToolName); - UMCPServer::Print(TEXT("(")); + UWingServer::Print(ToolName); + UWingServer::Print(TEXT("(")); bool bFirst = true; for (TFieldIterator PropIt(HandlerClass, EFieldIterationFlags::None); PropIt; ++PropIt) { - if (!bFirst) UMCPServer::Print(TEXT(",")); + if (!bFirst) UWingServer::Print(TEXT(",")); bFirst = false; - if (PropIt->HasMetaData(TEXT("Optional"))) UMCPServer::Print(TEXT("?")); - UMCPServer::Print(PropIt->GetName()); + if (PropIt->HasMetaData(TEXT("Optional"))) UWingServer::Print(TEXT("?")); + UWingServer::Print(PropIt->GetName()); } - UMCPServer::Print(TEXT(")\n")); + UWingServer::Print(TEXT(")\n")); // parameter details for (TFieldIterator PropIt(HandlerClass, EFieldIterationFlags::None); PropIt; ++PropIt) { FProperty* Prop = *PropIt; FString Name = Prop->GetName(); - FString Type = UMCPTypes::TypeToText(Prop); + FString Type = UWingTypes::TypeToText(Prop); bool bOptional = Prop->HasMetaData(TEXT("Optional")); const FString& Desc = Prop->GetMetaData(TEXT("Description")); - UMCPServer::Printf(TEXT(" %s %s%s"), + UWingServer::Printf(TEXT(" %s %s%s"), *Type, *Name, bOptional ? TEXT(" (optional)") : TEXT("")); if (!Desc.IsEmpty()) - UMCPServer::Printf(TEXT(" — %s"), *Desc); - UMCPServer::Print(TEXT("\n")); + UWingServer::Printf(TEXT(" — %s"), *Desc); + UWingServer::Print(TEXT("\n")); } } diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/MCPCommandlet.cpp b/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/WingmanCommandlet.cpp similarity index 65% rename from Plugins/BlueprintMCP/Source/BlueprintMCP/Private/MCPCommandlet.cpp rename to Plugins/BlueprintMCP/Source/BlueprintMCP/Private/WingmanCommandlet.cpp index b8b8e601..0911dac4 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/MCPCommandlet.cpp +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/WingmanCommandlet.cpp @@ -1,8 +1,8 @@ -#include "MCPCommandlet.h" -#include "MCPServer.h" +#include "WingmanCommandlet.h" +#include "WingServer.h" #include "Containers/Ticker.h" -UBlueprintMCPCommandlet::UBlueprintMCPCommandlet() +UWingmanCommandlet::UWingmanCommandlet() { IsClient = false; IsEditor = true; @@ -10,9 +10,9 @@ UBlueprintMCPCommandlet::UBlueprintMCPCommandlet() LogToConsole = true; } -int32 UBlueprintMCPCommandlet::Main(const FString& Params) +int32 UWingmanCommandlet::Main(const FString& Params) { - // The UMCPServer editor subsystem starts the server automatically. + // The UWingServer editor subsystem starts the server automatically. // We just need to tick it, since FTickableEditorObject doesn't tick in commandlet mode. double LastTime = FPlatformTime::Seconds(); @@ -22,7 +22,7 @@ int32 UBlueprintMCPCommandlet::Main(const FString& Params) double DeltaTime = CurrentTime - LastTime; LastTime = CurrentTime; FTSTicker::GetCoreTicker().Tick(DeltaTime); - UMCPServer::TickServer(DeltaTime); + UWingServer::TickServer(DeltaTime); FPlatformProcess::Sleep(0.01f); } diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/WingmanModule.cpp b/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/WingmanModule.cpp new file mode 100644 index 00000000..be2f62fa --- /dev/null +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/WingmanModule.cpp @@ -0,0 +1,4 @@ +#include "WingmanModule.h" +#include "Modules/ModuleManager.h" + +IMPLEMENT_MODULE(FWingmanModule, BlueprintMCP); diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/MCPModule.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/WingmanModule.h similarity index 77% rename from Plugins/BlueprintMCP/Source/BlueprintMCP/Private/MCPModule.h rename to Plugins/BlueprintMCP/Source/BlueprintMCP/Private/WingmanModule.h index f2507e4e..aecc428d 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/MCPModule.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Private/WingmanModule.h @@ -3,7 +3,7 @@ #include "CoreMinimal.h" #include "Modules/ModuleInterface.h" -class FBlueprintMCPModule : public IModuleInterface +class FWingmanModule : public IModuleInterface { public: virtual void StartupModule() override {} diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/BPVarEditor.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/BPVarEditor.h index 1e2888e8..f003ec87 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/BPVarEditor.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/BPVarEditor.h @@ -1,7 +1,7 @@ #pragma once #include "CoreMinimal.h" -#include "MCPProperty.h" +#include "WingProperty.h" #include "Engine/Blueprint.h" #include "BPVarEditor.generated.h" @@ -15,7 +15,7 @@ struct FBPVarEditor GENERATED_BODY() FBPVariableDescription* Desc = nullptr; - MCPProperty DefaultValueProp; + WingProperty DefaultValueProp; FBPVarEditor() = default; FBPVarEditor(UBlueprint* BP, const FString& VarName); @@ -54,5 +54,5 @@ private: void LoadDefault(); void SaveFlags(); bool SaveDefault(); - TArray MergedProperties(); + TArray MergedProperties(); }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/FunctionArgs.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/FunctionArgs.h index 0070d4ad..56d13886 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/FunctionArgs.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/FunctionArgs.h @@ -6,7 +6,7 @@ class UEdGraphNode; class UK2Node_EditablePinBase; struct FEdGraphPinType; -struct MCPFunctionArgs +struct WingFunctionArgs { // Returns true if the node is an EditablePinBase subclass that // actually supports user-defined pins (FunctionEntry, FunctionResult, diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/GraphExport.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/GraphExport.h index e66e6f2f..5e6415ce 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/GraphExport.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/GraphExport.h @@ -8,11 +8,11 @@ class UMaterialExpression; -class MCPGraphExport +class WingGraphExport { public: - MCPGraphExport(UEdGraph* InGraph); - MCPGraphExport(UEdGraphNode* InNode); + WingGraphExport(UEdGraph* InGraph); + WingGraphExport(UEdGraphNode* InNode); const FString GetOutput() { return Output.ToString(); } const FString GetDetails() { return Details.ToString(); } diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/MCPProperty.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/MCPProperty.h deleted file mode 100644 index feb1a9dc..00000000 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/MCPProperty.h +++ /dev/null @@ -1,33 +0,0 @@ -#pragma once - -#include "CoreMinimal.h" -#include "MCPUtils.h" - -// A resolved property: the FProperty descriptor plus a pointer to -// the value's storage. operator-> forwards to the FProperty. -struct MCPProperty -{ -public: - FProperty* Prop = nullptr; - void* Container = nullptr; - - MCPProperty() = default; - MCPProperty(FProperty* InProp, void* Container); - - FString GetText() const; - bool SetText(const FString& Value); - - explicit operator bool() const { return Prop != nullptr; } - FProperty* operator->() const { return Prop; } - - static void Remove(TArray& Props, const FString& Name); - static TArray GetAll(UObject* Obj, EPropertyFlags Flags); - static TArray GetAll(UStruct* StructType, void* Container, EPropertyFlags Flags); - static TArray FindAllSubstring(const TArray& Props, const FString& Substring); - static MCPProperty FindOneExactMatch(const TArray& Props, const FString& Name); - -private: - bool TryParseEnum(UEnum* Enum, const FString& Text, int64 &OutValue); - bool TrySetText(const FString &Text); - static void Collect(UStruct* StructType, void* Container, TArray &Props, EPropertyFlags Flags); -}; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/MaterialParameter.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/MaterialParameter.h index a5d4622b..2366aed6 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/MaterialParameter.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/MaterialParameter.h @@ -3,7 +3,7 @@ #include "CoreMinimal.h" #include "Materials/Material.h" -class MCPMaterialParameter +class WingMaterialParameter { public: static TMap GetMaterialParameters(UMaterialInterface* Material); diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/MCPFetcher.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/WingFetcher.h similarity index 81% rename from Plugins/BlueprintMCP/Source/BlueprintMCP/Public/MCPFetcher.h rename to Plugins/BlueprintMCP/Source/BlueprintMCP/Public/WingFetcher.h index eff2961f..243142ab 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/MCPFetcher.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/WingFetcher.h @@ -1,13 +1,13 @@ #pragma once #include "CoreMinimal.h" -#include "MCPUtils.h" +#include "WingUtils.h" class UEdGraphPin; class IAssetEditorInstance; struct FWalker; -// MCPFetcher: Load an Asset and find an object within it. +// WingFetcher: Load an Asset and find an object within it. // To find an object, you use a path. This is typical: // // F.Walk(TEXT("/Game/Mat/M_Test,graph,node:Param_1")) @@ -27,36 +27,36 @@ struct FWalker; // When you're finally at the object you want, you usually // use the Cast method to get a pointer to the object. // -// If any step fails, the MCPFetcher will print an error +// If any step fails, the WingFetcher will print an error // message that can be seen by the MCP's caller. It will // also set an error flag. Once the error flag is set, all // further ops become no-ops. After that point, fetching // any data will return nullptr. // -class MCPFetcher +class WingFetcher { public: // Walk a path from an asset to an object // within that asset. If you call walk a // second time, it will walk additional steps. // - MCPFetcher& Walk(const FString& Path); + WingFetcher& Walk(const FString& Path); // Walk a path using individual path // steps instead of a path. All these steps generate // errors if they cannot find the desired element. // - MCPFetcher& Asset(const FString& PackagePath); - MCPFetcher& Graph(const FString& Value); - MCPFetcher& Node(const FString& Value); - MCPFetcher& Pin(const FString& Value); - MCPFetcher& Component(const FString& Value); - MCPFetcher& LevelBlueprint(const FString& Value); + WingFetcher& Asset(const FString& PackagePath); + WingFetcher& Graph(const FString& Value); + WingFetcher& Node(const FString& Value); + WingFetcher& Pin(const FString& Value); + WingFetcher& Component(const FString& Value); + WingFetcher& LevelBlueprint(const FString& Value); // Return true if there haven't been any errors. // Note that errors always automatically generate - // output to MCPServer::Printf. + // output to WingServer::Printf. // bool Ok() const { return !bError; } @@ -108,12 +108,12 @@ public: // Initialize empty. You need to call Asset, or walk // a path that starts with an asset. // - MCPFetcher() {} + WingFetcher() {} // Initialize with an object. From there, you can walk // to sub-objects. // - MCPFetcher(UObject* O) : Obj(O) {} + WingFetcher(UObject* O) : Obj(O) {} private: @@ -130,17 +130,17 @@ private: bool bError = false; // Internal methods. - using WalkFunc = MCPFetcher& (MCPFetcher::*)(const FString&); + using WalkFunc = WingFetcher& (WingFetcher::*)(const FString&); void SetObj(UObject* InObj); void SetPin(UEdGraphPin* InPin); - MCPFetcher& SetError(); + WingFetcher& SetError(); void PathFailed(const TCHAR *Kind); - MCPFetcher& TypeMismatch(const TCHAR* Walker, const TCHAR* Expected); + WingFetcher& TypeMismatch(const TCHAR* Walker, const TCHAR* Expected); bool CheckAssetIsA(UClass* StaticClass); WalkFunc GetWalker(const FString &Step); }; -template<> inline UEdGraphPin* MCPFetcher::Cast() +template<> inline UEdGraphPin* WingFetcher::Cast() { if (bError) return nullptr; if (!ResultPin) PathFailed(TEXT("UEdGraphPin")); diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/MCPHandler.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/WingHandler.h similarity index 89% rename from Plugins/BlueprintMCP/Source/BlueprintMCP/Public/MCPHandler.h rename to Plugins/BlueprintMCP/Source/BlueprintMCP/Public/WingHandler.h index c155f84f..0ab5c67f 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/MCPHandler.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/WingHandler.h @@ -4,12 +4,12 @@ #include "UObject/Interface.h" #include "UObject/Object.h" #include "Dom/JsonObject.h" -#include "MCPHandler.generated.h" +#include "WingHandler.generated.h" // Marker struct for handler parameters that accept a JSON object. // PopulateFromJson stashes the actual JSON object into the Json field. USTRUCT() -struct FMCPJsonObject +struct FWingJsonObject { GENERATED_BODY() TSharedPtr Json; @@ -18,7 +18,7 @@ struct FMCPJsonObject // Marker struct for handler parameters that accept a JSON array. // PopulateFromJson stashes the actual JSON array into the Array field. USTRUCT() -struct FMCPJsonArray +struct FWingJsonArray { GENERATED_BODY() TArray> Array; @@ -37,12 +37,12 @@ struct FMCPJsonArray // Optional - marks a parameter as not required // UINTERFACE(MinimalAPI, meta=(CannotImplementInterfaceInBlueprint)) -class UMCPHandler : public UInterface +class UWingHandler : public UInterface { GENERATED_BODY() }; -class BLUEPRINTMCP_API IMCPHandler +class BLUEPRINTMCP_API IWingHandler { GENERATED_BODY() diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/MCPJson.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/WingJson.h similarity index 58% rename from Plugins/BlueprintMCP/Source/BlueprintMCP/Public/MCPJson.h rename to Plugins/BlueprintMCP/Source/BlueprintMCP/Public/WingJson.h index 1e2ecb60..3eefa64b 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/MCPJson.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/WingJson.h @@ -1,17 +1,17 @@ #pragma once #include "CoreMinimal.h" -#include "MCPHandler.h" -#include "MCPProperty.h" +#include "WingHandler.h" +#include "WingProperty.h" #include "Dom/JsonObject.h" // JSON utility functions used by MCP handlers. // This is effectively a namespace — all methods are static. -class MCPJson +class WingJson { public: - static bool PopulateFromJson(MCPProperty& Prop, const FJsonObject* Json, bool AllOptional = false); - static bool PopulateFromJson(TArray& Props, const FJsonObject* Json, bool AllOptional = false); + static bool PopulateFromJson(WingProperty& Prop, const FJsonObject* Json, bool AllOptional = false); + static bool PopulateFromJson(TArray& Props, const FJsonObject* Json, bool AllOptional = false); static bool PopulateFromJson(UStruct* StructType, void* Container, const TSharedPtr& JsonValue); static bool PopulateFromJson(UStruct* StructType, void* Container, const FJsonObject* Json); }; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/MCPNotifier.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/WingNotifier.h similarity index 95% rename from Plugins/BlueprintMCP/Source/BlueprintMCP/Public/MCPNotifier.h rename to Plugins/BlueprintMCP/Source/BlueprintMCP/Public/WingNotifier.h index 21908cbe..a9643638 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/MCPNotifier.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/WingNotifier.h @@ -6,7 +6,7 @@ // Handles PreEditChange/PostEditChange, ReconstructNode, and other // notifications that need to happen after modifications. // -class MCPNotifier +class WingNotifier { public: void AddTouchedObject(UObject* Obj); diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/MCPPackageMaker.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/WingPackageMaker.h similarity index 80% rename from Plugins/BlueprintMCP/Source/BlueprintMCP/Public/MCPPackageMaker.h rename to Plugins/BlueprintMCP/Source/BlueprintMCP/Public/WingPackageMaker.h index 7d6ff3d3..77037ba1 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/MCPPackageMaker.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/WingPackageMaker.h @@ -1,7 +1,7 @@ #pragma once #include "CoreMinimal.h" -#include "MCPServer.h" +#include "WingServer.h" #include "UObject/Package.h" #include "AssetToolsModule.h" #include "IAssetTools.h" @@ -9,16 +9,16 @@ // Helper for creating new asset packages. Validates the path and checks for // conflicting assets in the constructor. Call Ok() to check, then Make() to // actually create the UPackage. -class MCPPackageMaker +class WingPackageMaker { public: - MCPPackageMaker(const FString& InFullPath) + WingPackageMaker(const FString& InFullPath) : FullPath(InFullPath) { // Path must start with /Game. if (!FullPath.StartsWith(TEXT("/Game"))) { - UMCPServer::Printf(TEXT("ERROR: Package path '%s' must start with '/Game'\n"), *FullPath); + UWingServer::Printf(TEXT("ERROR: Package path '%s' must start with '/Game'\n"), *FullPath); bError = true; return; } @@ -26,7 +26,7 @@ public: // Check for an existing asset at this path. if (FindObject(nullptr, *FullPath)) { - UMCPServer::Printf(TEXT("ERROR: An asset already exists at '%s'\n"), *FullPath); + UWingServer::Printf(TEXT("ERROR: An asset already exists at '%s'\n"), *FullPath); bError = true; return; } @@ -40,7 +40,7 @@ public: Pkg = CreatePackage(*FullPath); if (!Pkg) { - UMCPServer::Printf(TEXT("ERROR: Failed to create package at '%s'\n"), *FullPath); + UWingServer::Printf(TEXT("ERROR: Failed to create package at '%s'\n"), *FullPath); bError = true; return false; } @@ -62,7 +62,7 @@ public: AssetClass* Result = Cast(NewAsset); if (!Result) { - UMCPServer::Printf(TEXT("ERROR: Failed to create asset at '%s'\n"), *FullPath); + UWingServer::Printf(TEXT("ERROR: Failed to create asset at '%s'\n"), *FullPath); bError = true; } return Result; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/WingProperty.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/WingProperty.h new file mode 100644 index 00000000..81a0bc11 --- /dev/null +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/WingProperty.h @@ -0,0 +1,33 @@ +#pragma once + +#include "CoreMinimal.h" +#include "WingUtils.h" + +// A resolved property: the FProperty descriptor plus a pointer to +// the value's storage. operator-> forwards to the FProperty. +struct WingProperty +{ +public: + FProperty* Prop = nullptr; + void* Container = nullptr; + + WingProperty() = default; + WingProperty(FProperty* InProp, void* Container); + + FString GetText() const; + bool SetText(const FString& Value); + + explicit operator bool() const { return Prop != nullptr; } + FProperty* operator->() const { return Prop; } + + static void Remove(TArray& Props, const FString& Name); + static TArray GetAll(UObject* Obj, EPropertyFlags Flags); + static TArray GetAll(UStruct* StructType, void* Container, EPropertyFlags Flags); + static TArray FindAllSubstring(const TArray& Props, const FString& Substring); + static WingProperty FindOneExactMatch(const TArray& Props, const FString& Name); + +private: + bool TryParseEnum(UEnum* Enum, const FString& Text, int64 &OutValue); + bool TrySetText(const FString &Text); + static void Collect(UStruct* StructType, void* Container, TArray &Props, EPropertyFlags Flags); +}; diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/MCPServer.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/WingServer.h similarity index 75% rename from Plugins/BlueprintMCP/Source/BlueprintMCP/Public/MCPServer.h rename to Plugins/BlueprintMCP/Source/BlueprintMCP/Public/WingServer.h index 6e1d5d76..237173bd 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/MCPServer.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/WingServer.h @@ -6,15 +6,15 @@ #include "TickableEditorObject.h" #include "Async/Future.h" #include "Dom/JsonObject.h" -#include "MCPUtils.h" -#include "MCPNotifier.h" +#include "WingUtils.h" +#include "WingNotifier.h" #include "LogCapture.h" -#include "MCPServer.generated.h" +#include "WingServer.generated.h" class FSocket; /** - * UMCPServer — editor subsystem that listens on a TCP socket and dispatches + * UWingServer — editor subsystem that listens on a TCP socket and dispatches * JSON commands to blueprint editing handlers. * * Clients connect via TCP and exchange newline-delimited JSON messages. @@ -28,7 +28,7 @@ class FSocket; * In commandlet mode, the commandlet ticks us directly. */ UCLASS() -class UMCPServer : public UEditorSubsystem, public FTickableEditorObject +class UWingServer : public UEditorSubsystem, public FTickableEditorObject { GENERATED_BODY() @@ -46,17 +46,17 @@ public: static void TickServer(float DeltaTime); /** Track an object that has been modified by the current handler. */ - static void AddTouchedObject(UObject* Obj) { GMCPServer->Notifier.AddTouchedObject(Obj); } + static void AddTouchedObject(UObject* Obj) { GWingServer->Notifier.AddTouchedObject(Obj); } /** Print text to the handler output buffer. */ - static void Print(const TCHAR* Text) { GMCPServer->HandlerOutput.Append(Text); } - static void Print(const FString& Text) { GMCPServer->HandlerOutput.Append(Text); } + static void Print(const TCHAR* Text) { GWingServer->HandlerOutput.Append(Text); } + static void Print(const FString& Text) { GWingServer->HandlerOutput.Append(Text); } /** Print formatted text to the handler output buffer. */ template static void Printf(const FmtType& Fmt, ArgTypes&&... Args) { - GMCPServer->HandlerOutput.Appendf(Fmt, Forward(Args)...); + GWingServer->HandlerOutput.Appendf(Fmt, Forward(Args)...); } /** Whether the server is currently listening. */ @@ -66,14 +66,14 @@ public: int32 GetPort() const { return Port; } private: - static UMCPServer* GMCPServer; + static UWingServer* GWingServer; // ----- Tool dispatch ----- - MCPNotifier Notifier; + WingNotifier Notifier; TStringBuilder<16384> HandlerOutput; FLogCaptureOutputDevice LogCapture; // installed once at startup, enabled per-request - TMap MCPHandlerRegistry; // tool name -> UMCPHandler subclass - void BuildMCPHandlerRegistry(); + TMap WingHandlerRegistry; // tool name -> UWingHandler subclass + void BuildWingHandlerRegistry(); // Handle a complete JSON line and return the response JSON FString HandleRequest(const FString& Line); @@ -94,7 +94,7 @@ private: TArray> Clients; void AcceptNewConnections(); void CleanupFinishedClients(); - static void ClientThreadFunc(UMCPServer* Server, TSharedPtr Client); + static void ClientThreadFunc(UWingServer* Server, TSharedPtr Client); // ----- Thread-safe message queue ----- struct FPendingMessage diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/MCPToolMenu.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/WingToolMenu.h similarity index 96% rename from Plugins/BlueprintMCP/Source/BlueprintMCP/Public/MCPToolMenu.h rename to Plugins/BlueprintMCP/Source/BlueprintMCP/Public/WingToolMenu.h index 46fd3130..d2efb1b3 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/MCPToolMenu.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/WingToolMenu.h @@ -11,8 +11,8 @@ class UGraphNodeContextMenuContext; // Utilities for manipulating UToolMenu structures. // Uses the C++ template explicit-instantiation loophole to -// bypass access checks — see MCPToolMenu.cpp for details. -class MCPToolMenu +// bypass access checks — see WingToolMenu.cpp for details. +class WingToolMenu { public: // Get the menu items for a given Node. This includes diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/MCPTypes.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/WingTypes.h similarity index 94% rename from Plugins/BlueprintMCP/Source/BlueprintMCP/Public/MCPTypes.h rename to Plugins/BlueprintMCP/Source/BlueprintMCP/Public/WingTypes.h index 7e93f6c1..c932b5c2 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/MCPTypes.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/WingTypes.h @@ -3,14 +3,14 @@ #include "CoreMinimal.h" #include "EditorSubsystem.h" #include "EdGraph/EdGraphPin.h" -#include "MCPTypes.generated.h" +#include "WingTypes.generated.h" // --------------------------------------------------------------------------- -// UMCPTypes — converts between FEdGraphPinType and a concise C++-like string. +// UWingTypes — converts between FEdGraphPinType and a concise C++-like string. // --------------------------------------------------------------------------- UCLASS() -class UMCPTypes : public UEditorSubsystem +class UWingTypes : public UEditorSubsystem { GENERATED_BODY() @@ -31,7 +31,7 @@ public: static FString TryTextToType(const FString& Text, FEdGraphPinType& OutPinType); // Try to parse a type. If there's a problem, prints an error - // via UMCPServer and returns false. + // via UWingServer and returns false. static bool TextToType(const FString& Text, FEdGraphPinType& OutPinType); // Parse a type string and verify it's a single object class (PC_Object, diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/MCPUtils.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/WingUtils.h similarity index 99% rename from Plugins/BlueprintMCP/Source/BlueprintMCP/Public/MCPUtils.h rename to Plugins/BlueprintMCP/Source/BlueprintMCP/Public/WingUtils.h index dc0e4390..0d186830 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/MCPUtils.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/WingUtils.h @@ -31,7 +31,7 @@ struct FMemberReference; struct FBPVariableDescription; // Stateless utility functions used by MCP handlers and the MCP server. // This is effectively a namespace — all methods are static. -class MCPUtils +class WingUtils { public: //////////////////////////////////////////////////////// diff --git a/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/MCPCommandlet.h b/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/WingmanCommandlet.h similarity index 76% rename from Plugins/BlueprintMCP/Source/BlueprintMCP/Public/MCPCommandlet.h rename to Plugins/BlueprintMCP/Source/BlueprintMCP/Public/WingmanCommandlet.h index dd7c935d..c3ab5ff9 100644 --- a/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/MCPCommandlet.h +++ b/Plugins/BlueprintMCP/Source/BlueprintMCP/Public/WingmanCommandlet.h @@ -2,7 +2,7 @@ #include "CoreMinimal.h" #include "Commandlets/Commandlet.h" -#include "MCPCommandlet.generated.h" +#include "WingmanCommandlet.generated.h" /** * Commandlet that keeps the engine alive so the BlueprintMCP editor subsystem @@ -11,11 +11,11 @@ * Usage: UnrealEditor-Cmd.exe Project.uproject -run=BlueprintMCP */ UCLASS() -class UBlueprintMCPCommandlet : public UCommandlet +class UWingmanCommandlet : public UCommandlet { GENERATED_BODY() public: - UBlueprintMCPCommandlet(); + UWingmanCommandlet(); virtual int32 Main(const FString& Params) override; }; diff --git a/tools/wing-rename.py b/tools/wing-rename.py new file mode 100644 index 00000000..5c4494df --- /dev/null +++ b/tools/wing-rename.py @@ -0,0 +1,67 @@ +#!/usr/bin/env python3 +"""Bulk search-and-replace across the UE Wingman plugin source. + +Usage: + python3 tools/wing-rename.py OLD NEW [OLD NEW ...] + +Each OLD/NEW pair is replaced in every file under: + Plugins/BlueprintMCP/Source/BlueprintMCP/ + +File names are also renamed if they contain OLD. + +Replacements are literal (not regex). Case-sensitive. +""" + +import sys +import os + +PLUGIN_SRC = os.path.join( + os.path.dirname(os.path.dirname(os.path.abspath(__file__))), + "Plugins", "BlueprintMCP", "Source", "BlueprintMCP" +) + +def collect_files(root): + result = [] + for dirpath, dirnames, filenames in os.walk(root): + for f in filenames: + result.append(os.path.join(dirpath, f)) + return result + +def main(): + args = sys.argv[1:] + if len(args) < 2 or len(args) % 2 != 0: + print("Usage: wing-rename.py OLD NEW [OLD NEW ...]") + sys.exit(1) + + pairs = list(zip(args[0::2], args[1::2])) + + # Replace file contents + files = collect_files(PLUGIN_SRC) + for path in files: + try: + data = open(path, "r").read() + except UnicodeDecodeError: + continue + original = data + for old, new in pairs: + data = data.replace(old, new) + if data != original: + open(path, "w").write(data) + print(f" edited: {os.path.relpath(path, PLUGIN_SRC)}") + + # Rename files (do deepest paths first so renames don't break parent paths) + files = collect_files(PLUGIN_SRC) + files.sort(key=lambda p: -p.count(os.sep)) + for path in files: + dirname = os.path.dirname(path) + basename = os.path.basename(path) + new_basename = basename + for old, new in pairs: + new_basename = new_basename.replace(old, new) + if new_basename != basename: + new_path = os.path.join(dirname, new_basename) + os.rename(path, new_path) + print(f" renamed: {basename} -> {new_basename}") + +if __name__ == "__main__": + main()