67 lines
1.9 KiB
C#
67 lines
1.9 KiB
C#
|
using System;
|
||
|
using System.Collections.Generic;
|
||
|
using Sirenix.OdinInspector;
|
||
|
using UnityEngine;
|
||
|
using UnityEngine.UI;
|
||
|
|
||
|
// ReSharper disable once CheckNamespace
|
||
|
namespace BlueWaterProject
|
||
|
{
|
||
|
public class HeartHpUi : MonoBehaviour
|
||
|
{
|
||
|
[SerializeField, Required] private Transform heartsLayout;
|
||
|
[SerializeField, Required] private GameObject heartPrefab;
|
||
|
|
||
|
[Range(1, 10)]
|
||
|
[SerializeField] private int maxHeartCount = 5;
|
||
|
[SerializeField] private List<Image> heartImageList = new();
|
||
|
|
||
|
// Resources
|
||
|
[SerializeField] private Sprite fullHeart;
|
||
|
[SerializeField] private Sprite halfHeart;
|
||
|
[SerializeField] private Sprite emptyHeart;
|
||
|
|
||
|
private void Awake()
|
||
|
{
|
||
|
InitHeart();
|
||
|
}
|
||
|
|
||
|
private void InitHeart()
|
||
|
{
|
||
|
foreach (Transform element in heartsLayout)
|
||
|
{
|
||
|
Destroy(element.gameObject);
|
||
|
}
|
||
|
|
||
|
heartImageList = new List<Image>(maxHeartCount);
|
||
|
|
||
|
for (var i = 0; i < maxHeartCount; i++)
|
||
|
{
|
||
|
var newHeart = Instantiate(heartPrefab, heartsLayout).GetComponent<Image>();
|
||
|
heartImageList.Add(newHeart);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void SetCurrentHp(int currentHp)
|
||
|
{
|
||
|
var fullHearts = currentHp / 2;
|
||
|
var existHalfHeart = currentHp % 2 != 0;
|
||
|
|
||
|
for (var i = 0; i < heartImageList.Count; i++)
|
||
|
{
|
||
|
if (i < fullHearts)
|
||
|
{
|
||
|
heartImageList[i].sprite = fullHeart;
|
||
|
}
|
||
|
else if (i == fullHearts && existHalfHeart)
|
||
|
{
|
||
|
heartImageList[i].sprite = halfHeart;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
heartImageList[i].sprite = emptyHeart;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|