Pink/Assets/Scripts/Mechanics/Health.cs

72 lines
1.6 KiB
C#
Raw Normal View History

2020-09-23 00:54:30 +01:00
using System;
using UnityEngine.Events;
using UnityEngine;
namespace Pink.Mechanics
{
public class Health : MonoBehaviour
{
[Min(0)]
2020-09-23 00:54:30 +01:00
public float MaxHealth = 10f;
[Header("Events")]
[Space]
2020-09-23 00:54:30 +01:00
public UnityEvent WasHurt;
public UnityEvent WasHealed;
public UnityEvent WasKilled;
2020-09-23 00:54:30 +01:00
private float currentHealth;
public float CurrentHealth {
2020-09-23 00:54:30 +01:00
get => currentHealth;
set => currentHealth = Math.Min(
Math.Max(0f, value),
MaxHealth);
}
public bool IsDead => CurrentHealth == 0;
public bool IsAlive => CurrentHealth > 0;
2020-09-23 00:54:30 +01:00
// Start is called before the first frame update
void Start()
{
CurrentHealth = MaxHealth;
}
public bool Hurt(float decrement)
{
if (IsAlive)
{
CurrentHealth -= decrement;
WasHurt.Invoke();
if (IsDead)
WasKilled.Invoke();
}
return IsAlive;
}
public bool Hurt()
{
return Hurt(MaxHealth / 5);
2020-09-23 00:54:30 +01:00
}
public bool Heal(float increment = 1)
2020-09-23 00:54:30 +01:00
{
CurrentHealth += increment;
WasHealed.Invoke();
return CurrentHealth == MaxHealth;
}
2020-10-01 18:11:43 +01:00
public void Kill()
{
if (IsAlive)
{
Hurt(MaxHealth);
}
}
public void Reset()
{
currentHealth = MaxHealth;
}
2020-09-23 00:54:30 +01:00
}
}