91 - Automatic Fire
This commit is contained in:
parent
3a5ca822aa
commit
76289d97e4
Binary file not shown.
Binary file not shown.
|
@ -173,20 +173,63 @@ void UCombatComponent::OnRep_EquippedWeapon()
|
|||
}
|
||||
}
|
||||
|
||||
void UCombatComponent::FireButtonPressed(bool bPressed)
|
||||
void UCombatComponent::Fire()
|
||||
{
|
||||
bFireButtonPressed = bPressed;
|
||||
|
||||
if (bFireButtonPressed)
|
||||
if (bCanFire)
|
||||
{
|
||||
FHitResult HitResult;
|
||||
TraceUnderCrosshairs(HitResult);
|
||||
ServerFire(HitResult.ImpactPoint);
|
||||
bCanFire = false;
|
||||
ServerFire(HitTarget);
|
||||
|
||||
if (EquippedWeapon)
|
||||
{
|
||||
CrosshairShootingFactor = 0.75f;
|
||||
}
|
||||
|
||||
StartFireTimer();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void UCombatComponent::FireButtonPressed(bool bPressed)
|
||||
{
|
||||
bFireButtonPressed = bPressed;
|
||||
|
||||
if (bFireButtonPressed && EquippedWeapon)
|
||||
{
|
||||
Fire();
|
||||
}
|
||||
}
|
||||
|
||||
void UCombatComponent::StartFireTimer()
|
||||
{
|
||||
if (EquippedWeapon == nullptr || Character == nullptr) return;
|
||||
|
||||
Character->GetWorldTimerManager().SetTimer(FireTimer, this, &UCombatComponent::FireTimerFinished, EquippedWeapon->FireDelay);
|
||||
}
|
||||
|
||||
void UCombatComponent::FireTimerFinished()
|
||||
{
|
||||
if (EquippedWeapon == nullptr) return;
|
||||
|
||||
bCanFire = true;
|
||||
if (bFireButtonPressed && EquippedWeapon->bAutomatic)
|
||||
{
|
||||
Fire();
|
||||
}
|
||||
}
|
||||
|
||||
void UCombatComponent::ServerFire_Implementation(const FVector_NetQuantize& TraceHitTarget)
|
||||
{
|
||||
MulticastFire(TraceHitTarget);
|
||||
}
|
||||
|
||||
void UCombatComponent::MulticastFire_Implementation(const FVector_NetQuantize& TraceHitTarget)
|
||||
{
|
||||
if (EquippedWeapon == nullptr) return;
|
||||
if (Character)
|
||||
{
|
||||
Character->PlayFireMontage(bAiming);
|
||||
EquippedWeapon->Fire(TraceHitTarget);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -237,21 +280,6 @@ void UCombatComponent::TraceUnderCrosshairs(FHitResult& TraceHitResult)
|
|||
}
|
||||
}
|
||||
|
||||
void UCombatComponent::ServerFire_Implementation(const FVector_NetQuantize& TraceHitTarget)
|
||||
{
|
||||
MulticastFire(TraceHitTarget);
|
||||
}
|
||||
|
||||
void UCombatComponent::MulticastFire_Implementation(const FVector_NetQuantize& TraceHitTarget)
|
||||
{
|
||||
if (EquippedWeapon == nullptr) return;
|
||||
if (Character)
|
||||
{
|
||||
Character->PlayFireMontage(bAiming);
|
||||
EquippedWeapon->Fire(TraceHitTarget);
|
||||
}
|
||||
}
|
||||
|
||||
void UCombatComponent::EquipWeapon(AWeapon* WeaponToEquip)
|
||||
{
|
||||
if (Character == nullptr || WeaponToEquip == nullptr) return;
|
||||
|
|
|
@ -32,6 +32,7 @@ protected:
|
|||
|
||||
UFUNCTION()
|
||||
void OnRep_EquippedWeapon();
|
||||
void Fire();
|
||||
|
||||
void FireButtonPressed(bool bPressed);
|
||||
|
||||
|
@ -87,4 +88,11 @@ private:
|
|||
void InterpFOV(float DeltaTime);
|
||||
|
||||
FVector HitTarget;
|
||||
|
||||
// Automatic fire
|
||||
FTimerHandle FireTimer;
|
||||
bool bCanFire = true;
|
||||
|
||||
void StartFireTimer();
|
||||
void FireTimerFinished();
|
||||
};
|
||||
|
|
|
@ -51,6 +51,14 @@ public:
|
|||
UPROPERTY(EditAnywhere)
|
||||
float ZoomInterpSpeed = 20.f;
|
||||
|
||||
// Automatic fire
|
||||
|
||||
UPROPERTY(EditAnywhere, Category = Combat)
|
||||
bool bAutomatic = true;
|
||||
|
||||
UPROPERTY(EditAnywhere, Category = Combat)
|
||||
float FireDelay = .15f;
|
||||
|
||||
protected:
|
||||
virtual void BeginPlay() override;
|
||||
|
||||
|
|
Loading…
Reference in New Issue