Files
UnrealEngine/Engine/Source/Editor/ClothingSystemEditorInterface/Public/ClothingAssetFactoryInterface.h
2025-05-18 13:04:45 +08:00

110 lines
4.2 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Containers/UnrealString.h"
#include "CoreTypes.h"
#include "Features/IModularFeature.h"
#include "Misc/AssertionMacros.h"
#include "UObject/NameTypes.h"
#include "UObject/Object.h"
#include "UObject/ObjectMacros.h"
#include "UObject/UObjectGlobals.h"
#include "UObject/UnrealNames.h"
#include "ClothingAssetFactoryInterface.generated.h"
namespace nvidia
{
namespace apex
{
class ClothingAsset;
}
}
class UClothingAssetBase;
class USkeletalMesh;
struct FSkeletalMeshClothBuildParams;
// Clothing asset factories should inherit this interface/uobject to provide functionality
// to build clothing assets from .apx files imported to the engine
UCLASS(Abstract)
class CLOTHINGSYSTEMEDITORINTERFACE_API UClothingAssetFactoryBase : public UObject
{
GENERATED_BODY()
public:
/**
* Given a target mesh and parameters describing the build operation, create a clothing asset for
* use on the mesh
* @param TargetMesh - The mesh to target
* @param Params - Extra operation params (LOD/Section index etc...)
*/
virtual UClothingAssetBase* CreateFromSkeletalMesh(USkeletalMesh* TargetMesh, FSkeletalMeshClothBuildParams& Params)
PURE_VIRTUAL(UClothingAssetFactoryBase::CreateFromSkeletalMesh, return nullptr;);
/**
* Given a target mesh and a source clothing asset bound to source mesh, clone the clothing asset for
* use on the target mesh
* @param TargetMesh - The mesh to target
* @param SourceMesh - The mesh to copy the clothing asset from
* @param SourceAsset - The clothing asset to copy
*/
virtual UClothingAssetBase* CreateFromExistingCloth(USkeletalMesh* TargetMesh, USkeletalMesh* SourceMesh, UClothingAssetBase* SourceAsset)
PURE_VIRTUAL(UClothingAssetFactoryBase::CreateFromExistingCloth, return nullptr;);
/**
* Given a target mesh and valid parameters, import a simulation mesh as a LOD for the clothing
* specified by the build parameters, returning the modified clothing object
* @param TargetMesh The owner mesh
* @param Params Build parameters for the operation (target clothing object, source data)
*/
virtual UClothingAssetBase* ImportLodToClothing(USkeletalMesh* TargetMesh, FSkeletalMeshClothBuildParams& Params)
PURE_VIRTUAL(UClothingAssetFactoryBase::ImportLodToClothing, return nullptr;);
/**
* Should return whether or not the factory can handle the incoming file (check validity etc.)
*/
virtual bool CanImport(const FString& Filename)
PURE_VIRTUAL(UClothingAssetFactoryBase::CanImport, return false;);
/**
* Given an APEX asset instantiated from the filename checked with CanImport, the factory
* is expected to build a valid clothing asset (or nullptr if it cannot).
*/
virtual UClothingAssetBase* CreateFromApexAsset(nvidia::apex::ClothingAsset* InApexAsset, USkeletalMesh* TargetMesh, FName InName = NAME_None)
PURE_VIRTUAL(UClothingAssetFactoryBase::CreateFromApexAsset, return nullptr;);
/**
* Import an asset from the specified file
* @param Filename - file to import
* @param TargetMesh - the mesh to import the clothing asset to
* @param InName - optional name for the clothing asset object (will take the filename otherwise)
*/
virtual UClothingAssetBase* Import(const FString& Filename, USkeletalMesh* TargetMesh, FName InName = NAME_None)
PURE_VIRTUAL(UClothingAssetFactoryBase::Import, return nullptr;);
/**
* Reimport an asset from the specified file
* @param Filename - file to import
* @param TargetMesh - the mesh to import the clothing asset to
* @param OriginalAsset - the original clothing asset to replace
*/
virtual UClothingAssetBase* Reimport(const FString& Filename, USkeletalMesh* TargetMesh, UClothingAssetBase* OriginalAsset)
PURE_VIRTUAL(UClothingAssetFactoryBase::Reimport, return nullptr;);
};
// An interface for a class that will provide a clothing asset factory, this should be
// registered as a feature under its FeatureName to be picked up by the engine
class CLOTHINGSYSTEMEDITORINTERFACE_API IClothingAssetFactoryProvider : public IModularFeature
{
public:
static const FName FeatureName;
// Called by the engine to retrieve a valid factory from a provider
// This can be the default object for the factory class or a full instance
virtual UClothingAssetFactoryBase* GetFactory() = 0;
};