Fixed incorrectly selecting start animation for velocity mode
This commit is contained in:
parent
c0c05e57be
commit
b613397c75
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -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(
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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:
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user