Files
UnrealEngineUWP/Engine/Plugins/Animation/AnimationLocomotionLibrary/Source/Runtime/Private/AnimCharacterMovementLibrary.cpp
aaron cox 74b6812ea3 Remove code that's no longer needed from the Animation Locomotion Library plugin. This logic is now being handled in blueprint with Anim Node Functions until (if) we have a better mechanism to make it an engine feature.
#preflight 61b39375a2562c8b1c3fcc45
[at]Jose.Villarroel

#ROBOMERGE-AUTHOR: aaron.cox
#ROBOMERGE-SOURCE: CL 18431931 in //UE5/Release-5.0/... via CL 18435373
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v897-18405271)

[CL 18435871 by aaron cox in ue5-release-engine-test branch]
2021-12-10 18:04:41 -05:00

54 lines
2.2 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "AnimCharacterMovementLibrary.h"
FVector UAnimCharacterMovementLibrary::PredictGroundMovementStopLocation(const FVector& Velocity,
bool bUseSeparateBrakingFriction, float BrakingFriction, float GroundFriction, float BrakingFrictionFactor, float BrakingDecelerationWalking)
{
FVector PredictedStopLocation = FVector::ZeroVector;
float ActualBrakingFriction = (bUseSeparateBrakingFriction ? BrakingFriction : GroundFriction);
const float FrictionFactor = FMath::Max(0.f, BrakingFrictionFactor);
ActualBrakingFriction = FMath::Max(0.f, ActualBrakingFriction * FrictionFactor);
float BrakingDeceleration = FMath::Max(0.f, BrakingDecelerationWalking);
const FVector Velocity2D = Velocity * FVector(1.f, 1.f, 0.f);
FVector VelocityDir2D;
float Speed2D;
Velocity2D.ToDirectionAndLength(VelocityDir2D, Speed2D);
const float Divisor = ActualBrakingFriction * Speed2D + BrakingDeceleration;
if (Divisor > 0.f)
{
const float TimeToStop = Speed2D / Divisor;
PredictedStopLocation = Velocity2D * TimeToStop + 0.5f * ((-ActualBrakingFriction) * Velocity2D - BrakingDeceleration * VelocityDir2D) * TimeToStop * TimeToStop;
}
return PredictedStopLocation;
}
FVector UAnimCharacterMovementLibrary::PredictGroundMovementPivotLocation(const FVector& Acceleration, const FVector& Velocity, float GroundFriction)
{
FVector PredictedPivotLocation = FVector::ZeroVector;
const FVector Acceleration2D = Acceleration * FVector(1.f, 1.f, 0.f);
FVector AccelerationDir2D;
float AccelerationSize2D;
Acceleration2D.ToDirectionAndLength(AccelerationDir2D, AccelerationSize2D);
const float VelocityAlongAcceleration = (Velocity | AccelerationDir2D);
if (VelocityAlongAcceleration < 0.0f)
{
const float SpeedAlongAcceleration = -VelocityAlongAcceleration;
const float Divisor = AccelerationSize2D + 2.f * SpeedAlongAcceleration * GroundFriction;
const float TimeToDirectionChange = SpeedAlongAcceleration / Divisor;
const FVector AccelerationForce = Acceleration -
(Velocity - AccelerationDir2D * Velocity.Size2D()) * GroundFriction;
PredictedPivotLocation = Velocity * TimeToDirectionChange + 0.5f * AccelerationForce * TimeToDirectionChange * TimeToDirectionChange;
}
return PredictedPivotLocation;
}