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 (bCanFire)
|
||||||
|
|
||||||
if (bFireButtonPressed)
|
|
||||||
{
|
{
|
||||||
FHitResult HitResult;
|
bCanFire = false;
|
||||||
TraceUnderCrosshairs(HitResult);
|
ServerFire(HitTarget);
|
||||||
ServerFire(HitResult.ImpactPoint);
|
|
||||||
|
|
||||||
if (EquippedWeapon)
|
if (EquippedWeapon)
|
||||||
{
|
{
|
||||||
CrosshairShootingFactor = 0.75f;
|
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)
|
void UCombatComponent::EquipWeapon(AWeapon* WeaponToEquip)
|
||||||
{
|
{
|
||||||
if (Character == nullptr || WeaponToEquip == nullptr) return;
|
if (Character == nullptr || WeaponToEquip == nullptr) return;
|
||||||
|
|
|
@ -32,6 +32,7 @@ protected:
|
||||||
|
|
||||||
UFUNCTION()
|
UFUNCTION()
|
||||||
void OnRep_EquippedWeapon();
|
void OnRep_EquippedWeapon();
|
||||||
|
void Fire();
|
||||||
|
|
||||||
void FireButtonPressed(bool bPressed);
|
void FireButtonPressed(bool bPressed);
|
||||||
|
|
||||||
|
@ -87,4 +88,11 @@ private:
|
||||||
void InterpFOV(float DeltaTime);
|
void InterpFOV(float DeltaTime);
|
||||||
|
|
||||||
FVector HitTarget;
|
FVector HitTarget;
|
||||||
|
|
||||||
|
// Automatic fire
|
||||||
|
FTimerHandle FireTimer;
|
||||||
|
bool bCanFire = true;
|
||||||
|
|
||||||
|
void StartFireTimer();
|
||||||
|
void FireTimerFinished();
|
||||||
};
|
};
|
||||||
|
|
|
@ -50,6 +50,14 @@ public:
|
||||||
|
|
||||||
UPROPERTY(EditAnywhere)
|
UPROPERTY(EditAnywhere)
|
||||||
float ZoomInterpSpeed = 20.f;
|
float ZoomInterpSpeed = 20.f;
|
||||||
|
|
||||||
|
// Automatic fire
|
||||||
|
|
||||||
|
UPROPERTY(EditAnywhere, Category = Combat)
|
||||||
|
bool bAutomatic = true;
|
||||||
|
|
||||||
|
UPROPERTY(EditAnywhere, Category = Combat)
|
||||||
|
float FireDelay = .15f;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void BeginPlay() override;
|
virtual void BeginPlay() override;
|
||||||
|
|
Loading…
Reference in New Issue