Add functionality to change movement speed depending on status
This commit is contained in:
parent
9e7417eb59
commit
3d4ef7e3c0
|
@ -242,12 +242,16 @@ void APlayerCharacter::QuitCallback(const FInputActionInstance& Instance)
|
|||
|
||||
void APlayerCharacter::SetSprintingCallback(const FInputActionInstance& Instance)
|
||||
{
|
||||
GetCharacterMovement()->MaxWalkSpeed = DefaultMovementSpeed * SprintSpeedMultiplier;
|
||||
IsSpriting = true;
|
||||
|
||||
SetMovementSpeed();
|
||||
}
|
||||
|
||||
void APlayerCharacter::SetWalkingCallback(const FInputActionInstance& Instance)
|
||||
{
|
||||
GetCharacterMovement()->MaxWalkSpeed = DefaultMovementSpeed;
|
||||
IsSpriting = false;
|
||||
|
||||
SetMovementSpeed();
|
||||
}
|
||||
|
||||
void APlayerCharacter::CalculateHits(TArray<FHitResult>* hits)
|
||||
|
@ -375,6 +379,22 @@ void APlayerCharacter::OnDeath()
|
|||
ClearAllTimers();
|
||||
}
|
||||
|
||||
void APlayerCharacter::SetMovementSpeed()
|
||||
{
|
||||
if (IsADS)
|
||||
{
|
||||
GetCharacterMovement()->MaxWalkSpeed = DefaultMovementSpeed * ADSSpeedMultiplier;
|
||||
}
|
||||
else if (IsSpriting)
|
||||
{
|
||||
GetCharacterMovement()->MaxWalkSpeed = DefaultMovementSpeed * SprintSpeedMultiplier;
|
||||
}
|
||||
else
|
||||
{
|
||||
GetCharacterMovement()->MaxWalkSpeed = DefaultMovementSpeed;
|
||||
}
|
||||
}
|
||||
|
||||
void APlayerCharacter::WeaponSwitchingCallback(const FInputActionInstance& Instance)
|
||||
{
|
||||
float value = Instance.GetValue().Get<float>();
|
||||
|
@ -391,6 +411,10 @@ void APlayerCharacter::WeaponSwitchingCallback(const FInputActionInstance& Insta
|
|||
|
||||
void APlayerCharacter::BeginAimDownSightsCallback(const FInputActionInstance& Instance)
|
||||
{
|
||||
IsADS = true;
|
||||
|
||||
SetMovementSpeed();
|
||||
|
||||
FLatentActionInfo LatentActionInfo;
|
||||
LatentActionInfo.CallbackTarget = this;
|
||||
CameraComponent->AttachToComponent(CameraADSSpringArmComponent, FAttachmentTransformRules::KeepWorldTransform,
|
||||
|
@ -403,6 +427,10 @@ void APlayerCharacter::BeginAimDownSightsCallback(const FInputActionInstance& In
|
|||
|
||||
void APlayerCharacter::EndAimDownSightsCallback(const FInputActionInstance& Instance)
|
||||
{
|
||||
IsADS = false;
|
||||
|
||||
SetMovementSpeed();
|
||||
|
||||
FLatentActionInfo LatentActionInfo;
|
||||
LatentActionInfo.CallbackTarget = this;
|
||||
CameraComponent->AttachToComponent(CameraSpringArmComponent, FAttachmentTransformRules::KeepWorldTransform,
|
||||
|
|
|
@ -65,6 +65,9 @@ protected:
|
|||
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite)
|
||||
float SprintSpeedMultiplier = 2.0f;
|
||||
|
||||
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite)
|
||||
float ADSSpeedMultiplier = 0.5f;
|
||||
|
||||
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite)
|
||||
float CameraBlendTime = 0.1f;
|
||||
|
||||
|
@ -91,6 +94,10 @@ private:
|
|||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Meta = (AllowPrivateAccess = "true"))
|
||||
UAIPerceptionStimuliSourceComponent* PerceptionSource;
|
||||
|
||||
bool IsSpriting = false;
|
||||
|
||||
bool IsADS = false;
|
||||
|
||||
public:
|
||||
// Sets default values for this character's properties
|
||||
APlayerCharacter();
|
||||
|
@ -159,4 +166,6 @@ protected:
|
|||
virtual void OnDamaged() override;
|
||||
|
||||
virtual void OnDeath() override;
|
||||
|
||||
void SetMovementSpeed();
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue