From 37a815f9fa4f3e9e27991d8bfb4a4f5a6a7fb7ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Do=C4=9Fa=20Can=20Yan=C4=B1ko=C4=9Flu?= Date: Wed, 10 Nov 2021 00:08:04 +0300 Subject: [PATCH 1/2] Rename debug component uproprty to ALSDebugComponent in various classes, fixes #303 --- .../Private/Character/ALSBaseCharacter.cpp | 4 +- .../Character/ALSPlayerCameraManager.cpp | 4 +- .../Animation/ALSCharacterAnimInstance.cpp | 64 +++++++++---------- .../Private/Components/ALSMantleComponent.cpp | 10 +-- .../Public/Character/ALSBaseCharacter.h | 2 +- .../Public/Character/ALSPlayerCameraManager.h | 2 +- .../Animation/ALSCharacterAnimInstance.h | 8 +-- .../Public/Components/ALSMantleComponent.h | 2 +- 8 files changed, 45 insertions(+), 51 deletions(-) diff --git a/Source/ALSV4_CPP/Private/Character/ALSBaseCharacter.cpp b/Source/ALSV4_CPP/Private/Character/ALSBaseCharacter.cpp index 7e82a985..27e2a58b 100644 --- a/Source/ALSV4_CPP/Private/Character/ALSBaseCharacter.cpp +++ b/Source/ALSV4_CPP/Private/Character/ALSBaseCharacter.cpp @@ -156,7 +156,7 @@ void AALSBaseCharacter::BeginPlay() MyCharacterMovementComponent->SetMovementSettings(GetTargetMovementSettings()); - DebugComponent = FindComponentByClass(); + ALSDebugComponent = FindComponentByClass(); } void AALSBaseCharacter::PreInitializeComponents() @@ -773,7 +773,7 @@ void AALSBaseCharacter::SetActorLocationDuringRagdoll(float DeltaTime) const bool bHit = World->LineTraceSingleByChannel(HitResult, TargetRagdollLocation, TraceVect, ECC_Visibility, Params); - if (DebugComponent && DebugComponent->GetShowTraces()) + if (ALSDebugComponent && ALSDebugComponent->GetShowTraces()) { UALSDebugComponent::DrawDebugLineTraceSingle(World, TargetRagdollLocation, diff --git a/Source/ALSV4_CPP/Private/Character/ALSPlayerCameraManager.cpp b/Source/ALSV4_CPP/Private/Character/ALSPlayerCameraManager.cpp index bdb8d522..6baf6246 100644 --- a/Source/ALSV4_CPP/Private/Character/ALSPlayerCameraManager.cpp +++ b/Source/ALSV4_CPP/Private/Character/ALSPlayerCameraManager.cpp @@ -64,7 +64,7 @@ void AALSPlayerCameraManager::OnPossess(AALSBaseCharacter* NewCharacter) SetActorLocation(TPSLoc); SmoothedPivotTarget.SetLocation(TPSLoc); - DebugComponent = ControlledCharacter->FindComponentByClass(); + ALSDebugComponent = ControlledCharacter->FindComponentByClass(); } float AALSPlayerCameraManager::GetCameraBehaviorParam(FName CurveName) const @@ -202,7 +202,7 @@ bool AALSPlayerCameraManager::CustomCameraBehavior(float DeltaTime, FVector& Loc const bool bHit = World->SweepSingleByChannel(HitResult, TraceOrigin, TargetCameraLocation, FQuat::Identity, TraceChannel, SphereCollisionShape, Params); - if (DebugComponent && DebugComponent->GetShowTraces()) + if (ALSDebugComponent && ALSDebugComponent->GetShowTraces()) { UALSDebugComponent::DrawDebugSphereTraceSingle(World, TraceOrigin, diff --git a/Source/ALSV4_CPP/Private/Character/Animation/ALSCharacterAnimInstance.cpp b/Source/ALSV4_CPP/Private/Character/Animation/ALSCharacterAnimInstance.cpp index 13c09838..59341222 100644 --- a/Source/ALSV4_CPP/Private/Character/Animation/ALSCharacterAnimInstance.cpp +++ b/Source/ALSV4_CPP/Private/Character/Animation/ALSCharacterAnimInstance.cpp @@ -16,37 +16,33 @@ #include "GameFramework/CharacterMovementComponent.h" -const FName NAME_BasePose_CLF(TEXT("BasePose_CLF")); -const FName NAME_BasePose_N(TEXT("BasePose_N")); -const FName NAME_Enable_FootIK_R(TEXT("Enable_FootIK_R")); -const FName NAME_Enable_FootIK_L(TEXT("Enable_FootIK_L")); -const FName NAME_Enable_HandIK_L(TEXT("Enable_HandIK_L")); -const FName NAME_Enable_HandIK_R(TEXT("Enable_HandIK_R")); -const FName NAME_Enable_Transition(TEXT("Enable_Transition")); -const FName NAME_FootLock_L(TEXT("FootLock_L")); -const FName NAME_FootLock_R(TEXT("FootLock_R")); -const FName NAME_Grounded___Slot(TEXT("Grounded Slot")); -const FName NAME_Layering_Arm_L(TEXT("Layering_Arm_L")); -const FName NAME_Layering_Arm_L_Add(TEXT("Layering_Arm_L_Add")); -const FName NAME_Layering_Arm_L_LS(TEXT("Layering_Arm_L_LS")); -const FName NAME_Layering_Arm_R(TEXT("Layering_Arm_R")); -const FName NAME_Layering_Arm_R_Add(TEXT("Layering_Arm_R_Add")); -const FName NAME_Layering_Arm_R_LS(TEXT("Layering_Arm_R_LS")); -const FName NAME_Layering_Hand_L(TEXT("Layering_Hand_L")); -const FName NAME_Layering_Hand_R(TEXT("Layering_Hand_R")); -const FName NAME_Layering_Head_Add(TEXT("Layering_Head_Add")); -const FName NAME_Layering_Spine_Add(TEXT("Layering_Spine_Add")); -const FName NAME_Mask_AimOffset(TEXT("Mask_AimOffset")); -const FName NAME_Mask_LandPrediction(TEXT("Mask_LandPrediction")); -const FName NAME__ALSCharacterAnimInstance__RotationAmount(TEXT("RotationAmount")); -const FName NAME_VB___foot_target_l(TEXT("VB foot_target_l")); -const FName NAME_VB___foot_target_r(TEXT("VB foot_target_r")); -const FName NAME_W_Gait(TEXT("W_Gait")); -const FName NAME__ALSCharacterAnimInstance__root(TEXT("root")); - - -FName UALSCharacterAnimInstance::NAME_ik_foot_l(TEXT("ik_foot_l")); -FName UALSCharacterAnimInstance::NAME_ik_foot_r(TEXT("ik_foot_r")); +static const FName NAME_BasePose_CLF(TEXT("BasePose_CLF")); +static const FName NAME_BasePose_N(TEXT("BasePose_N")); +static const FName NAME_Enable_FootIK_R(TEXT("Enable_FootIK_R")); +static const FName NAME_Enable_FootIK_L(TEXT("Enable_FootIK_L")); +static const FName NAME_Enable_HandIK_L(TEXT("Enable_HandIK_L")); +static const FName NAME_Enable_HandIK_R(TEXT("Enable_HandIK_R")); +static const FName NAME_Enable_Transition(TEXT("Enable_Transition")); +static const FName NAME_FootLock_L(TEXT("FootLock_L")); +static const FName NAME_FootLock_R(TEXT("FootLock_R")); +static const FName NAME_Grounded___Slot(TEXT("Grounded Slot")); +static const FName NAME_Layering_Arm_L(TEXT("Layering_Arm_L")); +static const FName NAME_Layering_Arm_L_Add(TEXT("Layering_Arm_L_Add")); +static const FName NAME_Layering_Arm_L_LS(TEXT("Layering_Arm_L_LS")); +static const FName NAME_Layering_Arm_R(TEXT("Layering_Arm_R")); +static const FName NAME_Layering_Arm_R_Add(TEXT("Layering_Arm_R_Add")); +static const FName NAME_Layering_Arm_R_LS(TEXT("Layering_Arm_R_LS")); +static const FName NAME_Layering_Hand_L(TEXT("Layering_Hand_L")); +static const FName NAME_Layering_Hand_R(TEXT("Layering_Hand_R")); +static const FName NAME_Layering_Head_Add(TEXT("Layering_Head_Add")); +static const FName NAME_Layering_Spine_Add(TEXT("Layering_Spine_Add")); +static const FName NAME_Mask_AimOffset(TEXT("Mask_AimOffset")); +static const FName NAME_Mask_LandPrediction(TEXT("Mask_LandPrediction")); +static const FName NAME__ALSCharacterAnimInstance__RotationAmount(TEXT("RotationAmount")); +static const FName NAME_VB___foot_target_l(TEXT("VB foot_target_l")); +static const FName NAME_VB___foot_target_r(TEXT("VB foot_target_r")); +static const FName NAME_W_Gait(TEXT("W_Gait")); +static const FName NAME__ALSCharacterAnimInstance__root(TEXT("root")); void UALSCharacterAnimInstance::NativeInitializeAnimation() @@ -62,7 +58,7 @@ void UALSCharacterAnimInstance::NativeBeginPlay() // This is the reason why it is tried here to get the ALS debug component. if (APawn* Owner = TryGetPawnOwner()) { - DebugComponent = Owner->FindComponentByClass(); + ALSDebugComponent = Owner->FindComponentByClass(); } } @@ -486,7 +482,7 @@ void UALSCharacterAnimInstance::SetFootOffsets(float DeltaSeconds, FName EnableF TraceEnd, ECC_Visibility, Params); - if (DebugComponent && DebugComponent->GetShowTraces()) + if (ALSDebugComponent && ALSDebugComponent->GetShowTraces()) { UALSDebugComponent::DrawDebugLineTraceSingle( World, @@ -811,7 +807,7 @@ float UALSCharacterAnimInstance::CalculateLandPrediction() const const bool bHit = World->SweepSingleByChannel(HitResult, CapsuleWorldLoc, CapsuleWorldLoc + TraceLength, FQuat::Identity, ECC_Visibility, CapsuleCollisionShape, Params); - if (DebugComponent && DebugComponent->GetShowTraces()) + if (ALSDebugComponent && ALSDebugComponent->GetShowTraces()) { UALSDebugComponent::DrawDebugCapsuleTraceSingle(World, CapsuleWorldLoc, diff --git a/Source/ALSV4_CPP/Private/Components/ALSMantleComponent.cpp b/Source/ALSV4_CPP/Private/Components/ALSMantleComponent.cpp index 4733f7f0..e129b645 100644 --- a/Source/ALSV4_CPP/Private/Components/ALSMantleComponent.cpp +++ b/Source/ALSV4_CPP/Private/Components/ALSMantleComponent.cpp @@ -41,6 +41,8 @@ void UALSMantleComponent::BeginPlay() OwnerCharacter = Cast(GetOwner()); if (OwnerCharacter) { + ALSDebugComponent = OwnerCharacter->FindComponentByClass(); + AddTickPrerequisiteActor(OwnerCharacter); // Always tick after owner, so we'll use updated values // Bindings @@ -56,8 +58,6 @@ void UALSMantleComponent::BeginPlay() OwnerCharacter->JumpPressedDelegate.AddUniqueDynamic(this, &UALSMantleComponent::OnOwnerJumpInput); OwnerCharacter->RagdollStateChangedDelegate.AddUniqueDynamic( this, &UALSMantleComponent::OnOwnerRagdollStateChanged); - - DebugComponent = OwnerCharacter->FindComponentByClass(); } } } @@ -181,7 +181,7 @@ bool UALSMantleComponent::MantleCheck(const FALSMantleTraceSettings& TraceSettin const bool bHit = World->SweepSingleByProfile(HitResult, TraceStart, TraceEnd, FQuat::Identity, MantleObjectDetectionProfile, CapsuleCollisionShape, Params); - if (DebugComponent && DebugComponent->GetShowTraces()) + if (ALSDebugComponent && ALSDebugComponent->GetShowTraces()) { UALSDebugComponent::DrawDebugCapsuleTraceSingle(World, TraceStart, @@ -228,7 +228,7 @@ bool UALSMantleComponent::MantleCheck(const FALSMantleTraceSettings& TraceSettin WalkableSurfaceDetectionChannel, SphereCollisionShape, Params); - if (DebugComponent && DebugComponent->GetShowTraces()) + if (ALSDebugComponent && ALSDebugComponent->GetShowTraces()) { UALSDebugComponent::DrawDebugSphereTraceSingle(World, TraceStart, @@ -259,7 +259,7 @@ bool UALSMantleComponent::MantleCheck(const FALSMantleTraceSettings& TraceSettin DownTraceLocation, 2.0f, OwnerCharacter->GetCapsuleComponent()); const bool bCapsuleHasRoom = UALSMathLibrary::CapsuleHasRoomCheck(OwnerCharacter->GetCapsuleComponent(), CapsuleLocationFBase, 0.0f, - 0.0f, DebugType, DebugComponent && DebugComponent->GetShowTraces()); + 0.0f, DebugType, ALSDebugComponent && ALSDebugComponent->GetShowTraces()); if (!bCapsuleHasRoom) { diff --git a/Source/ALSV4_CPP/Public/Character/ALSBaseCharacter.h b/Source/ALSV4_CPP/Public/Character/ALSBaseCharacter.h index 712a7fb7..517bf86c 100644 --- a/Source/ALSV4_CPP/Public/Character/ALSBaseCharacter.h +++ b/Source/ALSV4_CPP/Public/Character/ALSBaseCharacter.h @@ -646,5 +646,5 @@ class ALSV4_CPP_API AALSBaseCharacter : public ACharacter private: UPROPERTY() - UALSDebugComponent* DebugComponent = nullptr; + UALSDebugComponent* ALSDebugComponent = nullptr; }; diff --git a/Source/ALSV4_CPP/Public/Character/ALSPlayerCameraManager.h b/Source/ALSV4_CPP/Public/Character/ALSPlayerCameraManager.h index d9a55829..23b37bea 100644 --- a/Source/ALSV4_CPP/Public/Character/ALSPlayerCameraManager.h +++ b/Source/ALSV4_CPP/Public/Character/ALSPlayerCameraManager.h @@ -78,5 +78,5 @@ class ALSV4_CPP_API AALSPlayerCameraManager : public APlayerCameraManager private: UPROPERTY() - UALSDebugComponent* DebugComponent = nullptr; + UALSDebugComponent* ALSDebugComponent = nullptr; }; diff --git a/Source/ALSV4_CPP/Public/Character/Animation/ALSCharacterAnimInstance.h b/Source/ALSV4_CPP/Public/Character/Animation/ALSCharacterAnimInstance.h index 6d850a38..f41ec63b 100644 --- a/Source/ALSV4_CPP/Public/Character/Animation/ALSCharacterAnimInstance.h +++ b/Source/ALSV4_CPP/Public/Character/Animation/ALSCharacterAnimInstance.h @@ -302,14 +302,12 @@ class ALSV4_CPP_API UALSCharacterAnimInstance : public UAnimInstance UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Configuration|Dynamic Transition") UAnimSequenceBase* TransitionAnim_L = nullptr; - static FName NAME_ik_foot_l; - static FName NAME_ik_foot_r; /** IK Bone Names */ UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Configuration|Anim Graph - Foot IK") - FName IkFootL_BoneName = NAME_ik_foot_l; + FName IkFootL_BoneName = FName(TEXT("ik_foot_l")); UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Configuration|Anim Graph - Foot IK") - FName IkFootR_BoneName = NAME_ik_foot_r; + FName IkFootR_BoneName = FName(TEXT("ik_foot_r")); private: FTimerHandle OnPivotTimer; @@ -321,5 +319,5 @@ class ALSV4_CPP_API UALSCharacterAnimInstance : public UAnimInstance bool bCanPlayDynamicTransition = true; UPROPERTY() - UALSDebugComponent* DebugComponent = nullptr; + UALSDebugComponent* ALSDebugComponent = nullptr; }; diff --git a/Source/ALSV4_CPP/Public/Components/ALSMantleComponent.h b/Source/ALSV4_CPP/Public/Components/ALSMantleComponent.h index f275c670..949a62ad 100644 --- a/Source/ALSV4_CPP/Public/Components/ALSMantleComponent.h +++ b/Source/ALSV4_CPP/Public/Components/ALSMantleComponent.h @@ -114,5 +114,5 @@ class ALSV4_CPP_API UALSMantleComponent : public UActorComponent AALSBaseCharacter* OwnerCharacter; UPROPERTY() - UALSDebugComponent* DebugComponent = nullptr; + UALSDebugComponent* ALSDebugComponent = nullptr; }; From 281cc15895ff583fe9a5248f7a955fa577d94686 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Do=C4=9Fa=20Can=20Yan=C4=B1ko=C4=9Flu?= Date: Wed, 10 Nov 2021 00:08:26 +0300 Subject: [PATCH 2/2] Bump version to 4.21.2 --- ALSV4_CPP.uplugin | 2 +- .../Blueprints/UI/ALS_HUD.uasset | Bin 713993 -> 713997 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/ALSV4_CPP.uplugin b/ALSV4_CPP.uplugin index a68ab147..a5d21654 100644 --- a/ALSV4_CPP.uplugin +++ b/ALSV4_CPP.uplugin @@ -1,7 +1,7 @@ { "FileVersion": 3, "Version": 1, - "VersionName": "4.21", + "VersionName": "4.21.2", "FriendlyName": "Advanced Locomotion System Community", "Description": "Performance optimized community version of LongmireLocomotion's Advanced Locomotion System V4", "Category": "Animation", diff --git a/Content/AdvancedLocomotionV4/Blueprints/UI/ALS_HUD.uasset b/Content/AdvancedLocomotionV4/Blueprints/UI/ALS_HUD.uasset index a2602b6a0a5fb95181661ad61be246c2666c19a7..ff58341d29287d06bfa3bab52df029419317d8c7 100644 GIT binary patch delta 5178 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 TxcUDjQb_zRyJ~Dj`o#YLp2!r} delta 5344 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