Compare commits
2 Commits
cf3cf65b06
...
ea2119913a
Author | SHA1 | Date |
---|---|---|
|
ea2119913a | |
|
6a49fa1812 |
|
@ -1,10 +1,17 @@
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
namespace GameDev.CoreSystems
|
namespace GameDev.CoreSystems
|
||||||
{
|
{
|
||||||
public interface IDamageable
|
public interface IDamageable
|
||||||
{
|
{
|
||||||
#region Methods
|
#region Methods
|
||||||
|
|
||||||
public void ModifyHealth(int healthChange);
|
/// <summary>
|
||||||
|
/// Modify the health of the damageable
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="healthChange">Amount of health change</param>
|
||||||
|
/// <param name="source">Source GameObject, used to modify stats of the source. Total kills, etc.</param>
|
||||||
|
public void ModifyHealth(int healthChange, GameObject source);
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,13 @@ namespace GameDev.CoreSystems
|
||||||
{
|
{
|
||||||
public interface IWeapon
|
public interface IWeapon
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// [s] Fire rate of the weapon
|
||||||
|
/// </summary>
|
||||||
public float FireRate { get; set; }
|
public float FireRate { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Weapon damage
|
||||||
|
/// </summary>
|
||||||
public int Damage { get; set; }
|
public int Damage { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -17,6 +17,11 @@ namespace GameDev.CoreSystems
|
||||||
|
|
||||||
public UnityEvent DeathEvent;
|
public UnityEvent DeathEvent;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Used to ensure only one damage dealer gets the kill score
|
||||||
|
/// </summary>
|
||||||
|
private bool _isAlreadyDead;
|
||||||
|
|
||||||
private void OnEnable()
|
private void OnEnable()
|
||||||
{
|
{
|
||||||
_activeDamageableRuntimeSet.Add(this);
|
_activeDamageableRuntimeSet.Add(this);
|
||||||
|
@ -29,13 +34,30 @@ namespace GameDev.CoreSystems
|
||||||
|
|
||||||
#region Methods
|
#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;
|
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");
|
print($"{transform.parent.parent.name} died");
|
||||||
DeathEvent.Invoke();
|
DeathEvent.Invoke();
|
||||||
|
|
|
@ -26,7 +26,8 @@ namespace GameDev.CoreSystems
|
||||||
{
|
{
|
||||||
_timeUntilFire -= Time.deltaTime;
|
_timeUntilFire -= Time.deltaTime;
|
||||||
|
|
||||||
if (!(_timeUntilFire <= 0)) return;
|
var reloading = _timeUntilFire > 0;
|
||||||
|
if (reloading) return;
|
||||||
|
|
||||||
var position = BarrelEndPoint.position;
|
var position = BarrelEndPoint.position;
|
||||||
var forward = BarrelEndPoint.forward;
|
var forward = BarrelEndPoint.forward;
|
||||||
|
@ -36,12 +37,9 @@ namespace GameDev.CoreSystems
|
||||||
{
|
{
|
||||||
if (hitInfo.transform.TryGetComponent(out Targetable target))
|
if (hitInfo.transform.TryGetComponent(out Targetable target))
|
||||||
{
|
{
|
||||||
target.Damageable.DeathEvent.AddListener(IncrementKillCount);
|
|
||||||
Debug.DrawRay(position, forward * Vector3.Distance(position, target.GetCenterPosition()),
|
Debug.DrawRay(position, forward * Vector3.Distance(position, target.GetCenterPosition()),
|
||||||
Color.red, 0.1f);
|
Color.red, 0.1f);
|
||||||
target.Damageable.ModifyHealth(-Damage);
|
target.Damageable.ModifyHealth(-Damage, gameObject);
|
||||||
DamageDealt += Damage;
|
|
||||||
target.Damageable.DeathEvent.RemoveListener(IncrementKillCount);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,7 +51,12 @@ namespace GameDev.CoreSystems
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void IncrementKillCount()
|
public void IncrementDamageDealt(int damage)
|
||||||
|
{
|
||||||
|
DamageDealt += damage;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void IncrementKillCount()
|
||||||
{
|
{
|
||||||
NumberOfKills += 1;
|
NumberOfKills += 1;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue