// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "MetaHumanCharacterEditorPipelineSpecification.h" #include "MetaHumanCharacterPaletteItem.h" #include "MetaHumanCharacterPipeline.h" #include "Misc/NotNull.h" #include "UObject/Object.h" #include "MetaHumanCharacterEditorPipeline.generated.h" enum class EMetaHumanCharacterPaletteBuildQuality : uint8; struct FMetaHumanCharacterPaletteItem; struct FMetaHumanCollectionBuiltData; class ITargetPlatform; class UBlueprint; class UMetaHumanCharacterInstance; class UMetaHumanCharacterPipelineSpecification; class UMetaHumanCollection; class UMetaHumanWardrobeItem; UENUM() enum class EMetaHumanBuildStatus : uint8 { Succeeded, Failed }; UENUM() enum class EMetaHumanPipelineDisplayCategory : uint8 { Advanced, Targets, }; /** * The editor-only component of a UMetaHumanCharacterPipeline. */ UCLASS(Abstract, MinimalAPI, NotBlueprintable, EditInlineNew) class UMetaHumanCharacterEditorPipeline : public UObject { GENERATED_BODY() public: // Metadata tag for properties that should be displayed in the pipeline tool inline static const FName PipelineDisplay = TEXT("PipelineDisplay"); #if WITH_EDITOR DECLARE_DELEGATE_OneParam(FOnUnpackComplete, EMetaHumanBuildStatus /* Status */); using FTryUnpackObjectDelegate = TDelegate /* Object */, FString& /* InOutAssetPath */)>; /** Get the corresponding runtime pipeline */ virtual TNotNull GetRuntimeCharacterPipeline() const PURE_VIRTUAL(UMetaHumanCharacterEditorPipeline::GetRuntimeCharacterPipeline, return NewObject();); /** Returns true if an asset of the given class can be added to the given slot on a palette. */ METAHUMANCHARACTERPALETTE_API bool IsPrincipalAssetClassCompatibleWithSlot(FName SlotName, TNotNull AssetClass) const; /** Returns true if the given Wardrobe Item can be added to the given slot on a palette. */ METAHUMANCHARACTERPALETTE_API bool IsWardrobeItemCompatibleWithSlot(FName SlotName, TNotNull WardrobeItem) const; virtual TNotNull GetSpecification() const PURE_VIRTUAL(UMetaHumanCharacterEditorPipeline::GetSpecification, return NewObject();); #endif // WITH_EDITOR };