Hark-the-Moon-Men-Cometh / Assets / Scripts / Creatures / Creature.cs
Creature.cs
Raw
using UnityEngine;

public abstract class Creature : MonoBehaviour, IHarmable
{
    public float i_maxHP 
    { 
        get => m_maxHealth; 
        set => m_maxHealth = value; 
    }
    public float i_currentHP
    {
        get => m_currentHealth;
        set => m_currentHealth = value;
    }

    [SerializeField]
    protected float m_maxHealth;
    [SerializeField]
    protected float m_currentHealth;

    protected bool m_isTakingDamage;
    public bool m_isInvulnerable;

    public Animator r_animator;
    //the base controller prevents animator breaking if no weapon is equipped
    public AnimatorOverrideController m_baseAnimatorController;

    protected virtual void Awake()
    {
        m_currentHealth = m_maxHealth;
        m_isTakingDamage = false;
        m_isInvulnerable = false;
    }

    protected virtual void Start()
    {
        ResetAnimationController();
    }

    protected virtual void Update()
    {
        UpdateUIElements();
    }    

    protected virtual void FixedUpdate()
    {
        HandleWeapon();
        DoAction();
        Move();
    }

    protected abstract void UpdateUIElements();

    protected abstract void HandleWeapon();
    protected abstract void DoAction();
    protected abstract void Move();

    public abstract void Die();
    public virtual void Heal(float hitPoints)
    {
        m_currentHealth = Mathf.Min(m_currentHealth + hitPoints, m_maxHealth);
    }

    public virtual void TakeDamage(float damage)
    {
        m_isTakingDamage = true;
        m_currentHealth -= damage;
        if(m_currentHealth <= 0)
        {
            Die();
        }
    }

    public virtual void StopTakingDamage()
    {
        m_isTakingDamage = false;
    }

    protected void ResetAnimationController()
    {
        r_animator.runtimeAnimatorController = m_baseAnimatorController;
    }
}