using Assets.Scripts.Entities.Attack; using UnityEngine; public abstract class Mob : Entity { protected readonly int maxHP; protected int currentHP; protected bool isDead; protected IAttack attack; /// /// Creates a new Mob instance with the given HP. /// /// public Mob(int maxHP) { this.maxHP = maxHP; currentHP = maxHP; isDead = false; } public void SetAttack(IAttack attack) { this.attack = attack; } /// /// Inflicts damage to this mob. /// /// public void InflictDamage(int damage) { Debug.Log(tag + " received " + damage + " Damage"); currentHP -= damage; if ( !isDead && currentHP <= 0 ) { isDead = true; Death(); } else if (! isDead) { if (this is Player) GameController.instance.GetAudioControl().SfxPlay(AudioControl.Sfx.hitplayer); else GameController.instance.GetAudioControl().SfxPlay(AudioControl.Sfx.hitmob); } } /// /// This is called when a mob dies. /// protected virtual void Death() { if ( objective != null ) objective.RemoveEntity(this); GameController.instance.GetAudioControl().SfxPlay(AudioControl.Sfx.explosion); ParticleSystem[] pss = GetComponentsInChildren(true); foreach ( ParticleSystem ps in pss ) { if ( ps.gameObject.name == "despawn" ) { GameObject tmp = Instantiate(ps.gameObject); tmp.transform.position = transform.position; tmp.SetActive(true); } } Destroy(gameObject); } /// /// Heals the mob. /// /// public void Heal(int healAmount) { if ( !isDead ) currentHP = ( currentHP + healAmount > currentHP ) ? maxHP : currentHP + healAmount; } /// /// Gets the current HP. /// /// public int GetHealth() { return currentHP; } /// /// Gets the maximum HP. /// /// public int GetMaxHealth() { return maxHP; } }