81 lines
2.4 KiB
C++
81 lines
2.4 KiB
C++
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "MCPHandler.h"
|
|
#include "MCPAssetFinder.h"
|
|
#include "MCPUtils.h"
|
|
#include "Engine/Blueprint.h"
|
|
#include "Engine/World.h"
|
|
#include "Engine/Level.h"
|
|
#include "Engine/LevelScriptBlueprint.h"
|
|
#include "EdGraph/EdGraph.h"
|
|
#include "EdGraph/EdGraphNode.h"
|
|
#include "K2Node_CallFunction.h"
|
|
#include "K2Node_Event.h"
|
|
#include "K2Node_CustomEvent.h"
|
|
#include "K2Node_VariableGet.h"
|
|
#include "K2Node_VariableSet.h"
|
|
#include "K2Node_BreakStruct.h"
|
|
#include "K2Node_MakeStruct.h"
|
|
#include "K2Node_FunctionEntry.h"
|
|
#include "K2Node_EditablePinBase.h"
|
|
#include "AssetRegistry/IAssetRegistry.h"
|
|
#include "UMCPHandler_DumpBlueprintGraph.generated.h"
|
|
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// ---------------------------------------------------------------------------
|
|
// ---------------------------------------------------------------------------
|
|
|
|
UCLASS()
|
|
class UMCPHandler_DumpBlueprintGraph : public UObject, public IMCPHandler
|
|
{
|
|
GENERATED_BODY()
|
|
|
|
public:
|
|
UPROPERTY(meta=(Description="Blueprint name or package path"))
|
|
FString Blueprint;
|
|
|
|
UPROPERTY(meta=(Description="Graph name to dump"))
|
|
FString Graph;
|
|
|
|
virtual FString GetDescription() const override
|
|
{
|
|
return TEXT("Dump the detailed node/pin structure of a specific graph within a Blueprint.");
|
|
}
|
|
|
|
virtual void Handle(const FJsonObject* Json, FJsonObject* Result) override
|
|
{
|
|
// URL-decode graph name to handle spaces encoded as '+' or '%20'
|
|
FString DecodedGraphName = MCPUtils::UrlDecode(Graph);
|
|
|
|
MCPAssets<UBlueprint> Assets;
|
|
if (!Assets.Exact(Blueprint).Errors(Result).ENone().ETwo().Load()) return;
|
|
UBlueprint* BP = Assets.Object();
|
|
|
|
TArray<UEdGraph*> AllGraphs = MCPUtils::AllGraphs(BP);
|
|
|
|
for (UEdGraph* GraphObj : AllGraphs)
|
|
{
|
|
if (GraphObj->GetName().Equals(DecodedGraphName, ESearchCase::IgnoreCase))
|
|
{
|
|
TSharedPtr<FJsonObject> GraphJson = MCPUtils::SerializeGraph(GraphObj);
|
|
if (GraphJson.IsValid())
|
|
{
|
|
MCPUtils::CopyJsonFields(GraphJson.Get(), Result);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Not found — list available graphs
|
|
TArray<TSharedPtr<FJsonValue>> GraphNames;
|
|
for (UEdGraph* GraphObj : AllGraphs)
|
|
{
|
|
GraphNames.Add(MakeShared<FJsonValueString>(GraphObj->GetName()));
|
|
}
|
|
MCPUtils::MakeErrorJson(Result, FString::Printf(TEXT("Graph '%s' not found"), *DecodedGraphName));
|
|
Result->SetArrayField(TEXT("availableGraphs"), GraphNames);
|
|
}
|
|
};
|