Refactored OLSAnimationData

This commit is contained in:
LongLy 2024-11-21 12:56:35 -07:00
parent 8448a31e5e
commit 86d30a6228
7 changed files with 70 additions and 81 deletions

View File

@ -1,12 +1,12 @@
/Engine=C:/Program Files/Epic Games/UE_5.5/Engine/Shaders /Engine=C:/Program Files/Epic Games/UE_5.5/Engine/Shaders
/ShaderAutogen=H:/Projects/OLS/Intermediate/ShaderAutogen /ShaderAutogen=H:/Projects/OLS/Intermediate/ShaderAutogen
/Plugin/GLTFExporter=C:/Program Files/Epic Games/UE_5.5/Engine/Plugins/Enterprise/GLTFExporter/Shaders
/Plugin/FX/Niagara=C:/Program Files/Epic Games/UE_5.5/Engine/Plugins/FX/Niagara/Shaders /Plugin/FX/Niagara=C:/Program Files/Epic Games/UE_5.5/Engine/Plugins/FX/Niagara/Shaders
/Plugin/ExrReaderShaders=C:/Program Files/Epic Games/UE_5.5/Engine/Plugins/Media/ImgMedia/Shaders /Plugin/ExrReaderShaders=C:/Program Files/Epic Games/UE_5.5/Engine/Plugins/Media/ImgMedia/Shaders
/Plugin/WmfMedia=C:/Program Files/Epic Games/UE_5.5/Engine/Plugins/Media/WmfMedia/Shaders
/NNEDenoiserShaders=C:/Program Files/Epic Games/UE_5.5/Engine/Plugins/NNE/NNEDenoiser/Shaders /NNEDenoiserShaders=C:/Program Files/Epic Games/UE_5.5/Engine/Plugins/NNE/NNEDenoiser/Shaders
/Plugin/WmfMedia=C:/Program Files/Epic Games/UE_5.5/Engine/Plugins/Media/WmfMedia/Shaders
/Plugin/ComputeFramework=C:/Program Files/Epic Games/UE_5.5/Engine/Plugins/Runtime/ComputeFramework/Shaders /Plugin/ComputeFramework=C:/Program Files/Epic Games/UE_5.5/Engine/Plugins/Runtime/ComputeFramework/Shaders
/Plugin/Runtime/HairStrands=C:/Program Files/Epic Games/UE_5.5/Engine/Plugins/Runtime/HairStrands/Shaders /Plugin/Runtime/HairStrands=C:/Program Files/Epic Games/UE_5.5/Engine/Plugins/Runtime/HairStrands/Shaders
/Plugin/GLTFExporter=C:/Program Files/Epic Games/UE_5.5/Engine/Plugins/Enterprise/GLTFExporter/Shaders
/NFORDenoise=C:/Program Files/Epic Games/UE_5.5/Engine/Plugins/Experimental/NFORDenoise/Shaders /NFORDenoise=C:/Program Files/Epic Games/UE_5.5/Engine/Plugins/Experimental/NFORDenoise/Shaders
/Plugin/HoldoutComposite=C:/Program Files/Epic Games/UE_5.5/Engine/Plugins/Experimental/Compositing/HoldoutComposite/Shaders /Plugin/HoldoutComposite=C:/Program Files/Epic Games/UE_5.5/Engine/Plugins/Experimental/Compositing/HoldoutComposite/Shaders
/Plugin/Optimus=C:/Program Files/Epic Games/UE_5.5/Engine/Plugins/Animation/DeformerGraph/Shaders /Plugin/Optimus=C:/Program Files/Epic Games/UE_5.5/Engine/Plugins/Animation/DeformerGraph/Shaders

View File

@ -85,34 +85,18 @@ EOLSHipDirection UOLSBaseLinkedLayerAnimInstance::GetHipDirection() const
return (isHipForward) ? EOLSHipDirection::EForward : EOLSHipDirection::EBackward; return (isHipForward) ? EOLSHipDirection::EForward : EOLSHipDirection::EBackward;
} }
FOLSStanceAnimSets UOLSBaseLinkedLayerAnimInstance::GetStanceAnimSets(const bool isCrouching) const const FOLSStanceAnimSets& UOLSBaseLinkedLayerAnimInstance::GetStanceAnimSets(const bool isCrouching) const
{ {
return (isCrouching ? CrouchingAnimSets : StandingAnimSets); return (isCrouching ? Crouching_AnimSets : Standing_AnimSets);
} }
const FOLSGaitAnimSets& UOLSBaseLinkedLayerAnimInstance::GetGaitAnimSets( const FOLSGaitAnimSets& UOLSBaseLinkedLayerAnimInstance::GetGaitAnimSets(const bool isCrouching,
const bool isCrouching, const EOLSGait& locomotionState) const const EOLSGait& locomotionState) const
{ {
const FOLSStanceAnimSets& stanceAnimSets = GetStanceAnimSets(isCrouching); const FOLSStanceAnimSets& stanceAnimSets = GetStanceAnimSets(isCrouching);
const FOLSGaitAnimSets* result = nullptr; return (isCrouching)
? stanceAnimSets.GetGaitAnimSetByGait(EOLSGait::EWalk)
// Attempt to select the appropriate gait anim set. : stanceAnimSets.GetGaitAnimSetByGait(locomotionState);
result = (isCrouching)
? stanceAnimSets.SelectGaitAnimSetByGait(EOLSGait::EWalk)
: stanceAnimSets.SelectGaitAnimSetByGait(locomotionState);
// Log an error if the pointer is null to help debugging.
if (!result)
{
// UE_LOG(LogTemp, Warning, TEXT("UOLSBaseLinkedLayerAnimInstance::GetGaitAnimSets - Failed to find GaitAnimSet for Gait: %d"), static_cast<int32>(locomotionState));
// ensureMsgf(false, TEXT("GetGaitAnimSets returned nullptr! Check locomotionState and isCrouching."));
// Return a fallback or handle the error based on your requirements.
return FOLSGaitAnimSets::EmptyAnimSet;
}
// Safely dereference the pointer.
return *result;
} }
UAnimSequence* UOLSBaseLinkedLayerAnimInstance::SelectIdleAnimation(const bool isCrouching) const UAnimSequence* UOLSBaseLinkedLayerAnimInstance::SelectIdleAnimation(const bool isCrouching) const
@ -122,7 +106,7 @@ UAnimSequence* UOLSBaseLinkedLayerAnimInstance::SelectIdleAnimation(const bool i
UAnimSequence* UOLSBaseLinkedLayerAnimInstance::SelectIdleEntryAnimation(const bool isCrouching) const UAnimSequence* UOLSBaseLinkedLayerAnimInstance::SelectIdleEntryAnimation(const bool isCrouching) const
{ {
return GetStanceAnimSets(isCrouching).GetIdleEntryAnimation(); return GetStanceAnimSets(isCrouching).GetIdleExitAnimation();
} }
UAnimSequence* UOLSBaseLinkedLayerAnimInstance::SelectIdleBreakAnimation(const bool isCrouching) const UAnimSequence* UOLSBaseLinkedLayerAnimInstance::SelectIdleBreakAnimation(const bool isCrouching) const

View File

@ -35,7 +35,7 @@ UAnimSequence* FOLSIdleAnimSet::GetRandomIdleBreakAnimation() const
return IdleBreaks[FMath::RandRange(0, idleBreaksNum - 1)]; return IdleBreaks[FMath::RandRange(0, idleBreaksNum - 1)];
} }
UAnimSequence* FOLSIdleAndTurnInPlaceAnimSet::GetIdleEntryAnimation() const UAnimSequence* FOLSIdleAndTurnInPlaceAnimSet::GetIdleExitAnimation() const
{ {
return IdleAnimSet.IdleExit; return IdleAnimSet.IdleExit;
} }
@ -155,9 +155,9 @@ UAnimSequence* FOLSStanceAnimSets::GetIdleAnimation() const
return IdleAndTurnInPlaceAnimSet.GetIdleAnimation(); return IdleAndTurnInPlaceAnimSet.GetIdleAnimation();
} }
UAnimSequence* FOLSStanceAnimSets::GetIdleEntryAnimation() const UAnimSequence* FOLSStanceAnimSets::GetIdleExitAnimation() const
{ {
return IdleAndTurnInPlaceAnimSet.GetIdleEntryAnimation(); return IdleAndTurnInPlaceAnimSet.GetIdleExitAnimation();
} }
UAnimSequence* FOLSStanceAnimSets::GetRandomIdleBreakAnimation() const UAnimSequence* FOLSStanceAnimSets::GetRandomIdleBreakAnimation() const
@ -165,29 +165,38 @@ UAnimSequence* FOLSStanceAnimSets::GetRandomIdleBreakAnimation() const
return IdleAndTurnInPlaceAnimSet.GetRandomIdleBreakAnimation(); return IdleAndTurnInPlaceAnimSet.GetRandomIdleBreakAnimation();
} }
bool FOLSStanceAnimSets::CanPlayIdleBreakAnimation() const
{
return IdleAndTurnInPlaceAnimSet.CanPlayIdleBreakAnimation();
}
UAnimSequence* FOLSStanceAnimSets::GetTurnInPlaceAnimation(const float direction) const UAnimSequence* FOLSStanceAnimSets::GetTurnInPlaceAnimation(const float direction) const
{ {
return IdleAndTurnInPlaceAnimSet.GetTurnInPlaceAnimation(direction); return IdleAndTurnInPlaceAnimSet.GetTurnInPlaceAnimation(direction);
} }
const FOLSGaitAnimSets* FOLSStanceAnimSets::SelectGaitAnimSetByGait(const EOLSGait& gait) const bool FOLSStanceAnimSets::CanPlayIdleBreakAnimation() const
{ {
return GaitAnimSets.Find(gait); return false;
}
const FOLSGaitAnimSets& FOLSStanceAnimSets::GetGaitAnimSetByGait(const EOLSGait& gait) const
{
return WalkAnimSets;
}
const FOLSGaitAnimSets& FOLSStanceAnimSets_Standing::GetGaitAnimSetByGait(const EOLSGait& gait) const
{
switch (gait)
{
case EOLSGait::EWalk:
return WalkAnimSets;
break;
case EOLSGait::EJog:
return JogAnimSets;
case EOLSGait::ESprint:
return SprintAnimSets;
}
return FOLSStanceAnimSets::GetGaitAnimSetByGait(gait);
} }
FOLSGaitAnimSets FOLSGaitAnimSets::EmptyAnimSet = FOLSGaitAnimSets(); FOLSGaitAnimSets FOLSGaitAnimSets::EmptyAnimSet = FOLSGaitAnimSets();
const FVector2D& FOLSRootYawOffsetClamp::GetRootYawOffsetClamp(const EOLSStance stance) const
{
return (stance == EOLSStance::EStanding ? RootYawOffsetClamp_Standing : RootYawOffsetClamp_Crouching);
}
const FOLSRootYawOffsetClamp& FOLSRootYawOffsetClamps::GetRootYawOffsetClamp(const EOLSRotationMode& rotationMode) const
{
return RootYawOffsetClamps.FindChecked(rotationMode);
}

View File

@ -44,7 +44,7 @@ protected: //~ Blueprint thread-safe update functions.
protected: protected:
virtual EOLSHipDirection GetHipDirection() const; virtual EOLSHipDirection GetHipDirection() const;
FOLSStanceAnimSets GetStanceAnimSets(const bool isCrouching) const; const FOLSStanceAnimSets& GetStanceAnimSets(const bool isCrouching) const;
const FOLSGaitAnimSets& GetGaitAnimSets(const bool isCrouching, const EOLSGait& locomotionState) const; const FOLSGaitAnimSets& GetGaitAnimSets(const bool isCrouching, const EOLSGait& locomotionState) const;
protected: protected:
@ -233,10 +233,10 @@ protected:
float HipDirectionBuffer = 5.f; float HipDirectionBuffer = 5.f;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Settings|AnimSet") UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Settings|AnimSet")
FOLSStanceAnimSets StandingAnimSets; FOLSStanceAnimSets Crouching_AnimSets;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Settings|AnimSet") UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Settings|AnimSet")
FOLSStanceAnimSets CrouchingAnimSets; FOLSStanceAnimSets_Standing Standing_AnimSets;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Settings|AnimSet|DistanceMatching") UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Settings|AnimSet|DistanceMatching")
FName GroundDistanceCurveName = NAME_None; FName GroundDistanceCurveName = NAME_None;

View File

@ -81,7 +81,7 @@ struct FOLSIdleAndTurnInPlaceAnimSet
public: public:
FORCEINLINE class UAnimSequence* GetIdleEntryAnimation() const; FORCEINLINE class UAnimSequence* GetIdleExitAnimation() const;
FORCEINLINE class UAnimSequence* GetIdleAnimation() const; FORCEINLINE class UAnimSequence* GetIdleAnimation() const;
FORCEINLINE class UAnimSequence* GetRandomIdleBreakAnimation() const; FORCEINLINE class UAnimSequence* GetRandomIdleBreakAnimation() const;
FORCEINLINE class UAnimSequence* GetTurnInPlaceAnimation(const float direction) const; FORCEINLINE class UAnimSequence* GetTurnInPlaceAnimation(const float direction) const;
@ -262,55 +262,51 @@ struct FOLSStanceAnimSets
GENERATED_BODY() GENERATED_BODY()
public: public:
FOLSStanceAnimSets() = default;
FOLSStanceAnimSets(const FOLSStanceAnimSets&) = default;
FOLSStanceAnimSets(FOLSStanceAnimSets&&) = default;
FOLSStanceAnimSets& operator=(const FOLSStanceAnimSets&) = default;
FOLSStanceAnimSets& operator=(FOLSStanceAnimSets&&) = default;
virtual ~FOLSStanceAnimSets() = default;
class UAnimSequence* GetIdleAnimation() const;
class UAnimSequence* GetIdleEntryAnimation() const;
class UAnimSequence* GetRandomIdleBreakAnimation() const;
bool CanPlayIdleBreakAnimation() const;
class UAnimSequence* GetTurnInPlaceAnimation(const float direction) const;
const FOLSGaitAnimSets* SelectGaitAnimSetByGait(const EOLSGait& gait) const;
public: public:
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Stance Anim Sets") class UAnimSequence* GetIdleAnimation() const;
TMap<EOLSGait, FOLSGaitAnimSets> GaitAnimSets; class UAnimSequence* GetIdleExitAnimation() const;
class UAnimSequence* GetRandomIdleBreakAnimation() const;
class UAnimSequence* GetTurnInPlaceAnimation(const float direction) const;
virtual bool CanPlayIdleBreakAnimation() const;
public:
virtual const FOLSGaitAnimSets& GetGaitAnimSetByGait(const EOLSGait& gait) const;
public:
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Stance Anim Sets") UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Stance Anim Sets")
FOLSIdleAndTurnInPlaceAnimSet IdleAndTurnInPlaceAnimSet; FOLSIdleAndTurnInPlaceAnimSet IdleAndTurnInPlaceAnimSet;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Stance Anim Sets") UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Stance Anim Sets")
FOLSAimAnimSet AimAnimSet; FOLSGaitAnimSets WalkAnimSets;
}; };
USTRUCT(BlueprintType) USTRUCT(BlueprintType)
struct FOLSRootYawOffsetClamp struct FOLSStanceAnimSets_Standing : public FOLSStanceAnimSets
{ {
GENERATED_BODY() GENERATED_BODY()
public: public:
const FVector2D& GetRootYawOffsetClamp(const EOLSStance stance) const; virtual const FOLSGaitAnimSets& GetGaitAnimSetByGait(const EOLSGait& gait) const override;
public:
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Root Yaw Offset Clamp")
FVector2D RootYawOffsetClamp_Standing = FVector2D::ZeroVector;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Root Yaw Offset Clamp")
FVector2D RootYawOffsetClamp_Crouching = FVector2D::ZeroVector;
};
USTRUCT(BlueprintType)
struct FOLSRootYawOffsetClamps
{
GENERATED_BODY()
public: public:
const FOLSRootYawOffsetClamp& GetRootYawOffsetClamp(const EOLSRotationMode& rotationMode) const;
public:
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Stance Anim Sets") UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Stance Anim Sets")
TMap<EOLSRotationMode, FOLSRootYawOffsetClamp> RootYawOffsetClamps; FOLSGaitAnimSets JogAnimSets;
};
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Stance Anim Sets")
FOLSGaitAnimSets SprintAnimSets;
};