68 lines
1.5 KiB
C#
68 lines
1.5 KiB
C#
/*
|
|
* Author: ariel oliveira [o.arielg@gmail.com]
|
|
*/
|
|
|
|
using UnityEngine;
|
|
|
|
public class PlayerStats : MonoBehaviour
|
|
{
|
|
public delegate void OnHealthChangedDelegate();
|
|
public OnHealthChangedDelegate onHealthChangedCallback;
|
|
|
|
#region Sigleton
|
|
private static PlayerStats instance;
|
|
public static PlayerStats Instance
|
|
{
|
|
get
|
|
{
|
|
if (instance == null)
|
|
instance = FindObjectOfType<PlayerStats>();
|
|
return instance;
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
[SerializeField]
|
|
private float health;
|
|
[SerializeField]
|
|
private float maxHealth;
|
|
[SerializeField]
|
|
private float maxTotalHealth;
|
|
|
|
public float Health { get { return health; } }
|
|
public float MaxHealth { get { return maxHealth; } }
|
|
public float MaxTotalHealth { get { return maxTotalHealth; } }
|
|
|
|
public void Heal(float health)
|
|
{
|
|
this.health += health;
|
|
ClampHealth();
|
|
}
|
|
|
|
public void TakeDamage(float dmg)
|
|
{
|
|
health -= dmg;
|
|
ClampHealth();
|
|
}
|
|
|
|
public void AddHealth()
|
|
{
|
|
if (maxHealth < maxTotalHealth)
|
|
{
|
|
maxHealth += 1;
|
|
health = maxHealth;
|
|
|
|
if (onHealthChangedCallback != null)
|
|
onHealthChangedCallback.Invoke();
|
|
}
|
|
}
|
|
|
|
void ClampHealth()
|
|
{
|
|
health = Mathf.Clamp(health, 0, maxHealth);
|
|
|
|
if (onHealthChangedCallback != null)
|
|
onHealthChangedCallback.Invoke();
|
|
}
|
|
}
|