#pragma once #include "CoreMinimal.h" #include "WingServer.h" #include "WingHandler.h" #include "WingUtils.h" #include "Materials/MaterialFunction.h" #include "Factories/MaterialFunctionFactoryNew.h" #include "WingPackageMaker.h" #include "MaterialFunction_Create.generated.h" // --------------------------------------------------------------------------- // --------------------------------------------------------------------------- // --------------------------------------------------------------------------- UCLASS() class UWing_MaterialFunction_Create : public UObject, public IWingHandler { GENERATED_BODY() public: UPROPERTY(meta=(Description="Full asset path for the new material function (e.g. '/Game/Materials/MF_MyFunc')")) FString AssetPath; UPROPERTY(meta=(Optional, Description="Description for the material function")) FString Description; virtual FString GetDescription() const override { return TEXT("Create a new UMaterialFunction asset with an optional description."); } virtual void Handle() override { WingPackageMaker Maker(AssetPath); if (!Maker.Ok()) return; // Create via IAssetTools + factory. UMaterialFunction* MF = Maker.CreateAsset(); if (!MF) return; // Set optional description. if (!Description.IsEmpty()) MF->Description = Description; UWingServer::Printf(TEXT("Created %s\n"), *MF->GetPathName()); } };