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.
|
return GetGaitAnimSets(isCrouching, gait).GaitAnimSet_CameraFacing.StartCycle.
|
||||||
GetMovementAnimByCardinalDirection(
|
GetMovementAnimByCardinalDirection(
|
||||||
velocityDirection, FeetPositionData.IsRightFootIsFront());
|
velocityDirection, FeetPositionData.IsRightFootFront());
|
||||||
}
|
}
|
||||||
|
|
||||||
return GetGaitAnimSets(isCrouching, gait).GaitAnimSet_ForwardFacing.StartCycle.
|
return GetGaitAnimSets(isCrouching, gait).GaitAnimSet_ForwardFacing.StartCycle.
|
||||||
GetMovementAnimationByAngle(
|
GetMovementAnimationByAngle(angle, FeetPositionData.IsRightFootFront());
|
||||||
velocityDirection, angle, FeetPositionData.IsRightFootIsFront());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
UAnimSequence* UOLSBaseLinkedLayerAnimInstance::SelectCycleAnimation(const bool isCrouching,
|
UAnimSequence* UOLSBaseLinkedLayerAnimInstance::SelectCycleAnimation(const bool isCrouching,
|
||||||
@ -169,11 +168,11 @@ UAnimSequence* UOLSBaseLinkedLayerAnimInstance::SelectPivotAnimation(const bool
|
|||||||
if (isAiming)
|
if (isAiming)
|
||||||
{
|
{
|
||||||
return GetGaitAnimSets(isCrouching, gait).GaitAnimSet_CameraFacing.Pivot.GetMovementAnimByCardinalDirection(
|
return GetGaitAnimSets(isCrouching, gait).GaitAnimSet_CameraFacing.Pivot.GetMovementAnimByCardinalDirection(
|
||||||
velocityDirection, FeetPositionData.IsRightFootIsFront());
|
velocityDirection, FeetPositionData.IsRightFootFront());
|
||||||
}
|
}
|
||||||
|
|
||||||
return GetGaitAnimSets(isCrouching, gait).GaitAnimSet_ForwardFacing.Pivot.GetLeftOrRightByAngle(
|
return GetGaitAnimSets(isCrouching, gait).GaitAnimSet_ForwardFacing.Pivot.GetLeftOrRightByAngle(
|
||||||
angle, FeetPositionData.IsRightFootIsFront());
|
angle, FeetPositionData.IsRightFootFront());
|
||||||
}
|
}
|
||||||
|
|
||||||
UAnimSequence* UOLSBaseLinkedLayerAnimInstance::SelectStopCycleAnimation(const bool isCrouching,
|
UAnimSequence* UOLSBaseLinkedLayerAnimInstance::SelectStopCycleAnimation(const bool isCrouching,
|
||||||
@ -185,10 +184,10 @@ UAnimSequence* UOLSBaseLinkedLayerAnimInstance::SelectStopCycleAnimation(const b
|
|||||||
{
|
{
|
||||||
return GetGaitAnimSets(isCrouching, gait).
|
return GetGaitAnimSets(isCrouching, gait).
|
||||||
GaitAnimSet_CameraFacing.StopCycle.GetMovementAnimByCardinalDirection(
|
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(
|
FVector2D UOLSBaseLinkedLayerAnimInstance::SelectPlayRateByLocomotionState(
|
||||||
|
|||||||
@ -22,7 +22,7 @@ void FOLSFeetPositionData::DetermineIfRightFootIsFront()
|
|||||||
bIsRightFootFront = rightFootLocal.X > leftFootLocal.X;
|
bIsRightFootFront = rightFootLocal.X > leftFootLocal.X;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FOLSFeetPositionData::IsRightFootIsFront() const
|
bool FOLSFeetPositionData::IsRightFootFront() const
|
||||||
{
|
{
|
||||||
const FVector rightFootLocal = RootTransform.InverseTransformPosition(RightFootLocation);
|
const FVector rightFootLocal = RootTransform.InverseTransformPosition(RightFootLocation);
|
||||||
const FVector leftFootLocal = RootTransform.InverseTransformPosition(LeftFootLocation);
|
const FVector leftFootLocal = RootTransform.InverseTransformPosition(LeftFootLocation);
|
||||||
@ -90,9 +90,14 @@ class UAnimSequence* FOLSMovementAnimSet_FeetPosition::GetForwardLeftOrRightFoot
|
|||||||
return (isRightFootFarFromTarget ? RightFoot : LeftFoot);
|
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
|
UAnimSequence* FOLSMovementAnimSet_ForwardFacing_StartCycle::GetForward180LeftOrRightByAngle(const float angle) const
|
||||||
@ -100,27 +105,23 @@ UAnimSequence* FOLSMovementAnimSet_ForwardFacing_StartCycle::GetForward180LeftOr
|
|||||||
return (angle > 0.f) ? Forward180R : Forward180L;
|
return (angle > 0.f) ? Forward180R : Forward180L;
|
||||||
}
|
}
|
||||||
|
|
||||||
class UAnimSequence* FOLSMovementAnimSet_ForwardFacing_StartCycle::GetMovementAnimationByAngle(
|
class UAnimSequence* FOLSMovementAnimSet_ForwardFacing_StartCycle::GetMovementAnimationByAngle(const float angle, const bool isRightFootFront) const
|
||||||
const EOLSMovementDirection direction, const float angle, const bool isRightFootFarFromTarget) const
|
|
||||||
{
|
{
|
||||||
TObjectPtr<UAnimSequence> result = nullptr;
|
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);
|
result = GetForward180LeftOrRightByAngle(angle);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
@ -77,7 +77,7 @@ struct FOLSFeetPositionData
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
void DetermineIfRightFootIsFront();
|
void DetermineIfRightFootIsFront();
|
||||||
bool IsRightFootIsFront() const;
|
bool IsRightFootFront() const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@ -194,11 +194,11 @@ struct FOLSMovementAnimSet_ForwardFacing_StartCycle
|
|||||||
|
|
||||||
public:
|
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* GetForward180LeftOrRightByAngle(const float angle) const;
|
||||||
class UAnimSequence* GetMovementAnimationByAngle(const EOLSMovementDirection direction,
|
class UAnimSequence* GetMovementAnimationByAngle(const float angle,
|
||||||
const float angle,
|
const bool isRightFootFront) const;
|
||||||
const bool isRightFootFarFromTarget) const;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user