Files
integration/Plugins/UEWingman/Source/UEWingman/Handlers/Create_NoArgs.h
2026-04-04 17:59:00 -04:00

54 lines
1.8 KiB
C++

#pragma once
#include "CoreMinimal.h"
#include "Factories/Factory.h"
#include "WingServer.h"
#include "WingHandler.h"
#include "WingFactories.h"
#include "Factories/BlueprintFunctionLibraryFactory.h"
#include "Create_NoArgs.generated.h"
UCLASS()
class UWing_Create_NoArgs : public UWingHandler
{
GENERATED_BODY()
public:
UPROPERTY(EditAnywhere, meta=(Description="Full asset path for the new asset (e.g. '/Game/MyFolder/MyAsset')"))
FString Path;
virtual void Register() override
{
TArray<UClass*> FactoryClasses;
GetDerivedClasses(UFactory::StaticClass(), FactoryClasses);
for (UClass* Class : FactoryClasses)
{
if (!WingFactories::CanCreate(Class)) continue;
if (WingFactories::GetParameterNames(Class).Num() > 0) continue;
FString FactoryName = WingFactories::DeriveFactoryName(Class);
FString CommandName = FString::Printf(TEXT("Create_%s"), *FactoryName);
FString Doc = FString::Printf(TEXT("Create a new %s asset."), *FactoryName);
UWingServer::AddHandler(this, CommandName, Class, EWingHandlerKind::Create, Doc);
}
UWingServer::AddHandler(this, TEXT("Create_BlueprintFunctionLibrary"),
UBlueprintFunctionLibraryFactory::StaticClass(), EWingHandlerKind::Create,
TEXT("Create a blueprint function library"));
UClass *BlueprintInterfaceFactory = FindObject<UClass>(nullptr, TEXT("/Script/UnrealEd.BlueprintInterfaceFactory"));
if (BlueprintInterfaceFactory)
UWingServer::AddHandler(this, TEXT("Create_BlueprintInterface"),
BlueprintInterfaceFactory, EWingHandlerKind::Create,
TEXT("Create a blueprint interface"));
}
virtual void Handle() override
{
UClass* FactoryClass = Cast<UClass>(ConfigurationObject);
UFactory* Factory = NewObject<UFactory>(GetTransientPackage(), FactoryClass);
WingFactories::CreateAsset(Path, Factory, WingOut::Stdout);
WingOut::Stdout.Printf(TEXT("Created.\n"));
}
};