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;
}
}