From 76289d97e471544bd39de5a6518f81119fc33f6d Mon Sep 17 00:00:00 2001 From: Kingsmedia Date: Fri, 6 May 2022 22:54:23 +0200 Subject: [PATCH] 91 - Automatic Fire --- .../Blueprints/Weapon/BP_AssaultRifle.uasset | Bin 31919 -> 31983 bytes Content/Maps/BlasterMap.umap | Bin 1328743 -> 1328743 bytes Source/Blaster/Components/CombatComponent.cpp | 72 ++++++++++++------ Source/Blaster/Components/CombatComponent.h | 8 ++ Source/Blaster/Weapon/Weapon.h | 8 ++ 5 files changed, 66 insertions(+), 22 deletions(-) diff --git a/Content/Blueprints/Weapon/BP_AssaultRifle.uasset b/Content/Blueprints/Weapon/BP_AssaultRifle.uasset index 6d0a000e094817925aefcc4cdf703918b56c60db..dd3fde496eb7627fe2968fceee0a978efd49e0e1 100644 GIT binary patch delta 9167 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 diff --git a/Content/Maps/BlasterMap.umap b/Content/Maps/BlasterMap.umap index 659ab9cfd0172c6efbeb2b499b360d99afa8729d..fe26872405503054ade12cca1f34c5959a1d644c 100644 GIT binary patch delta 266 zcmaFf6ZpI*aKk%Bffo%AZyK(0^jLRv&$$W(uBXla7`OjpWHi{pW@KSxqGvkYWEZ0o zo4KL6nV!M)nq7>FT&B8)mU^b9dL|a_%XcvXF%u9o12GE_vjQ<25VHd@2M}`tF&7YX z12NC`<-2$*^97z;2CQCMw%l*uSDrA5?3%#o8#!1crXN_!tvG#y6r*5!l@=cm^8>K} z5QF$aKrFnyN=t;3NpjP{L;wFTU*^C70wJ>wq=CStMu*wc6L+zQPd7*wP-jYWn66+T mVmrO=B?s5^4O$|`(*?L$#HQcZ7wMQjO<&|9nAi?ti2(rXg=pje delta 278 zcmaFf6ZpI*aKk%BfvJw)x)rk@yG&AciP?7Kx=Zsv#_j(Y84Y%@nVXv%=~+%U*~RF@ zW@Kb!u4gvAW*4I(mx->Cfu4zpo}pR$@?DHT%ml>DK+FQftU$~L#Oy%K0mPg@%mu{U zK+Lm!`7Ykde1Xs3R<^Jm$@7}sYEZcMk#XnrjT|fz(-X9~6{l~IViatz(&7VRejpYA zVh~>lh=sRTX^C($NxB=@tarV?)*<7a`up0j2?sLm_MDrvwAW$w^u%2(;?oV11*G{J z4lH0-Jix%f;P2m=d|G{|7*7}AW)YiyUtgqS`ZRr!i(q0qh$RL9 DPa18s diff --git a/Source/Blaster/Components/CombatComponent.cpp b/Source/Blaster/Components/CombatComponent.cpp index ca2039d..729a38f 100644 --- a/Source/Blaster/Components/CombatComponent.cpp +++ b/Source/Blaster/Components/CombatComponent.cpp @@ -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; diff --git a/Source/Blaster/Components/CombatComponent.h b/Source/Blaster/Components/CombatComponent.h index 51a0b12..c2387cc 100644 --- a/Source/Blaster/Components/CombatComponent.h +++ b/Source/Blaster/Components/CombatComponent.h @@ -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(); }; diff --git a/Source/Blaster/Weapon/Weapon.h b/Source/Blaster/Weapon/Weapon.h index 5678664..2222918 100644 --- a/Source/Blaster/Weapon/Weapon.h +++ b/Source/Blaster/Weapon/Weapon.h @@ -50,6 +50,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;