AwesomeRunner/Assets/Scripts/UI/HealthBarHeartsUI.cs
VladimirPirozhenko 45b277e7d1 Initial commit
2022-08-07 07:31:16 +03:00

57 lines
1.9 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class HealthBarHeartsUI : MonoBehaviour
{
[SerializeField] private Health playerHealth;
[SerializeField] private Sprite heartSprite;
[SerializeField] private Sprite emptyHeartSprite;//Heart GameObject
[SerializeField] private Vector2 heartSize;
[SerializeField] private int gapBetweenHearts;
private List<Image> heartImages;
private void OnEnable()
{
playerHealth.OnHealthChanged += UpdateHealthBar;
}
private void OnDisable()
{
playerHealth.OnHealthChanged -= UpdateHealthBar;
}
private void Start()
{
heartImages = new List<Image>(playerHealth.MaxHealth);
for (int i = 0; i < playerHealth.MaxHealth; i++)
{
GameObject heartImageGO = new GameObject("HeartImage");
RectTransform trans = heartImageGO.AddComponent<RectTransform>();
trans.transform.SetParent(this.transform);
trans.localScale = Vector3.one;
trans.anchoredPosition = new Vector2(i * (heartSize.x + gapBetweenHearts) , 0f) ; //HorizontalLayout group
trans.sizeDelta = new Vector2(heartSize.x, heartSize.y);
Image image = heartImageGO.AddComponent<Image>();
image.sprite = heartSprite;
image.enabled = false;
heartImageGO.transform.SetParent(this.transform);
if (i < playerHealth.MaxHealth)
{
image.enabled = true;
}
heartImages.Add(image);
}
}
public void UpdateHealthBar(object sender,HealthArgs args)
{
for (int i = 0; i < args.CurrentLives; i++)
{
heartImages[i].sprite = heartSprite;
}
for (int i = args.CurrentLives; i < args.MaxLives; i++)
{
heartImages[i].sprite = emptyHeartSprite;
}
}
}