Fixed incorrectly selecting start animation for velocity mode

This commit is contained in:
mrlee207 2025-08-29 10:17:08 +07:00
parent c0c05e57be
commit b613397c75
6 changed files with 31 additions and 31 deletions

View File

@ -138,12 +138,11 @@ UAnimSequence* UOLSBaseLinkedLayerAnimInstance::SelectStartCycleAnimation(const
{
return GetGaitAnimSets(isCrouching, gait).GaitAnimSet_CameraFacing.StartCycle.
GetMovementAnimByCardinalDirection(
velocityDirection, FeetPositionData.IsRightFootIsFront());
velocityDirection, FeetPositionData.IsRightFootFront());
}
return GetGaitAnimSets(isCrouching, gait).GaitAnimSet_ForwardFacing.StartCycle.
GetMovementAnimationByAngle(
velocityDirection, angle, FeetPositionData.IsRightFootIsFront());
GetMovementAnimationByAngle(angle, FeetPositionData.IsRightFootFront());
}
UAnimSequence* UOLSBaseLinkedLayerAnimInstance::SelectCycleAnimation(const bool isCrouching,
@ -169,11 +168,11 @@ UAnimSequence* UOLSBaseLinkedLayerAnimInstance::SelectPivotAnimation(const bool
if (isAiming)
{
return GetGaitAnimSets(isCrouching, gait).GaitAnimSet_CameraFacing.Pivot.GetMovementAnimByCardinalDirection(
velocityDirection, FeetPositionData.IsRightFootIsFront());
velocityDirection, FeetPositionData.IsRightFootFront());
}
return GetGaitAnimSets(isCrouching, gait).GaitAnimSet_ForwardFacing.Pivot.GetLeftOrRightByAngle(
angle, FeetPositionData.IsRightFootIsFront());
angle, FeetPositionData.IsRightFootFront());
}
UAnimSequence* UOLSBaseLinkedLayerAnimInstance::SelectStopCycleAnimation(const bool isCrouching,
@ -185,10 +184,10 @@ UAnimSequence* UOLSBaseLinkedLayerAnimInstance::SelectStopCycleAnimation(const b
{
return GetGaitAnimSets(isCrouching, gait).
GaitAnimSet_CameraFacing.StopCycle.GetMovementAnimByCardinalDirection(
velocityDirection, FeetPositionData.IsRightFootIsFront());
velocityDirection, FeetPositionData.IsRightFootFront());
}
return GetGaitAnimSets(isCrouching, gait).GaitAnimSet_ForwardFacing.StopCycle.GetLeftOrRightAnim(FeetPositionData.IsRightFootIsFront());
return GetGaitAnimSets(isCrouching, gait).GaitAnimSet_ForwardFacing.StopCycle.GetLeftOrRightAnim(FeetPositionData.IsRightFootFront());
}
FVector2D UOLSBaseLinkedLayerAnimInstance::SelectPlayRateByLocomotionState(

View File

@ -22,7 +22,7 @@ void FOLSFeetPositionData::DetermineIfRightFootIsFront()
bIsRightFootFront = rightFootLocal.X > leftFootLocal.X;
}
bool FOLSFeetPositionData::IsRightFootIsFront() const
bool FOLSFeetPositionData::IsRightFootFront() const
{
const FVector rightFootLocal = RootTransform.InverseTransformPosition(RightFootLocation);
const FVector leftFootLocal = RootTransform.InverseTransformPosition(LeftFootLocation);
@ -90,9 +90,14 @@ class UAnimSequence* FOLSMovementAnimSet_FeetPosition::GetForwardLeftOrRightFoot
return (isRightFootFarFromTarget ? RightFoot : LeftFoot);
}
class UAnimSequence* FOLSMovementAnimSet_ForwardFacing_StartCycle::GetForwardLeftOrRightFoot(const bool isRightFootFarFromTarget) const
class UAnimSequence* FOLSMovementAnimSet_ForwardFacing_StartCycle::GetForwardLeftOrRightFoot(const bool isRightFootFront) const
{
return Forward.GetForwardLeftOrRightFoot(isRightFootFarFromTarget);
return Forward.GetForwardLeftOrRightFoot(isRightFootFront);
}
class UAnimSequence* FOLSMovementAnimSet_ForwardFacing_StartCycle::GetForward90LeftOrRightByAngle(const float angle) const
{
return (angle > 0.f) ? Forward90R : Forward90L;
}
UAnimSequence* FOLSMovementAnimSet_ForwardFacing_StartCycle::GetForward180LeftOrRightByAngle(const float angle) const
@ -100,27 +105,23 @@ UAnimSequence* FOLSMovementAnimSet_ForwardFacing_StartCycle::GetForward180LeftOr
return (angle > 0.f) ? Forward180R : Forward180L;
}
class UAnimSequence* FOLSMovementAnimSet_ForwardFacing_StartCycle::GetMovementAnimationByAngle(
const EOLSMovementDirection direction, const float angle, const bool isRightFootFarFromTarget) const
class UAnimSequence* FOLSMovementAnimSet_ForwardFacing_StartCycle::GetMovementAnimationByAngle(const float angle, const bool isRightFootFront) const
{
TObjectPtr<UAnimSequence> result = nullptr;
switch (direction)
const float absAngle = FMath::Abs(angle);
if (angle >= -45.f && angle <= 45.f)
{
result = GetForwardLeftOrRightFoot(isRightFootFront);
}
else if (absAngle > 45.f && absAngle <= 135.f)
{
result = GetForward90LeftOrRightByAngle(angle);
}
else if (absAngle > 135.f && absAngle <= 180.f)
{
case EOLSMovementDirection::EForward:
result = GetForwardLeftOrRightFoot(isRightFootFarFromTarget);
break;
case EOLSMovementDirection::ELeftLeft:
case EOLSMovementDirection::ELeftRight:
result = Forward90L;
break;
case EOLSMovementDirection::ERightLeft:
case EOLSMovementDirection::ERightRight:
result = Forward90R;
break;
case EOLSMovementDirection::EBackward:
result = GetForward180LeftOrRightByAngle(angle);
break;
}
return result;

View File

@ -77,7 +77,7 @@ struct FOLSFeetPositionData
public:
void DetermineIfRightFootIsFront();
bool IsRightFootIsFront() const;
bool IsRightFootFront() const;
public:
@ -194,11 +194,11 @@ struct FOLSMovementAnimSet_ForwardFacing_StartCycle
public:
class UAnimSequence* GetForwardLeftOrRightFoot(const bool isRightFootFarFromTarget) const;
class UAnimSequence* GetForwardLeftOrRightFoot(const bool isRightFootFront) const;
class UAnimSequence* GetForward90LeftOrRightByAngle(const float angle) const;
class UAnimSequence* GetForward180LeftOrRightByAngle(const float angle) const;
class UAnimSequence* GetMovementAnimationByAngle(const EOLSMovementDirection direction,
const float angle,
const bool isRightFootFarFromTarget) const;
class UAnimSequence* GetMovementAnimationByAngle(const float angle,
const bool isRightFootFront) const;
public: