CapersProject/Assets/02.Scripts/Ui/Combat/PlayerHealthPointUi.cs

101 lines
2.8 KiB
C#
Raw Normal View History

2024-09-23 02:00:21 +00:00
using System;
2024-06-03 18:26:03 +00:00
using System.Collections.Generic;
using Sirenix.OdinInspector;
using UnityEngine;
using UnityEngine.UI;
namespace BlueWater.Uis
{
public class PlayerHealthPointUi : MonoBehaviour
{
[SerializeField, Required]
private Transform _healthPointLayout;
[SerializeField, Required]
private GameObject _healthPointPrefab;
[SerializeField, Range(1, 10)]
private int _maxHeartCount = 2;
[SerializeField]
private List<Image> _healthPointImageList = new();
// 이미지 리소스
[Title("이미지 리소스")]
[SerializeField]
private Sprite _fullHeart;
[SerializeField]
private Sprite _halfHeart;
[SerializeField]
private Sprite _emptyHeart;
private void Awake()
{
InitializeHealthPoint();
}
2024-09-23 02:00:21 +00:00
private void Start()
{
EventManager.OnMaxHealthChanged += SetMaxHealthPoint;
EventManager.OnHealthChanged += SetCurrentHealthPoint;
}
private void OnDestroy()
{
EventManager.OnMaxHealthChanged -= SetMaxHealthPoint;
EventManager.OnHealthChanged -= SetCurrentHealthPoint;
}
2024-06-03 18:26:03 +00:00
[Button("컴포넌트 초기화")]
private void InitializeComponents()
{
_healthPointLayout = transform.Find("HealthPointLayout");
}
private void InitializeHealthPoint()
{
foreach (Transform element in _healthPointLayout)
{
Destroy(element.gameObject);
}
_healthPointImageList = new List<Image>(_maxHeartCount);
for (var i = 0; i < _maxHeartCount; i++)
{
var newHeart = Instantiate(_healthPointPrefab, _healthPointLayout).GetComponent<Image>();
_healthPointImageList.Add(newHeart);
}
}
2024-09-23 02:00:21 +00:00
public void SetMaxHealthPoint(int changedMaxHealthPoint)
{
_maxHeartCount = changedMaxHealthPoint;
InitializeHealthPoint();
}
2024-06-03 18:26:03 +00:00
public void SetCurrentHealthPoint(int changedHealthPoint)
{
var fullHearts = changedHealthPoint / 2;
var existHalfHeart = changedHealthPoint % 2 != 0;
for (var i = 0; i < _healthPointImageList.Count; i++)
{
if (i < fullHearts)
{
_healthPointImageList[i].sprite = _fullHeart;
}
else if (i == fullHearts && existHalfHeart)
{
_healthPointImageList[i].sprite = _halfHeart;
}
else
{
_healthPointImageList[i].sprite = _emptyHeart;
}
}
}
}
}