Files
UnrealEngine/Engine/Plugins/Mutable/Source/CustomizableObject/Public/MuCO/CustomizableSkeletalComponent.h
2025-05-18 13:04:45 +08:00

108 lines
3.8 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Components/SceneComponent.h"
#include "MuCO/CustomizableObjectInstance.h"
#include "MuCO/CustomizableObject.h"
#include "CustomizableSkeletalComponent.generated.h"
#define UE_API CUSTOMIZABLEOBJECT_API
class UCustomizableSkeletalComponentPrivate;
DECLARE_DELEGATE(FCustomizableSkeletalComponentUpdatedDelegate);
UCLASS(MinimalAPI, Blueprintable, BlueprintType, ClassGroup = (CustomizableObject), meta = (BlueprintSpawnableComponent))
class UCustomizableSkeletalComponent : public USceneComponent
{
friend UCustomizableSkeletalComponentPrivate;
public:
GENERATED_BODY()
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = CustomizableSkeletalComponent)
TObjectPtr<UCustomizableObjectInstance> CustomizableObjectInstance;
/** This component index refers to the object list of components
* DEPRECATED: Use FNames instead with Get/SetComponentName
*/
UPROPERTY(BlueprintReadWrite, Category = CustomizableSkeletalComponent)
int32 ComponentIndex;
private:
/** Only used if the ComponentIndex is INDEX_NONE.
* Editing this property will set ComponentIndex to INDEX_NONE. */
UPROPERTY(EditAnywhere, Category = CustomizableSkeletalComponent)
FName ComponentName;
UPROPERTY(EditAnywhere, Category = CustomizableSkeletalComponent)
bool bSkipSetReferenceSkeletalMesh = false;
public:
FCustomizableSkeletalComponentUpdatedDelegate UpdatedDelegate;
private:
UPROPERTY()
bool bSkipSkipSetSkeletalMeshOnAttach = false;
UPROPERTY(Instanced)
TObjectPtr<UCustomizableSkeletalComponentPrivate> Private;
public:
UE_API UCustomizableSkeletalComponent();
protected:
// USceneComponent interface
UE_API virtual void OnAttachmentChanged() override;
public:
// Own interface
UFUNCTION(BlueprintCallable, Category = CustomizableSkeletalComponent)
UE_API void SetComponentName(const FName& Name);
UFUNCTION(BlueprintCallable, Category = CustomizableSkeletalComponent)
UE_API FName GetComponentName() const;
UFUNCTION(BlueprintCallable, Category = CustomizableSkeletalComponent)
UE_API UCustomizableObjectInstance* GetCustomizableObjectInstance() const;
UFUNCTION(BlueprintCallable, Category = CustomizableSkeletalComponent)
UE_API void SetCustomizableObjectInstance(UCustomizableObjectInstance* Instance);
/** Set to true to avoid automatically replacing the Skeletal Mesh of the parent Skeletal Mesh Component by the Reference Skeletal Mesh.
* If SkipSetSkeletalMeshOnAttach is true, it will not replace it. */
UFUNCTION(BlueprintCallable, Category = CustomizableSkeletalComponent)
UE_API void SetSkipSetReferenceSkeletalMesh(bool bSkip);
UFUNCTION(BlueprintCallable, Category = CustomizableSkeletalComponent)
UE_API bool GetSkipSetReferenceSkeletalMesh() const;
/** Set to true to avoid automatically replacing the Skeletal Mesh of the parent Skeletal Mesh Component with any mesh. */
UFUNCTION(BlueprintCallable, Category = CustomizableObjectInstanceUsage)
UE_API void SetSkipSetSkeletalMeshOnAttach(bool bSkip);
UFUNCTION(BlueprintCallable, Category = CustomizableObjectInstanceUsage)
UE_API bool GetSkipSetSkeletalMeshOnAttach() const;
/** Update Skeletal Mesh asynchronously. */
UFUNCTION(BlueprintCallable, Category = CustomizableSkeletalComponent)
UE_API void UpdateSkeletalMeshAsync(bool bNeverSkipUpdate = false);
/** Update Skeletal Mesh asynchronously. Callback will be called once the update finishes, even if it fails. */
UFUNCTION(BlueprintCallable, Category = CustomizableSkeletalComponent)
UE_API void UpdateSkeletalMeshAsyncResult(FInstanceUpdateDelegate Callback, bool bIgnoreCloseDist = false, bool bForceHighPriority = false);
UE_API UCustomizableSkeletalComponentPrivate* GetPrivate();
UE_API const UCustomizableSkeletalComponentPrivate* GetPrivate() const;
};
#undef UE_API