From 6a49fa181247d7c5f947419bad05df57ace410c0 Mon Sep 17 00:00:00 2001 From: Stedd Date: Tue, 15 Oct 2024 23:42:05 +0200 Subject: [PATCH] Changed how weapons count total damage dealt and kills --- Scripts/Damageable.cs | 28 +++++++++++++++++++++++++--- Scripts/Weapon.cs | 15 +++++++++------ 2 files changed, 34 insertions(+), 9 deletions(-) diff --git a/Scripts/Damageable.cs b/Scripts/Damageable.cs index 0d56dd9..a28db51 100644 --- a/Scripts/Damageable.cs +++ b/Scripts/Damageable.cs @@ -17,6 +17,11 @@ namespace GameDev.CoreSystems public UnityEvent DeathEvent; + /// + /// Used to ensure only one damage dealer gets the kill score + /// + private bool _isAlreadyDead; + private void OnEnable() { _activeDamageableRuntimeSet.Add(this); @@ -29,13 +34,30 @@ namespace GameDev.CoreSystems #region Methods - public void ModifyHealth(int healthChange) + public void ModifyHealth(int healthChange, GameObject source) { - if (IsInvulnerable) return; + var receivingDamage = healthChange < 0; + var receivingHealing = healthChange > 0; + + if (IsInvulnerable && receivingDamage) return; CurrentHealth += healthChange; - if (CurrentHealth >= 0) return; + source.TryGetComponent(out Weapon weapon); + + if (weapon != null && !_isAlreadyDead) + { + weapon.IncrementDamageDealt(-healthChange); + } + + if (CurrentHealth > 0 || _isAlreadyDead) return; + + _isAlreadyDead = true; + + if (weapon != null) + { + weapon.IncrementKillCount(); + } print($"{transform.parent.parent.name} died"); DeathEvent.Invoke(); diff --git a/Scripts/Weapon.cs b/Scripts/Weapon.cs index c470535..e671a4c 100644 --- a/Scripts/Weapon.cs +++ b/Scripts/Weapon.cs @@ -26,7 +26,8 @@ namespace GameDev.CoreSystems { _timeUntilFire -= Time.deltaTime; - if (!(_timeUntilFire <= 0)) return; + var reloading = _timeUntilFire > 0; + if (reloading) return; var position = BarrelEndPoint.position; var forward = BarrelEndPoint.forward; @@ -36,12 +37,9 @@ namespace GameDev.CoreSystems { if (hitInfo.transform.TryGetComponent(out Targetable target)) { - target.Damageable.DeathEvent.AddListener(IncrementKillCount); Debug.DrawRay(position, forward * Vector3.Distance(position, target.GetCenterPosition()), Color.red, 0.1f); - target.Damageable.ModifyHealth(-Damage); - DamageDealt += Damage; - target.Damageable.DeathEvent.RemoveListener(IncrementKillCount); + target.Damageable.ModifyHealth(-Damage, gameObject); } } @@ -53,7 +51,12 @@ namespace GameDev.CoreSystems } } - private void IncrementKillCount() + public void IncrementDamageDealt(int damage) + { + DamageDealt += damage; + } + + public void IncrementKillCount() { NumberOfKills += 1; }