80 lines
2.0 KiB
C#
80 lines
2.0 KiB
C#
/*
|
|
* Author: ariel oliveira [o.arielg@gmail.com]
|
|
*/
|
|
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
public class HealthBarController : MonoBehaviour
|
|
{
|
|
private GameObject[] heartContainers;
|
|
private Image[] heartFills;
|
|
|
|
public Transform heartsParent;
|
|
public GameObject heartContainerPrefab;
|
|
|
|
private void Start()
|
|
{
|
|
// Should I use lists? Maybe :)
|
|
heartContainers = new GameObject[(int)PlayerStats.Instance.MaxTotalHealth];
|
|
heartFills = new Image[(int)PlayerStats.Instance.MaxTotalHealth];
|
|
|
|
PlayerStats.Instance.onHealthChangedCallback += UpdateHeartsHUD;
|
|
InstantiateHeartContainers();
|
|
UpdateHeartsHUD();
|
|
}
|
|
|
|
public void UpdateHeartsHUD()
|
|
{
|
|
SetHeartContainers();
|
|
SetFilledHearts();
|
|
}
|
|
|
|
void SetHeartContainers()
|
|
{
|
|
for (int i = 0; i < heartContainers.Length; i++)
|
|
{
|
|
if (i < PlayerStats.Instance.MaxHealth)
|
|
{
|
|
heartContainers[i].SetActive(true);
|
|
}
|
|
else
|
|
{
|
|
heartContainers[i].SetActive(false);
|
|
}
|
|
}
|
|
}
|
|
|
|
void SetFilledHearts()
|
|
{
|
|
for (int i = 0; i < heartFills.Length; i++)
|
|
{
|
|
if (i < PlayerStats.Instance.Health)
|
|
{
|
|
heartFills[i].fillAmount = 1;
|
|
}
|
|
else
|
|
{
|
|
heartFills[i].fillAmount = 0;
|
|
}
|
|
}
|
|
|
|
if (PlayerStats.Instance.Health % 1 != 0)
|
|
{
|
|
int lastPos = Mathf.FloorToInt(PlayerStats.Instance.Health);
|
|
heartFills[lastPos].fillAmount = PlayerStats.Instance.Health % 1;
|
|
}
|
|
}
|
|
|
|
void InstantiateHeartContainers()
|
|
{
|
|
for (int i = 0; i < PlayerStats.Instance.MaxTotalHealth; i++)
|
|
{
|
|
GameObject temp = Instantiate(heartContainerPrefab);
|
|
temp.transform.SetParent(heartsParent, false);
|
|
heartContainers[i] = temp;
|
|
heartFills[i] = temp.transform.Find("HeartFill").GetComponent<Image>();
|
|
}
|
|
}
|
|
}
|