101 lines
2.8 KiB
C#
101 lines
2.8 KiB
C#
using System;
|
|
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();
|
|
}
|
|
|
|
private void Start()
|
|
{
|
|
EventManager.OnMaxHealthChanged += SetMaxHealthPoint;
|
|
EventManager.OnHealthChanged += SetCurrentHealthPoint;
|
|
}
|
|
|
|
private void OnDestroy()
|
|
{
|
|
EventManager.OnMaxHealthChanged -= SetMaxHealthPoint;
|
|
EventManager.OnHealthChanged -= SetCurrentHealthPoint;
|
|
}
|
|
|
|
[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);
|
|
}
|
|
}
|
|
|
|
public void SetMaxHealthPoint(int changedMaxHealthPoint)
|
|
{
|
|
_maxHeartCount = changedMaxHealthPoint;
|
|
InitializeHealthPoint();
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |