Files
integration/Plugins/UEWingman/Deprecated/Blueprint_Search.h

80 lines
2.0 KiB
C
Raw Normal View History

2026-03-08 22:17:14 -04:00
#pragma once
#include "CoreMinimal.h"
#include "MCPServer.h"
2026-03-08 22:17:14 -04:00
#include "MCPHandler.h"
2026-03-13 14:26:04 -04:00
#include "MCPAssets.h"
2026-03-08 22:17:14 -04:00
#include "MCPUtils.h"
2026-03-17 17:24:35 -04:00
#include "MCPTypes.h"
2026-03-08 22:17:14 -04:00
#include "Engine/Blueprint.h"
#include "Engine/World.h"
2026-03-12 00:44:17 -04:00
#include "Blueprint_Search.generated.h"
2026-03-08 22:17:14 -04:00
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
2026-03-15 19:32:09 -04:00
UCLASS()
2026-03-12 00:44:17 -04:00
class UMCP_Blueprint_Search : public UObject, public IMCPHandler
2026-03-08 22:17:14 -04:00
{
GENERATED_BODY()
public:
UPROPERTY(meta=(Optional, Description="Substring filter for blueprint name or path"))
2026-03-10 20:15:59 -04:00
FString Query;
2026-03-08 22:17:14 -04:00
2026-03-10 07:17:42 -04:00
UPROPERTY(meta=(Optional, Description="Filter by parent class name (exact match, case-insensitive)"))
2026-03-08 22:17:14 -04:00
FString ParentClass;
virtual FString GetDescription() const override
{
return TEXT("List all Blueprint assets in the project, with optional filtering by name, parent class, or type.");
}
virtual void Handle() override
2026-03-08 22:17:14 -04:00
{
MCPAssets<UObject> Assets;
2026-03-17 17:24:35 -04:00
Assets.Scan<UBlueprint>().Substring(Query).Limit(500);
if (!Assets.Info()) return;
UClass *Parent = nullptr;
if (!ParentClass.IsEmpty())
{
Parent = UMCPTypes::TextToOneObjectType(ParentClass);
if (!Parent) return;
}
2026-03-10 07:17:42 -04:00
int32 Count = 0;
2026-03-08 22:17:14 -04:00
for (const FAssetData& Asset : Assets.AllData())
{
2026-03-10 07:17:42 -04:00
// Extract parent class name from asset tags
2026-03-08 22:17:14 -04:00
FString ParentClassName;
2026-03-17 17:24:35 -04:00
Asset.GetTagValue(FName(TEXT("ParentClass")), ParentClassName);
int32 DotIndex;
if (ParentClassName.FindLastChar('.', DotIndex))
2026-03-08 22:17:14 -04:00
{
2026-03-17 17:24:35 -04:00
ParentClassName = ParentClassName.Mid(DotIndex + 1);
2026-03-08 22:17:14 -04:00
}
2026-03-17 17:24:35 -04:00
ParentClassName.RemoveFromEnd(TEXT("'"));
2026-03-08 22:17:14 -04:00
// Apply parent class filter
if (!ParentClass.IsEmpty())
{
if (!ParentClassName.Equals(ParentClass, ESearchCase::IgnoreCase))
{
continue;
}
}
UMCPServer::Printf(TEXT("%30s %s\n"), *ParentClassName, *Asset.PackageName.ToString());
2026-03-10 07:17:42 -04:00
Count++;
}
if (Count == 0)
{
UMCPServer::Print(TEXT("No blueprint assets found.\n"));
2026-03-08 22:17:14 -04:00
}
}
};