Compare commits

..

No commits in common. "b4105ffb750b1b4f91855ff478c79df28b090f16" and "2fd439e76b55ee12d9f1f381cd775c17cb486d58" have entirely different histories.

22 changed files with 150 additions and 110 deletions

View File

@ -1,17 +0,0 @@
{
"version": "1.0",
"components": [
"Component.Unreal.Debugger",
"Component.Unreal.Ide",
"Microsoft.Net.Component.4.6.2.TargetingPack",
"Microsoft.VisualStudio.Component.VC.14.38.17.8.ATL",
"Microsoft.VisualStudio.Component.VC.14.38.17.8.x86.x64",
"Microsoft.VisualStudio.Component.VC.Llvm.Clang",
"Microsoft.VisualStudio.Component.VC.Tools.x86.x64",
"Microsoft.VisualStudio.Component.Windows11SDK.22621",
"Microsoft.VisualStudio.Workload.CoreEditor",
"Microsoft.VisualStudio.Workload.ManagedDesktop",
"Microsoft.VisualStudio.Workload.NativeDesktop",
"Microsoft.VisualStudio.Workload.NativeGame"
]
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 51 KiB

View File

@ -3,7 +3,6 @@
#include "AnimInstances/OLSBaseLinkedLayerAnimInstance.h" #include "AnimInstances/OLSBaseLinkedLayerAnimInstance.h"
#include "KismetAnimationLibrary.h"
#include "AnimInstances/OLSBaseLayerAnimInstance.h" #include "AnimInstances/OLSBaseLayerAnimInstance.h"
void UOLSBaseLinkedLayerAnimInstance::NativeInitializeAnimation() void UOLSBaseLinkedLayerAnimInstance::NativeInitializeAnimation()
@ -59,32 +58,27 @@ void UOLSBaseLinkedLayerAnimInstance::NativeThreadSafeUpdateSkeletonControlData(
{ {
OrientationWarpingAlpha = GetCurveValue(EnableOrientationWarpingName); OrientationWarpingAlpha = GetCurveValue(EnableOrientationWarpingName);
bIsLeftFootFarFromTarget = UKismetAnimationLibrary::K2_DistanceBetweenTwoSocketsAndMapRange( FeetPositionCurve = GetCurveValue(FeetPositionCurveName);
GetOwningComponent(), FeetPositionSettings.IKFootLeft, RTS_World, bIsRightFootPlanted = FeetPositionCurve > FootPlantedThreshold;
FeetPositionSettings.IKTargetFootLeft, RTS_World, false, bIsLeftFootPlanted = FMath::Abs(FeetPositionCurve) > FootPlantedThreshold;
0.f, 0.f, 0.f, 0.f) > 8.0f;
bIsRightFootFarFromTarget = UKismetAnimationLibrary::K2_DistanceBetweenTwoSocketsAndMapRange(
GetOwningComponent(), FeetPositionSettings.IKFootRight, RTS_World,
FeetPositionSettings.IKTargetFootRight, RTS_World, false,
0.f, 0.f, 0.f, 0.f) > 8.0f;
// If neither foot is planted, use the last valid foot // If neither foot is planted, use the last valid foot
if (!bIsRightFootFarFromTarget && !bIsLeftFootFarFromTarget) if (!bIsRightFootPlanted && !bIsLeftFootPlanted)
{ {
if (bWasRightFootPlantingChanged) if (bWasRightFootPlantingChanged)
{ {
bIsRightFootFarFromTarget = true; bIsRightFootPlanted = true;
} }
else else
{ {
bIsLeftFootFarFromTarget = true; bIsLeftFootPlanted = true;
} }
} }
else else
{ {
// Update the last valid foot // Update the last valid foot
bWasRightFootPlantingChanged = bIsRightFootFarFromTarget; bWasRightFootPlantingChanged = bIsRightFootPlanted;
bWasLeftFootPlantingChanged = bIsLeftFootPlanted;
} }
} }
@ -164,7 +158,7 @@ UAnimSequence* UOLSBaseLinkedLayerAnimInstance::SelectStartCycleAnimation(const
return GetGaitAnimSets(isCrouching, gait).GaitAnimSet_ForwardFacing.StartCycle. return GetGaitAnimSets(isCrouching, gait).GaitAnimSet_ForwardFacing.StartCycle.
GetMovementAnimationByAngle( GetMovementAnimationByAngle(
velocityDirection, angle, bIsRightFootFarFromTarget); velocityDirection, angle, bIsRightFootPlanted);
} }
UAnimSequence* UOLSBaseLinkedLayerAnimInstance::SelectCycleAnimation(const bool isCrouching, UAnimSequence* UOLSBaseLinkedLayerAnimInstance::SelectCycleAnimation(const bool isCrouching,
@ -187,16 +181,21 @@ UAnimSequence* UOLSBaseLinkedLayerAnimInstance::SelectPivotAnimation(const bool
const EOLSGait gait, const EOLSGait gait,
const EOLSCardinalDirection velocityDirection, const EOLSCardinalDirection velocityDirection,
const EOLSHipDirection hipDirection, const EOLSHipDirection hipDirection,
const float angle) const const float angle,
float& outPivotTime) const
{ {
if (isAiming) if (isAiming)
{ {
outPivotTime = 0.2f;
return GetGaitAnimSets(isCrouching, gait).GaitAnimSet_CameraFacing.GetPivotFromHipDirection(hipDirection). return GetGaitAnimSets(isCrouching, gait).GaitAnimSet_CameraFacing.GetPivotFromHipDirection(hipDirection).
GetMovementAnimationByCardinalDirection(velocityDirection); GetMovementAnimationByCardinalDirection(velocityDirection);
} }
return GetGaitAnimSets(isCrouching, gait).GaitAnimSet_ForwardFacing.Pivot.GetLeftOrRightByAngle( return (bUseFeetFlagsForPivot)
angle, bIsLeftFootFarFromTarget, bIsRightFootFarFromTarget); ? GetGaitAnimSets(isCrouching, gait).GaitAnimSet_ForwardFacing.Pivot.GetLeftOrRightAnim(
angle, bIsLeftFootPlanted, bIsRightFootPlanted, outPivotTime)
: GetGaitAnimSets(isCrouching, gait).GaitAnimSet_ForwardFacing.Pivot.GetLeftOrRightAnim(
angle, FeetPositionCurve, outPivotTime);
} }
UAnimSequence* UOLSBaseLinkedLayerAnimInstance::SelectStopCycleAnimation(const bool isCrouching, UAnimSequence* UOLSBaseLinkedLayerAnimInstance::SelectStopCycleAnimation(const bool isCrouching,
@ -212,7 +211,7 @@ UAnimSequence* UOLSBaseLinkedLayerAnimInstance::SelectStopCycleAnimation(const b
GetMovementAnimationByCardinalDirection(velocityDirection); GetMovementAnimationByCardinalDirection(velocityDirection);
} }
return GetGaitAnimSets(isCrouching, gait).GaitAnimSet_ForwardFacing.StopCycle.GetLeftOrRightAnim(bIsRightFootFarFromTarget); return GetGaitAnimSets(isCrouching, gait).GaitAnimSet_ForwardFacing.Stop.GetLeftOrRightStopAnim(FeetPositionCurve);
} }
FVector2D UOLSBaseLinkedLayerAnimInstance::SelectPlayRateByLocomotionState( FVector2D UOLSBaseLinkedLayerAnimInstance::SelectPlayRateByLocomotionState(
@ -301,7 +300,7 @@ void UOLSBaseLinkedLayerAnimInstance::ProcessTurnInPlaceTransitionLogic(const fl
bool UOLSBaseLinkedLayerAnimInstance::ShouldSelectNewPivotAnimation(const float lastPivotTime) const bool UOLSBaseLinkedLayerAnimInstance::ShouldSelectNewPivotAnimation(const float lastPivotTime) const
{ {
return ShouldLookingOrAimingDirectionSelectNewPivotAnimation(lastPivotTime); return ShouldLookingOrAimingDirectionSelectNewPivotAnimation(lastPivotTime) || ShouldVelocityDirectionSelectNewPivotAnimation(lastPivotTime);
} }
bool UOLSBaseLinkedLayerAnimInstance::ShouldLookingOrAimingDirectionSelectNewPivotAnimation(const float lastPivotTime) const bool UOLSBaseLinkedLayerAnimInstance::ShouldLookingOrAimingDirectionSelectNewPivotAnimation(const float lastPivotTime) const
@ -309,6 +308,11 @@ bool UOLSBaseLinkedLayerAnimInstance::ShouldLookingOrAimingDirectionSelectNewPiv
return (bIsLookingOrAimingDirection && lastPivotTime > 0.0f); return (bIsLookingOrAimingDirection && lastPivotTime > 0.0f);
} }
bool UOLSBaseLinkedLayerAnimInstance::ShouldVelocityDirectionSelectNewPivotAnimation(const float lastPivotTime) const
{
return (bIsLookingOrAimingDirection && lastPivotTime > 0.0f);
}
UOLSBaseLayerAnimInstance* UOLSBaseLinkedLayerAnimInstance::GetBaseMainAnimInstance() const UOLSBaseLayerAnimInstance* UOLSBaseLinkedLayerAnimInstance::GetBaseMainAnimInstance() const
{ {
return BaseMainAnimInstance; return BaseMainAnimInstance;

View File

@ -82,26 +82,26 @@ UAnimSequence* FOLSMovementAnimSet::GetMovementAnimationByCardinalDirection(cons
return result; return result;
} }
class UAnimSequence* FOLSMovementAnimSet_ForwardFacing_StartCycle::GetForwardLeftOrRightFootByAngle( class UAnimSequence* FOLSMovementAnimSet_ForwardFacing_StartCycle::GetForwardLeftOrRightFoot(
const bool isRightFootFront) const const float feetPositionValue) const
{ {
return (isRightFootFront) ? Forward_R : Forward_L; return (feetPositionValue > 0.f) ? Forward_R : Forward_L;
} }
UAnimSequence* FOLSMovementAnimSet_ForwardFacing_StartCycle::GetForward180LeftOrRightByAngle(const float angle) const UAnimSequence* FOLSMovementAnimSet_ForwardFacing_StartCycle::GetForward180LeftOrRight(const float angle) const
{ {
return (angle > 0.f) ? Forward180_R : Forward180_L; return (angle > 0.f) ? Forward180_R : Forward180_L;
} }
class UAnimSequence* FOLSMovementAnimSet_ForwardFacing_StartCycle::GetMovementAnimationByAngle( class UAnimSequence* FOLSMovementAnimSet_ForwardFacing_StartCycle::GetMovementAnimationByAngle(
const EOLSCardinalDirection direction, const float angle, const bool isRightFootFront) const const EOLSCardinalDirection direction, const float angle, const float feetPositionValue) const
{ {
TObjectPtr<UAnimSequence> result = nullptr; TObjectPtr<UAnimSequence> result = nullptr;
switch (direction) switch (direction)
{ {
case EOLSCardinalDirection::EForward: case EOLSCardinalDirection::EForward:
result = GetForwardLeftOrRightFootByAngle(isRightFootFront); result = GetForwardLeftOrRightFoot(feetPositionValue);
break; break;
case EOLSCardinalDirection::ELeft: case EOLSCardinalDirection::ELeft:
result = Left; result = Left;
@ -110,13 +110,24 @@ class UAnimSequence* FOLSMovementAnimSet_ForwardFacing_StartCycle::GetMovementAn
result = Right; result = Right;
break; break;
case EOLSCardinalDirection::EBackward: case EOLSCardinalDirection::EBackward:
result = GetForward180LeftOrRightByAngle(angle); result = GetForward180LeftOrRight(angle);
break; break;
} }
return result; return result;
} }
class UAnimSequence* FOLSMovementAnimSet_ForwardFacing_Stop::GetLeftOrRightStopAnim(const float feetPosition) const
{
return (feetPosition > 0.f ? StopR : StopL);
}
void FOLSMovementAnimSets_ForwardFacing_Pivot::GetLeftOrRightAnimSet(float feetPosition,
FOLSMovementAnimSet_ForwardFacing_Pivot& outAnimSet) const
{
outAnimSet = (feetPosition > 0.f) ? Pivot_RightFoot : Pivot_LeftFoot;
}
void FOLSMovementAnimSets_ForwardFacing_Pivot::GetLeftOrRightAnimSet(const bool isLeftFootPlanted, void FOLSMovementAnimSets_ForwardFacing_Pivot::GetLeftOrRightAnimSet(const bool isLeftFootPlanted,
const bool isRightFootPlanted, FOLSMovementAnimSet_ForwardFacing_Pivot& outAnimSet) const const bool isRightFootPlanted, FOLSMovementAnimSet_ForwardFacing_Pivot& outAnimSet) const
{ {
@ -130,18 +141,25 @@ void FOLSMovementAnimSets_ForwardFacing_Pivot::GetLeftOrRightAnimSet(const bool
} }
} }
UAnimSequence* FOLSMovementAnimSets_ForwardFacing_StopCycle::GetLeftOrRightAnim(const bool isRightFootPlanted) const class UAnimSequence* FOLSMovementAnimSets_ForwardFacing_Pivot::GetLeftOrRightAnim(const float angle,
{ const bool isLeftFootPlanted, const bool isRightFootPlanted, float& outPivotTime) const
return (isRightFootPlanted ? StopCycle_RightFoot : StopCycle_LeftFoot);
}
class UAnimSequence* FOLSMovementAnimSets_ForwardFacing_Pivot::GetLeftOrRightByAngle(const float angle,
const bool isLeftFootPlanted,
const bool isRightFootPlanted) const
{ {
FOLSMovementAnimSet_ForwardFacing_Pivot animSet; FOLSMovementAnimSet_ForwardFacing_Pivot animSet;
GetLeftOrRightAnimSet(isLeftFootPlanted, isRightFootPlanted, animSet); GetLeftOrRightAnimSet(isLeftFootPlanted, isRightFootPlanted, animSet);
outPivotTime = PivotTime;
return (angle > 0.f) ? animSet.Pivot180R : animSet.Pivot180L;
}
class UAnimSequence* FOLSMovementAnimSets_ForwardFacing_Pivot::GetLeftOrRightAnim(const float angle,
const float feetPosition, float& outPivotTime) const
{
FOLSMovementAnimSet_ForwardFacing_Pivot animSet;
GetLeftOrRightAnimSet(feetPosition, animSet);
outPivotTime = PivotTime;
return (angle > 0.f) ? animSet.Pivot180R : animSet.Pivot180L; return (angle > 0.f) ? animSet.Pivot180R : animSet.Pivot180L;
} }

View File

@ -82,7 +82,8 @@ protected:
const EOLSGait gait, const EOLSGait gait,
const EOLSCardinalDirection velocityDirection, const EOLSCardinalDirection velocityDirection,
const EOLSHipDirection hipDirection, const EOLSHipDirection hipDirection,
const float angle) const; const float angle,
float& outPivotTime) const;
UFUNCTION(BlueprintCallable, meta = (BlueprintThreadSafe), Category = "ThreadSafe|Selectors") UFUNCTION(BlueprintCallable, meta = (BlueprintThreadSafe), Category = "ThreadSafe|Selectors")
class UAnimSequence* SelectStopCycleAnimation(const bool isCrouching, class UAnimSequence* SelectStopCycleAnimation(const bool isCrouching,
@ -120,6 +121,9 @@ protected:
UFUNCTION(BlueprintCallable, meta = (BlueprintThreadSafe), Category = "ThreadSafe|Pivot") UFUNCTION(BlueprintCallable, meta = (BlueprintThreadSafe), Category = "ThreadSafe|Pivot")
bool ShouldLookingOrAimingDirectionSelectNewPivotAnimation(const float lastPivotTime) const; bool ShouldLookingOrAimingDirectionSelectNewPivotAnimation(const float lastPivotTime) const;
UFUNCTION(BlueprintCallable, meta = (BlueprintThreadSafe), Category = "ThreadSafe|Pivot")
bool ShouldVelocityDirectionSelectNewPivotAnimation(const float lastPivotTime) const;
protected: protected:
UFUNCTION(BlueprintCallable, meta = (BlueprintThreadSafe)) UFUNCTION(BlueprintCallable, meta = (BlueprintThreadSafe))
@ -199,16 +203,23 @@ protected:
UPROPERTY(BlueprintReadWrite, Category = "ThreadSafe|SkeletonControl|OrientationWarping") UPROPERTY(BlueprintReadWrite, Category = "ThreadSafe|SkeletonControl|OrientationWarping")
float OrientationWarpingAlpha = 0.f; float OrientationWarpingAlpha = 0.f;
protected: protected:
UPROPERTY(BlueprintReadWrite, Category = "ThreadSafe|SkeletonControl|FeetPosition")
float FeetPositionCurve = 0.0f;
UPROPERTY(BlueprintReadWrite, Category = "ThreadSafe|SkeletonControl|FeetPosition") UPROPERTY(BlueprintReadWrite, Category = "ThreadSafe|SkeletonControl|FeetPosition")
uint8 bWasRightFootPlantingChanged : 1 = false; uint8 bWasRightFootPlantingChanged : 1 = false;
UPROPERTY(BlueprintReadWrite, Category = "ThreadSafe|SkeletonControl|FeetPosition") UPROPERTY(BlueprintReadWrite, Category = "ThreadSafe|SkeletonControl|FeetPosition")
uint8 bIsRightFootFarFromTarget : 1 = true; uint8 bWasLeftFootPlantingChanged : 1 = false;
UPROPERTY(BlueprintReadWrite, Category = "ThreadSafe|SkeletonControl|FeetPosition") UPROPERTY(BlueprintReadWrite, Category = "ThreadSafe|SkeletonControl|FeetPosition")
uint8 bIsLeftFootFarFromTarget : 1 = true; uint8 bIsRightFootPlanted : 1 = true;
UPROPERTY(BlueprintReadWrite, Category = "ThreadSafe|SkeletonControl|FeetPosition")
uint8 bIsLeftFootPlanted : 1 = true;
protected: protected:
@ -221,6 +232,9 @@ protected:
UPROPERTY(BlueprintReadWrite, Category = "ThreadSafe|Pivots") UPROPERTY(BlueprintReadWrite, Category = "ThreadSafe|Pivots")
float TimeAtPivotStop = 0.f; float TimeAtPivotStop = 0.f;
UPROPERTY(BlueprintReadWrite, Category = "ThreadSafe|Pivots")
float PivotTime = 0.f;
protected: protected:
UPROPERTY(BlueprintReadOnly , Category = "ThreadSafe|IdleBreaks") UPROPERTY(BlueprintReadOnly , Category = "ThreadSafe|IdleBreaks")
@ -262,8 +276,37 @@ protected:
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Settings|AnimSet|DistanceMatching") UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Settings|AnimSet|DistanceMatching")
FName JumpDistanceCurveName = NAME_None; FName JumpDistanceCurveName = NAME_None;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Settings|FeetPosition") UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Settings|AnimSet|FeetPosition")
FOLSFeetPositionSettings FeetPositionSettings; FName FeetPositionCurveName = NAME_None;
/**
* Threshold value to determine if a foot is considered planted on the ground.
* Range: 0.0 to 1.0, where:
* - Values closer to 0 make foot planting detection more sensitive
* - Values closer to 1 require more definitive foot contact
* Default value of 0.4 provides a balanced detection for most animations
*/
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Settings|AnimSet|FeetPosition",
meta = (ClampMin = "0.0", ClampMax = "1.0", UIMin = "0.0", UIMax = "1.0"))
float FootPlantedThreshold = 0.4f;
/**
* Determines the method used for selecting pivot animations based on foot positioning.
*
* When true:
* - Uses explicit foot planting flags (isLeftFootPlanted, isRightFootPlanted)
* - More precise control over pivot selection
* - Better for complex animation transitions
*
* When false:
* - Uses simplified feet position value
* - Relies on animation curves for foot position
* - More suitable for basic movement patterns
*
* @note This affects how pivot animations are chosen in FOLSMovementAnimSets_ForwardFacing_Pivot
* @see FOLSMovementAnimSets_ForwardFacing_Pivot::GetLeftOrRightAnim
*/
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Settings|AnimSet|FeetPosition")
uint8 bUseFeetFlagsForPivot : 1 = true;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Settings|StrideWarping") UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Settings|StrideWarping")
float StrideWarpingBlendInDurationScaled = .2f; float StrideWarpingBlendInDurationScaled = .2f;

View File

@ -9,26 +9,6 @@
#include "UObject/Object.h" #include "UObject/Object.h"
#include "OLSAnimationData.generated.h" #include "OLSAnimationData.generated.h"
USTRUCT(BlueprintType)
struct FOLSFeetPositionSettings
{
GENERATED_BODY()
public:
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "FeetPositionSettings")
FName IKFootRight = NAME_None;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "FeetPositionSettings")
FName IKTargetFootRight = NAME_None;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "FeetPositionSettings")
FName IKFootLeft = NAME_None;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "FeetPositionSettings")
FName IKTargetFootLeft = NAME_None;
};
USTRUCT(BlueprintType) USTRUCT(BlueprintType)
struct FOLSRotationMatchingData struct FOLSRotationMatchingData
{ {
@ -173,11 +153,11 @@ struct FOLSMovementAnimSet_ForwardFacing_StartCycle
public: public:
class UAnimSequence* GetForwardLeftOrRightFootByAngle(const bool isRightFootFront) const; class UAnimSequence* GetForwardLeftOrRightFoot(const float feetPositionValue) const;
class UAnimSequence* GetForward180LeftOrRightByAngle(const float angle) const; class UAnimSequence* GetForward180LeftOrRight(const float angle) const;
class UAnimSequence* GetMovementAnimationByAngle(const EOLSCardinalDirection direction, class UAnimSequence* GetMovementAnimationByAngle(const EOLSCardinalDirection direction,
const float angle, const float angle,
const bool isRightFootFront) const; const float feetPositionValue) const;
public: public:
@ -200,6 +180,25 @@ public:
TObjectPtr<class UAnimSequence> Left = nullptr; TObjectPtr<class UAnimSequence> Left = nullptr;
}; };
USTRUCT(BlueprintType)
struct FOLSMovementAnimSet_ForwardFacing_Stop
{
GENERATED_BODY()
public:
class UAnimSequence* GetLeftOrRightStopAnim(const float feetPosition) const;
public:
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Movement Stop Anim Set")
TObjectPtr<class UAnimSequence> StopL = nullptr;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Movement Stop Anim Set")
TObjectPtr<class UAnimSequence> StopR = nullptr;
};
USTRUCT(BlueprintType) USTRUCT(BlueprintType)
struct FOLSMovementAnimSet_ForwardFacing_Pivot struct FOLSMovementAnimSet_ForwardFacing_Pivot
{ {
@ -222,14 +221,23 @@ struct FOLSMovementAnimSets_ForwardFacing_Pivot
protected: protected:
void GetLeftOrRightAnimSet(const bool isLeftFootPlanted, const bool isRightFootPlanted, void GetLeftOrRightAnimSet(const bool isLeftFootPlanted,
const bool isRightFootPlanted,
FOLSMovementAnimSet_ForwardFacing_Pivot& outAnimSet) const;
void GetLeftOrRightAnimSet(float feetPosition,
FOLSMovementAnimSet_ForwardFacing_Pivot& outAnimSet) const; FOLSMovementAnimSet_ForwardFacing_Pivot& outAnimSet) const;
public: public:
class UAnimSequence* GetLeftOrRightByAngle(const float angle, class UAnimSequence* GetLeftOrRightAnim(const float angle,
const bool isLeftFootPlanted, const bool isLeftFootPlanted,
const bool isRightFootPlanted) const; const bool isRightFootPlanted,
float& outPivotTime) const;
class UAnimSequence* GetLeftOrRightAnim(const float angle,
const float feetPosition,
float& outPivotTime) const;
public: public:
@ -238,24 +246,9 @@ public:
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Movement Pivot Anim Set") UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Movement Pivot Anim Set")
FOLSMovementAnimSet_ForwardFacing_Pivot Pivot_RightFoot; FOLSMovementAnimSet_ForwardFacing_Pivot Pivot_RightFoot;
};
USTRUCT(BlueprintType)
struct FOLSMovementAnimSets_ForwardFacing_StopCycle
{
GENERATED_BODY()
public:
class UAnimSequence* GetLeftOrRightAnim(const bool isRightFootPlanted) const;
public:
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Movement Pivot Anim Set") UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Movement Pivot Anim Set")
TObjectPtr<class UAnimSequence> StopCycle_LeftFoot; float PivotTime = 0.0f;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Movement Pivot Anim Set")
TObjectPtr<class UAnimSequence> StopCycle_RightFoot;
}; };
USTRUCT(BlueprintType) USTRUCT(BlueprintType)
@ -278,14 +271,13 @@ public:
public: public:
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Gait Anim Sets")
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Stance Anim Sets")
FVector2D PlayRate_Start = FVector2D::ZeroVector; FVector2D PlayRate_Start = FVector2D::ZeroVector;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Stance Anim Sets") UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Gait Anim Sets")
FVector2D PlayRate_Pivot = FVector2D::ZeroVector; FVector2D PlayRate_Pivot = FVector2D::ZeroVector;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Stance Anim Sets") UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Gait Anim Sets")
FVector2D PlayRate_Cycle = FVector2D::ZeroVector; FVector2D PlayRate_Cycle = FVector2D::ZeroVector;
}; };
@ -306,7 +298,7 @@ public:
FOLSMovementAnimSets_ForwardFacing_Pivot Pivot; FOLSMovementAnimSets_ForwardFacing_Pivot Pivot;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Gait Anim Set") UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Gait Anim Set")
FOLSMovementAnimSets_ForwardFacing_StopCycle StopCycle; FOLSMovementAnimSet_ForwardFacing_Stop Stop;
}; };
USTRUCT(BlueprintType) USTRUCT(BlueprintType)
@ -401,9 +393,6 @@ public:
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Stance Anim Sets") UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Stance Anim Sets")
FOLSGaitAnimSets WalkAnimSets; FOLSGaitAnimSets WalkAnimSets;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Stance Anim Sets")
uint8 bUseFeetPosition : 1 = false;
}; };
USTRUCT(BlueprintType) USTRUCT(BlueprintType)

View File

@ -1,6 +1,6 @@
{ {
"FileVersion": 3, "FileVersion": 3,
"EngineAssociation": "5.6", "EngineAssociation": "5.5",
"Category": "", "Category": "",
"Description": "", "Description": "",
"Modules": [ "Modules": [