Skip to content

Commit

Permalink
Merge pull request #60 from dyanikoglu/dev
Browse files Browse the repository at this point in the history
Release v4.6
  • Loading branch information
dyanikoglu authored Sep 12, 2020
2 parents a43a29f + e81872a commit a14c2bf
Show file tree
Hide file tree
Showing 15 changed files with 100 additions and 100 deletions.
2 changes: 1 addition & 1 deletion ALSV4_CPP.uplugin
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"FileVersion": 3,
"Version": 1,
"VersionName": "4.5",
"VersionName": "4.6",
"FriendlyName": "Advanced Locomotion System V4 on C++",
"Description": "Performance optimized C++ port of LongmireLocomotion's Advanced Locomotion System V4",
"Category": "Animation",
Expand Down
37 changes: 37 additions & 0 deletions Config/DefaultInput.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
[/Script/Engine.InputSettings]
+ActionMappings=(ActionName="JumpAction",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=SpaceBar)
+ActionMappings=(ActionName="JumpAction",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Gamepad_FaceButton_Bottom)
+ActionMappings=(ActionName="StanceAction",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=LeftAlt)
+ActionMappings=(ActionName="SprintAction",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=LeftShift)
+ActionMappings=(ActionName="StanceAction",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Gamepad_FaceButton_Right)
+ActionMappings=(ActionName="SprintAction",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Gamepad_LeftThumbstick)
+ActionMappings=(ActionName="WalkAction",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=LeftControl)
+ActionMappings=(ActionName="WalkAction",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Gamepad_RightShoulder)
+ActionMappings=(ActionName="AimAction",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=RightMouseButton)
+ActionMappings=(ActionName="AimAction",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Gamepad_LeftTrigger)
+ActionMappings=(ActionName="SelectRotationMode_1",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=One)
+ActionMappings=(ActionName="SelectRotationMode_2",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Two)
+ActionMappings=(ActionName="SelectRotationMode_1",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Gamepad_DPad_Left)
+ActionMappings=(ActionName="SelectRotationMode_2",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Gamepad_DPad_Right)
+ActionMappings=(ActionName="CameraAction",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=C)
+ActionMappings=(ActionName="CameraAction",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Gamepad_RightThumbstick)
+ActionMappings=(ActionName="RagdollAction",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=X)
+ActionMappings=(ActionName="RagdollAction",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Gamepad_Special_Left)
+ActionMappings=(ActionName="CycleOverlayUp",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=MouseScrollUp)
+ActionMappings=(ActionName="CycleOverlayDown",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=MouseScrollDown)
+ActionMappings=(ActionName="CycleOverlayUp",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Gamepad_DPad_Up)
+ActionMappings=(ActionName="CycleOverlayDown",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Gamepad_DPad_Down)
+ActionMappings=(ActionName="OpenOverlayMenu",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Q)
+ActionMappings=(ActionName="OpenOverlayMenu",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Gamepad_LeftShoulder)
+ActionMappings=(ActionName="UseAction",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=E)
+AxisMappings=(AxisName="MoveForward/Backwards",Scale=1.000000,Key=W)
+AxisMappings=(AxisName="MoveRight/Left",Scale=1.000000,Key=D)
+AxisMappings=(AxisName="LookUp/Down",Scale=-1.000000,Key=MouseY)
+AxisMappings=(AxisName="LookLeft/Right",Scale=1.000000,Key=MouseX)
+AxisMappings=(AxisName="MoveForward/Backwards",Scale=-1.000000,Key=S)
+AxisMappings=(AxisName="MoveRight/Left",Scale=-1.000000,Key=A)
+AxisMappings=(AxisName="MoveForward/Backwards",Scale=1.000000,Key=Gamepad_LeftY)
+AxisMappings=(AxisName="MoveRight/Left",Scale=1.000000,Key=Gamepad_LeftX)
+AxisMappings=(AxisName="LookUp/Down",Scale=1.000000,Key=Gamepad_RightY)
+AxisMappings=(AxisName="LookLeft/Right",Scale=1.000000,Key=Gamepad_RightX)

Binary file not shown.
Binary file not shown.
Binary file modified Content/AdvancedLocomotionV4/Blueprints/UI/ALS_HUD.uasset
Binary file not shown.
Binary file not shown.
Binary file modified Content/AdvancedLocomotionV4/Levels/ALS_DemoLevel.umap
Binary file not shown.
42 changes: 3 additions & 39 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Advanced Locomotion System V4 on C++
![image](https://github.com/dyanikoglu/ALSV4_CPP/raw/main/Resources/Readme_Content_2.gif)

Performance optimized & replicated C++ port of [Advanced Locomotion System V4](https://www.unrealengine.com/marketplace/en-US/product/advanced-locomotion-system-v1) for **Unreal Engine 4.25+**
Performance optimized & replicated C++ port of [Advanced Locomotion System V4](https://www.unrealengine.com/marketplace/en-US/product/advanced-locomotion-system-v1) for **Unreal Engine 4.25.3**

## Features
- Converted into plugin structure (by [AHGS-Jens](https://github.com/AHGS-Jens)). You can immediately start using it in your project without doing any serious change in your project configuration.
Expand Down Expand Up @@ -38,51 +38,15 @@ Netprofiler benchmark by @Scragnog
## Setting Up The Plugin
- Clone the repository if you're working on a C++ project, or download the latest release if you're on a BP project.
- Move ALSV4_CPP folder into your project's `Plugins` folder
- Add the lines below into your project's `DefaultInput.ini`, below `[/Script/Engine.InputSettings]` tag:
```
+ActionMappings=(ActionName="JumpAction",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=SpaceBar)
+ActionMappings=(ActionName="JumpAction",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Gamepad_FaceButton_Bottom)
+ActionMappings=(ActionName="StanceAction",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=LeftAlt)
+ActionMappings=(ActionName="SprintAction",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=LeftShift)
+ActionMappings=(ActionName="StanceAction",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Gamepad_FaceButton_Right)
+ActionMappings=(ActionName="SprintAction",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Gamepad_LeftThumbstick)
+ActionMappings=(ActionName="WalkAction",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=LeftControl)
+ActionMappings=(ActionName="WalkAction",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Gamepad_RightShoulder)
+ActionMappings=(ActionName="AimAction",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=RightMouseButton)
+ActionMappings=(ActionName="AimAction",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Gamepad_LeftTrigger)
+ActionMappings=(ActionName="SelectRotationMode_1",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=One)
+ActionMappings=(ActionName="SelectRotationMode_2",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Two)
+ActionMappings=(ActionName="SelectRotationMode_1",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Gamepad_DPad_Left)
+ActionMappings=(ActionName="SelectRotationMode_2",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Gamepad_DPad_Right)
+ActionMappings=(ActionName="CameraAction",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=C)
+ActionMappings=(ActionName="CameraAction",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Gamepad_RightThumbstick)
+ActionMappings=(ActionName="RagdollAction",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=X)
+ActionMappings=(ActionName="RagdollAction",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Gamepad_Special_Left)
+ActionMappings=(ActionName="CycleOverlayUp",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=MouseScrollUp)
+ActionMappings=(ActionName="CycleOverlayDown",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=MouseScrollDown)
+ActionMappings=(ActionName="CycleOverlayUp",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Gamepad_DPad_Up)
+ActionMappings=(ActionName="CycleOverlayDown",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Gamepad_DPad_Down)
+ActionMappings=(ActionName="OpenOverlayMenu",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Q)
+ActionMappings=(ActionName="OpenOverlayMenu",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Gamepad_LeftShoulder)
+ActionMappings=(ActionName="UseAction",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=E)
+AxisMappings=(AxisName="MoveForward/Backwards",Scale=1.000000,Key=W)
+AxisMappings=(AxisName="MoveRight/Left",Scale=1.000000,Key=D)
+AxisMappings=(AxisName="LookUp/Down",Scale=-1.000000,Key=MouseY)
+AxisMappings=(AxisName="LookLeft/Right",Scale=1.000000,Key=MouseX)
+AxisMappings=(AxisName="MoveForward/Backwards",Scale=-1.000000,Key=S)
+AxisMappings=(AxisName="MoveRight/Left",Scale=-1.000000,Key=A)
+AxisMappings=(AxisName="MoveForward/Backwards",Scale=1.000000,Key=Gamepad_LeftY)
+AxisMappings=(AxisName="MoveRight/Left",Scale=1.000000,Key=Gamepad_LeftX)
+AxisMappings=(AxisName="LookUp/Down",Scale=1.000000,Key=Gamepad_RightY)
+AxisMappings=(AxisName="LookLeft/Right",Scale=1.000000,Key=Gamepad_RightX)
```
- Put `Config/DefaultInput.ini` from the plugin inside your project's config folder. If your project already have this .ini file, merge it into yours.
- Add the lines below into your `DefaultEngine.ini`, below `[/Script/Engine.CollisionProfile]` tag (Create the tag if it doesn't exist):
```
+Profiles=(Name="ALS_Character",CollisionEnabled=QueryAndPhysics,bCanModify=True,ObjectTypeName="Pawn",CustomResponses=((Channel="Visibility",Response=ECR_Ignore),(Channel="Camera",Response=ECR_Ignore),(Channel="Climbable",Response=ECR_Ignore)),HelpMessage="Custom collision settings for the capsule in the ALS_BaseCharacter.")
+DefaultChannelResponses=(Channel=ECC_GameTraceChannel2,DefaultResponse=ECR_Block,bTraceType=True,bStaticObject=False,Name="Climbable")
```
- Launch your project, and enable plugin content viewer as seen below. This will show contents of the ALS in your content browser:
![image](https://github.com/dyanikoglu/ALSV4_CPP/raw/main/Resources/Readme_Content_1.png)
- If you're getting problems with the plugin binaries, try compiling them yourself from the source.

## License & Contribution
**Source code** of the plugin is licensed under MIT license, and other developers are encouraged to fork the repository, open issues & pull requests to help the development.
6 changes: 3 additions & 3 deletions Source/ALSV4_CPP/Private/Character/ALSBaseCharacter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -938,7 +938,7 @@ void AALSBaseCharacter::SetEssentialValues(float DeltaTime)

// Interp AimingRotation to current control rotation for smooth character rotation movement. Decrease InterpSpeed
// for slower but smoother movement.
AimingRotation = FMath::RInterpTo(AimingRotation, ReplicatedControlRotation, DeltaTime, SynchroInterpSpeed);
AimingRotation = FMath::RInterpTo(AimingRotation, ReplicatedControlRotation, DeltaTime, 30);

// These values represent how the capsule is moving as well as how it wants to move, and therefore are essential
// for any data driven animation system. They are also used throughout the system for various functions,
Expand Down Expand Up @@ -1083,13 +1083,13 @@ void AALSBaseCharacter::UpdateGroundedRotation(float DeltaTime)
if (GetLocalRole() == ROLE_AutonomousProxy)
{
TargetRotation.Yaw = UKismetMathLibrary::NormalizeAxis(TargetRotation.Yaw + (RotAmountCurve * (DeltaTime / (1.0f / 30.0f))));
SetActorRotation(FMath::RInterpTo(GetActorRotation(), TargetRotation, DeltaTime, SynchroInterpSpeed));
SetActorRotation(TargetRotation);
}
else
{
AddActorWorldRotation({0, RotAmountCurve * (DeltaTime / (1.0f / 30.0f)), 0});
TargetRotation = GetActorRotation();
}
TargetRotation = GetActorRotation();
}
}
}
Expand Down
16 changes: 5 additions & 11 deletions Source/ALSV4_CPP/Private/Character/ALSCharacter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -79,17 +79,11 @@ void AALSCharacter::RagdollEnd()

ECollisionChannel AALSCharacter::GetThirdPersonTraceParams(FVector& TraceOrigin, float& TraceRadius)
{
if (bRightShoulder)
{
TraceOrigin = GetMesh()->GetSocketLocation(TEXT("TP_CameraTrace_R"));
TraceRadius = 15.0f;
}
else
{
TraceOrigin = GetMesh()->GetSocketLocation(TEXT("TP_CameraTrace_L"));
TraceRadius = 15.0f;
}

FName CameraSocketName = bRightShoulder ? TEXT("TP_CameraTrace_R") : TEXT("TP_CameraTrace_L");
TraceOrigin = GetMesh()->GetSocketLocation(CameraSocketName);
float Pelvis_Z_Offset = GetMesh()->GetSocketTransform(TEXT("pelvis")).GetLocation().Z - 96;
TraceOrigin.Z += Pelvis_Z_Offset;
TraceRadius = 15.0f;
return ECC_Camera;
}

Expand Down
7 changes: 4 additions & 3 deletions Source/ALSV4_CPP/Private/Character/ALSPlayerCameraManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -140,20 +140,21 @@ bool AALSPlayerCameraManager::CustomCameraBehavior(float DeltaTime, FVector& Loc
// Trace origins are set within the Character BP via the Camera Interface.
// Functions like the normal spring arm, but can allow for different trace origins regardless of the pivot
FVector TraceOrigin;
float TraceRadius = 0.0f;
float TraceRadius;
ECollisionChannel TraceChannel = ControlledCharacter->GetThirdPersonTraceParams(TraceOrigin, TraceRadius);

UWorld* World = GetWorld();
check(World);

FCollisionQueryParams Params;
Params.AddIgnoredActor(this);
Params.AddIgnoredActor(ControlledCharacter);

FHitResult HitResult;
World->SweepSingleByChannel(HitResult, TraceOrigin, TargetCameraLocation, FQuat::Identity,
TraceChannel, FCollisionShape::MakeSphere(TraceRadius), Params);
TraceChannel, FCollisionShape::MakeSphere(TraceRadius), Params);

if (HitResult.IsValidBlockingHit())
if (HitResult.bBlockingHit)
{
TargetCameraLocation += (HitResult.Location - HitResult.TraceEnd);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,11 @@ void UALSCharacterAnimInstance::NativeUpdateAnimation(float DeltaSeconds)

UpdateAimingValues(DeltaSeconds);
UpdateLayerValues();
UpdateFootIK(DeltaSeconds);


if (MovementState.Grounded())
{
UpdateFootIK(DeltaSeconds);

// Check If Moving Or Not & Enable Movement Animations if IsMoving and HasMovementInput, or if the Speed is greater than 150.
const bool prevShouldMove = Grounded.bShouldMove;
Grounded.bShouldMove = ShouldMoveCheck();
Expand Down Expand Up @@ -257,17 +258,12 @@ void UALSCharacterAnimInstance::UpdateLayerValues()

void UALSCharacterAnimInstance::UpdateFootIK(float DeltaSeconds)
{
if (MovementState.Mantling())
{
return;
}

// Update Foot Locking values.
SetFootLocking(DeltaSeconds, FName(TEXT("Enable_FootIK_L")), FName(TEXT("FootLock_L")),
FName(TEXT("ik_foot_l")), FootIKValues.FootLock_L_Alpha,
FName(TEXT("ik_foot_l")), FootIKValues.FootLock_L_Alpha, FootIKValues.UseFootLockCurve_L,
FootIKValues.FootLock_L_Location, FootIKValues.FootLock_L_Rotation);
SetFootLocking(DeltaSeconds, FName(TEXT("Enable_FootIK_R")), FName(TEXT("FootLock_R")),
FName(TEXT("ik_foot_r")), FootIKValues.FootLock_R_Alpha,
FName(TEXT("ik_foot_r")), FootIKValues.FootLock_R_Alpha, FootIKValues.UseFootLockCurve_R,
FootIKValues.FootLock_R_Location, FootIKValues.FootLock_R_Rotation);

if (MovementState.InAir())
Expand All @@ -290,30 +286,37 @@ void UALSCharacterAnimInstance::UpdateFootIK(float DeltaSeconds)
}

void UALSCharacterAnimInstance::SetFootLocking(float DeltaSeconds, FName EnableFootIKCurve, FName FootLockCurve,
FName IKFootBone,
float& CurFootLockAlpha, FVector& CurFootLockLoc,
FRotator& CurFootLockRot)
FName IKFootBone, float& CurFootLockAlpha, bool& UseFootLockCurve,
FVector& CurFootLockLoc, FRotator& CurFootLockRot)
{
FootIKValues.bReverseFootAsset = ((Character->HasAuthority() && !Character->IsLocallyControlled())
|| Character->GetLocalRole() == ROLE_AutonomousProxy)
&& !CharacterInformation.bIsMoving;

if (GetCurveValue(EnableFootIKCurve) <= 0.0f)
{
return;
}

// Step 1: Set Local FootLock Curve value
const float FootLockCurveVal = FootIKValues.bReverseFootAsset ? 0 : GetCurveValue(FootLockCurve);
float FootLockCurveVal;

if (UseFootLockCurve)
{
UseFootLockCurve = FMath::Abs(GetCurveValue(FName(TEXT("RotationAmount")))) <= 0.001f ||
Character->GetLocalRole() != ROLE_AutonomousProxy;
FootLockCurveVal = GetCurveValue(FootLockCurve);
}
else
{
UseFootLockCurve = GetCurveValue(FootLockCurve) >= 0.99f;
FootLockCurveVal = 0.0f;
}

// Step 2: Only update the FootLock Alpha if the new value is less than the current, or it equals 1. This makes it
// so that the foot can only blend out of the locked position or lock to a new position, and never blend in.
if (FootLockCurveVal > 0.99f || FootLockCurveVal < CurFootLockAlpha)
if (FootLockCurveVal >= 0.99f || FootLockCurveVal < CurFootLockAlpha)
{
CurFootLockAlpha = FootLockCurveVal;
}

// Step 3: If the Foot Lock curve equals 1, save the new lock location and rotation in component space.
// Step 3: If the Foot Lock curve equals 1, save the new lock location and rotation in component space as the target.
if (CurFootLockAlpha >= 0.99f)
{
const FTransform& OwnerTransform =
Expand Down Expand Up @@ -504,7 +507,7 @@ void UALSCharacterAnimInstance::DynamicTransitionCheck()
if (Distance > Config.DynamicTransitionThreshold)
{
FALSDynamicMontageParams Params;
Params.Animation = TransitionAnim_L;
Params.Animation = TransitionAnim_R;
Params.BlendInTime = 0.2f;
Params.BlendOutTime = 0.2f;
Params.PlayRate = 1.5f;
Expand All @@ -518,7 +521,7 @@ void UALSCharacterAnimInstance::DynamicTransitionCheck()
if (Distance > Config.DynamicTransitionThreshold)
{
FALSDynamicMontageParams Params;
Params.Animation = TransitionAnim_R;
Params.Animation = TransitionAnim_L;
Params.BlendInTime = 0.2f;
Params.BlendOutTime = 0.2f;
Params.PlayRate = 1.5f;
Expand Down Expand Up @@ -773,18 +776,9 @@ void UALSCharacterAnimInstance::TurnInPlace(FRotator TargetRotation, float PlayR
{
if (FMath::Abs(TurnAngle) < TurnInPlaceValues.Turn180Threshold)
{
if (FootIKValues.bReverseFootAsset)
{
TargetTurnAsset = (TurnAngle < 0.0f)
? TurnInPlaceValues.N_TurnIP_L90
: TurnInPlaceValues.N_TurnIP_R90;
}
else
{
TargetTurnAsset = (TurnAngle < 0.0f)
? TurnInPlaceValues.N_TurnIP_R90
: TurnInPlaceValues.N_TurnIP_L90;
}
TargetTurnAsset = TurnAngle < 0.0f
? TurnInPlaceValues.N_TurnIP_L90
: TurnInPlaceValues.N_TurnIP_R90;
}
else
{
Expand Down
5 changes: 1 addition & 4 deletions Source/ALSV4_CPP/Public/Character/ALSBaseCharacter.h
Original file line number Diff line number Diff line change
Expand Up @@ -543,7 +543,7 @@ class ALSV4_CPP_API AALSBaseCharacter : public ACharacter
UPROPERTY(BlueprintReadOnly, Category = "ALS|Essential Information")
float Speed = 0.0f;

UPROPERTY(BlueprintReadOnly, replicated, Category = "ALS|Essential Information")
UPROPERTY(BlueprintReadOnly, Category = "ALS|Essential Information")
float MovementInputAmount = 0.0f;

UPROPERTY(BlueprintReadOnly, Category = "ALS|Essential Information")
Expand Down Expand Up @@ -677,7 +677,4 @@ class ALSV4_CPP_API AALSBaseCharacter : public ACharacter

/* Smooth out aiming by interping control rotation*/
FRotator AimingRotation;

/* Default interp speed for client-server synchronisation*/
float SynchroInterpSpeed = 20;
};
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,8 @@ class ALSV4_CPP_API UALSCharacterAnimInstance : public UAnimInstance
/** Foot IK */

void SetFootLocking(float DeltaSeconds, FName EnableFootIKCurve, FName FootLockCurve, FName IKFootBone,
float& CurFootLockAlpha, FVector& CurFootLockLoc, FRotator& CurFootLockRot);
float& CurFootLockAlpha, bool& UseFootLockCurve,
FVector& CurFootLockLoc, FRotator& CurFootLockRot);

void SetFootLockOffsets(float DeltaSeconds, FVector& LocalLoc, FRotator& LocalRot);

Expand Down
Loading

0 comments on commit a14c2bf

Please sign in to comment.