using System; using UnityEngine; public class Health : MonoBehaviour { [SerializeField] private int maxHitPoint = 5; [SerializeField] private bool destroyOnDeath = true; private int currentHitPoint; public int CurrentHitPoint => currentHitPoint; public int MaxHitPoint => maxHitPoint; public bool IsDead => currentHitPoint <= 0; public event Action Changed; public event Action Died; private void Awake() { currentHitPoint = maxHitPoint; } private void Start() { Changed?.Invoke(currentHitPoint, maxHitPoint); } public void TakeDamage(int amount) { if (IsDead) { return; } currentHitPoint = Mathf.Max(0, currentHitPoint - amount); Changed?.Invoke(currentHitPoint, maxHitPoint); if (currentHitPoint == 0) { Died?.Invoke(); if (destroyOnDeath) { Destroy(gameObject); } } } public void Heal(int amount) { if (IsDead) { return; } currentHitPoint = Mathf.Min(maxHitPoint, currentHitPoint + amount); Changed?.Invoke(currentHitPoint, maxHitPoint); } }