Add Crouch functionality

This commit is contained in:
baz 2024-01-04 20:31:44 +00:00
parent 08fbe9dbe1
commit 283b536242
4 changed files with 64 additions and 10 deletions

View File

@ -5,6 +5,11 @@
#include <GameFramework/Character.h>
UNakatomiCMC::UNakatomiCMC(): Safe_bWantsToSprint(false)
{
NavAgentProps.bCanCrouch = true;
}
// Checks if we can combine the NewMove with the current move to save on data.
// If all the data in a saved move is identical, if true, we cam tell the server to run the existing move instead.
bool UNakatomiCMC::FSavedMove_Nakatomi::CanCombineWith(const FSavedMovePtr& NewMove, ACharacter* InCharacter,
@ -83,10 +88,6 @@ FNetworkPredictionData_Client* UNakatomiCMC::GetPredictionData_Client() const
return ClientPredictionData;
}
UNakatomiCMC::UNakatomiCMC(): Safe_bWantsToSprint(false)
{
}
void UNakatomiCMC::UpdateFromCompressedFlags(uint8 Flags)
{
Super::UpdateFromCompressedFlags(Flags);
@ -120,3 +121,13 @@ void UNakatomiCMC::DisableSprint()
{
Safe_bWantsToSprint = false;
}
void UNakatomiCMC::EnableCrouch()
{
bWantsToCrouch = true;
}
void UNakatomiCMC::DisableCrouch()
{
bWantsToCrouch = false;
}

View File

@ -57,4 +57,10 @@ public:
UFUNCTION(BlueprintCallable)
void DisableSprint();
UFUNCTION(BlueprintCallable)
void EnableCrouch();
UFUNCTION(BlueprintCallable)
void DisableCrouch();
};

View File

@ -187,6 +187,12 @@ void APlayerCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputCom
{
Input->BindAction(PauseAction, ETriggerEvent::Completed, this, &APlayerCharacter::PauseCallback);
}
if (CrouchAction)
{
Input->BindAction(CrouchAction, ETriggerEvent::Started, this, &APlayerCharacter::BeginCrouchCallback);
Input->BindAction(CrouchAction, ETriggerEvent::Completed, this, &APlayerCharacter::EndCrouchCallback);
}
}
}
@ -268,17 +274,21 @@ void APlayerCharacter::QuitCallback(const FInputActionInstance& Instance)
void APlayerCharacter::SetSprintingCallback(const FInputActionInstance& Instance)
{
if (NakatomiCMC)
UNakatomiCMC* cmc = GetCharacterMovementComponent();
if (cmc)
{
NakatomiCMC->EnableSprint();
cmc->EnableSprint();
}
}
void APlayerCharacter::SetWalkingCallback(const FInputActionInstance& Instance)
{
if (NakatomiCMC)
UNakatomiCMC* cmc = GetCharacterMovementComponent();
if (cmc)
{
NakatomiCMC->DisableSprint();
cmc->DisableSprint();
}
}
@ -536,6 +546,26 @@ void APlayerCharacter::PauseCallback(const FInputActionInstance& Instance)
}
}
void APlayerCharacter::BeginCrouchCallback(const FInputActionInstance& Instance)
{
UNakatomiCMC* cmc = GetCharacterMovementComponent();
if (cmc)
{
cmc->EnableCrouch();
}
}
void APlayerCharacter::EndCrouchCallback(const FInputActionInstance& Instance)
{
UNakatomiCMC* cmc = GetCharacterMovementComponent();
if (cmc)
{
cmc->DisableCrouch();
}
}
void APlayerCharacter::OnFire()
{
if (!IsFiring || CurrentWeapon->GetAmmoCount() == 0)

View File

@ -65,6 +65,9 @@ public:
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite)
UInputAction* AimDownSightsAction;
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite)
UInputAction* CrouchAction;
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite)
TSoftObjectPtr<UInputMappingContext> InputMappingContext;
@ -175,6 +178,10 @@ public:
void PauseCallback(const FInputActionInstance& Instance);
void BeginCrouchCallback(const FInputActionInstance& Instance);
void EndCrouchCallback(const FInputActionInstance& Instance);
virtual void OnFire() override;
void WeaponCooldownHandler();