OLS/Source/OLSAnimation/Public/Data/OLSMaskAnimationData.h
2024-09-22 17:11:19 -04:00

275 lines
8.3 KiB
C++

// © 2024 Long Ly. All rights reserved. Any unauthorized use, reproduction, or distribution of this trademark is strictly prohibited and may result in legal action.
#pragma once
#include "CoreMinimal.h"
#include "GameplayTagContainer.h"
#include "UObject/Object.h"
#include "OLSMaskAnimationData.generated.h"
//Enums
UENUM(BlueprintType)
enum class EOLSAdditiveMode : uint8
{
EMeshSpace UMETA(DisplayName = "MeshSpace"),
ELocalSpace UMETA(DisplayName = "LocalSpace"),
};
//Structs
USTRUCT(BlueprintType)
struct FOLSNodeMaskWeights
{
GENERATED_BODY()
UPROPERTY(BlueprintReadWrite,EditAnywhere, Category=Config,meta=(ClampMin = "0.0" , ClampMax = "1.0") )
float OverrideAlpha = 0.0f;
UPROPERTY(BlueprintReadWrite,EditAnywhere, Category=Config ,meta=(ClampMin = "0.0" , ClampMax = "1.0"))
float AdditiveAlpha = 0.0f;
UPROPERTY(BlueprintReadWrite,EditAnywhere, Category=Config ,meta=(ClampMin = "0.0" , ClampMax = "1.0"))
float MeshSpaceBlendAlpha = 1.0f;
UPROPERTY(BlueprintReadWrite,EditAnywhere, Category=Config ,meta=(ClampMin = "0.0" , ClampMax = "1.0"))
float LocalSpaceBlendAlpha = 0.0f;
};
USTRUCT(BlueprintType)
struct FOLSMaskWeights
{
GENERATED_BODY()
UPROPERTY(EditDefaultsOnly,BlueprintReadWrite,Category = "Mask Curves", meta=(ClampMin = "0.0", ClampMax = "1.0"))
float MaskWeight = 0;
UPROPERTY(EditDefaultsOnly,BlueprintReadWrite,Category = "Mask Curves", meta=(ClampMin = "0.0", ClampMax = "1.0"))
float MaskAdditive = 0;
};
USTRUCT(BlueprintType)
struct FOLSArmMaskWeights
{
GENERATED_BODY()
public:
UPROPERTY(EditDefaultsOnly,BlueprintReadWrite,Category = "Mask Curves")
EOLSAdditiveMode ArmAdditiveMode = EOLSAdditiveMode::ELocalSpace;
UPROPERTY(EditDefaultsOnly,BlueprintReadWrite,Category = "Mask Curves")
FOLSMaskWeights MaskWeights;
UPROPERTY(BlueprintReadOnly,Category = "Mask Curves")
float ArmMeshSpaceBlend = 0.0f;
UPROPERTY(BlueprintReadOnly,Category = "Mask Curves")
float ArmLocalSpaceBlend = 0.0f;
};
USTRUCT(BlueprintType)
struct FOLSMaskingWeights
{
GENERATED_BODY()
public:
UPROPERTY(EditDefaultsOnly,BlueprintReadWrite,Category = "Mask Curves")
FOLSMaskWeights LegsWeights;
UPROPERTY(EditDefaultsOnly,BlueprintReadWrite,Category = "Mask Curves")
FOLSMaskWeights PelvisWeights;
UPROPERTY(EditDefaultsOnly,BlueprintReadWrite,Category = "Mask Curves")
FOLSMaskWeights SpineWeights;
UPROPERTY(EditDefaultsOnly,BlueprintReadWrite,Category = "Mask Curves")
FOLSMaskWeights HeadWeights;
UPROPERTY(EditDefaultsOnly,BlueprintReadWrite,Category = "Mask Curves")
FOLSArmMaskWeights RightArmWeights;
UPROPERTY(EditDefaultsOnly,BlueprintReadWrite,Category = "Mask Curves")
FOLSMaskWeights RightHandWeights;
UPROPERTY(EditDefaultsOnly,BlueprintReadWrite,Category = "Mask Curves")
FOLSArmMaskWeights LeftArmWeights;
UPROPERTY(EditDefaultsOnly,BlueprintReadWrite,Category = "Mask Curves")
FOLSMaskWeights LeftHandWeights;
};
USTRUCT(BlueprintType)
struct FOLSCapturedMaskingWeights
{
GENERATED_BODY()
public:
UPROPERTY(EditDefaultsOnly,BlueprintReadWrite,Category = "Mask Curves")
FOLSNodeMaskWeights LegsWeights;
UPROPERTY(EditDefaultsOnly,BlueprintReadWrite,Category = "Mask Curves")
FOLSNodeMaskWeights PelvisWeights;
UPROPERTY(EditDefaultsOnly,BlueprintReadWrite,Category = "Mask Curves")
FOLSNodeMaskWeights SpineWeights;
UPROPERTY(EditDefaultsOnly,BlueprintReadWrite,Category = "Mask Curves")
FOLSNodeMaskWeights HeadWeights;
UPROPERTY(EditDefaultsOnly,BlueprintReadWrite,Category = "Mask Curves")
FOLSNodeMaskWeights RightArmWeights;
UPROPERTY(EditDefaultsOnly,BlueprintReadWrite,Category = "Mask Curves")
FOLSNodeMaskWeights RightHandWeights;
UPROPERTY(EditDefaultsOnly,BlueprintReadWrite,Category = "Mask Curves")
FOLSNodeMaskWeights LeftArmWeights;
UPROPERTY(EditDefaultsOnly,BlueprintReadWrite,Category = "Mask Curves")
FOLSNodeMaskWeights LeftHandWeights;
};
USTRUCT(BlueprintType)
struct FOLSMaskAnimation
{
GENERATED_BODY()
public:
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "Animation")
TObjectPtr<class UAnimSequence> Animation = nullptr;
UPROPERTY(BlueprintReadOnly, Category = "Masking Curves", meta = (HideDefault))
FOLSCapturedMaskingWeights Weights;
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "Animation")
FOLSMaskingWeights MaskingWeights;
UPROPERTY(BlueprintReadOnly, Category = "Masking Curves", meta = (HideDefault))
TMap<FName, float> CurvesToModify;
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "Animation")
float MaskPoseTime = 0.f;
public:
#if WITH_EDITOR
void CacheAdditiveCurves();
#endif
};
USTRUCT(BlueprintType)
struct FOLSGaitMasks
{
GENERATED_BODY()
public:
UPROPERTY(EditDefaultsOnly,BlueprintReadWrite,Category = "Animation")
FOLSMaskAnimation ForwardMask;
UPROPERTY(EditDefaultsOnly,BlueprintReadWrite,Category = "Animation")
FOLSMaskAnimation RightMask;
UPROPERTY(EditDefaultsOnly,BlueprintReadWrite,Category = "Animation")
FOLSMaskAnimation LeftMask;
UPROPERTY(EditDefaultsOnly,BlueprintReadWrite,Category = "Animation")
FOLSMaskAnimation BackwardMask;
public:
#if WITH_EDITOR
void CacheAdditiveCurves();
#endif
};
USTRUCT(BlueprintType)
struct FOLSStanceMaskSets
{
GENERATED_BODY()
public:
#if WITH_EDITOR
void CacheAdditiveCurves();
#endif
const FOLSGaitMasks* SelectGaitMasksByGait(const FGameplayTag& gait);
const FOLSMaskAnimation& GetIdleMask() const;
const FOLSMaskAnimation& GetAimMask() const;
FORCEINLINE void GetAimBlendInOut(float& outBlendIn, float& outBlendOut) const;
public:
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Stance Mask Sets")
TMap<FGameplayTag, FOLSGaitMasks> GaitMasks;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Stance Mask Sets")
FOLSMaskAnimation IdleMask;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Stance Mask Sets")
FOLSMaskAnimation AimMask;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Stance Mask Sets")
float AimBlendInTime = .4f;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Stance Mask Sets")
float AimBlendOutTime = .4f;
};
// Legs
static const FName MaskLegsCurveName = FName("LegsMask");
static const FName MaskLegsLocalSpaceCurveName = FName("LegsMask_LS");
static const FName MaskLegsMeshSpaceCurveName = FName("LegsMask_MS");
static const FName MaskLegsAddCurveName = FName("LegsMask_Add");
// Pelvis
static const FName MaskPelvisCurveName = FName("PelvisMask");
static const FName MaskPelvisLocalSpaceCurveName = FName("PelvisMask_LS");
static const FName MaskPelvisMeshSpaceCurveName = FName("PelvisMask_MS");
static const FName MaskPelvisAddCurveName = FName("PelvisMask_Add");
// Spine
static const FName MaskSpineCurveName = FName("SpineMask");
static const FName MaskSpineLocalSpaceCurveName = FName("SpineMask_LS");
static const FName MaskSpineMeshSpaceCurveName = FName("SpineMask_MS");
static const FName MaskSpineAddCurveName = FName("SpineMask_Add");
// Head
static const FName MaskHeadCurveName = FName("HeadMask");
static const FName MaskHeadLocalSpaceCurveName = FName("HeadMask_LS");
static const FName MaskHeadMeshSpaceCurveName = FName("HeadMask_MS");
static const FName MaskHeadAddCurveName = FName("HeadMask_Add");
// Right Arm
static const FName MaskRightArmCurveName = FName("RightArmMask");
static const FName RightArmLocalSpaceCurveName = FName("RightArmMask_LS");
static const FName RightArmMeshSpaceCurveName = FName("RightArmMask_MS");
static const FName MaskRightArmAddCurveName = FName("RightArmMask_Add");
// Left Arm
static const FName MaskLeftArmCurveName = FName("LeftArmMask");
static const FName LeftArmLocalSpaceCurveName = FName("LeftArmMask_LS");
static const FName LeftArmMeshSpaceCurveName = FName("LeftArmMask_MS");
static const FName MaskLeftArmAddCurveName = FName("LeftArmMask_Add");
// Right Hand
static const FName RightHandCurveName = FName("RightHandMask");
static const FName RightHandLocalSpaceCurveName = FName("RightHandMask_LS");
static const FName RightHandMeshSpaceCurveName = FName("RightHandMask_MS");
static const FName MaskRightHandAddCurveName = FName("RightHandMask_Add");
// Left Hand
static const FName LeftHandCurveName = FName("LeftHandMask");
static const FName LeftHandLocalSpaceCurveName = FName("LeftHandMask_LS");
static const FName LeftHandMeshSpaceCurveName = FName("LeftHandMask_MS");
static const FName MaskLeftHandAddCurveName = FName("LeftHandMask_Add");
// Masking Group
static const FName MaskingGroupName = FName("Standing Mask");