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

98 lines
3.0 KiB
C#
Raw Normal View History

2024-06-03 18:26:03 +00:00
using System.Collections.Generic;
2024-10-10 05:44:37 +00:00
using BlueWater.Tycoons;
2024-06-03 18:26:03 +00:00
using Sirenix.OdinInspector;
using UnityEngine;
namespace BlueWater.Uis
{
public class PlayerHealthPointUi : MonoBehaviour
{
[SerializeField, Required]
private Transform _healthPointLayout;
[SerializeField, Required]
2024-11-07 09:13:54 +00:00
private HealthPoint _healthPointPrefab;
2024-06-03 18:26:03 +00:00
[SerializeField, Range(1, 10)]
private int _maxHeartCount = 2;
[SerializeField]
2024-11-07 09:13:54 +00:00
private List<HealthPoint> _healthPoints = new();
2024-06-03 18:26:03 +00:00
2024-11-07 09:13:54 +00:00
private int _maxHealth;
2024-06-03 18:26:03 +00:00
2024-11-07 09:13:54 +00:00
private void Awake()
2024-09-23 02:00:21 +00:00
{
EventManager.OnMaxHealthChanged += SetMaxHealthPoint;
EventManager.OnHealthChanged += SetCurrentHealthPoint;
2024-11-07 09:13:54 +00:00
InitializeHealthPoint();
2024-09-23 02:00:21 +00:00
}
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);
}
2024-11-07 09:13:54 +00:00
_healthPoints = new List<HealthPoint>(_maxHeartCount);
2024-06-03 18:26:03 +00:00
for (var i = 0; i < _maxHeartCount; i++)
{
2024-11-07 09:13:54 +00:00
var newHeart = Instantiate(_healthPointPrefab, _healthPointLayout);
_healthPoints.Add(newHeart);
2024-06-03 18:26:03 +00:00
}
}
2024-10-10 05:44:37 +00:00
public void SetMaxHealthPoint(int previousMaxHealthPoint, int changedMaxHealthPoint)
2024-09-23 02:00:21 +00:00
{
2024-11-07 09:13:54 +00:00
_maxHealth = changedMaxHealthPoint;
var addedMaxHealthPoint = _maxHealth - previousMaxHealthPoint;
// _maxHeartCount = Mathf.CeilToInt(changedMaxHealthPoint / 2);
2024-09-23 02:00:21 +00:00
InitializeHealthPoint();
2024-10-28 05:09:06 +00:00
TycoonManager.Instance.TycoonStatus.CurrentPlayerHealth += addedMaxHealthPoint;
2024-09-23 02:00:21 +00:00
}
2024-06-03 18:26:03 +00:00
public void SetCurrentHealthPoint(int changedHealthPoint)
{
var fullHearts = changedHealthPoint / 2;
var existHalfHeart = changedHealthPoint % 2 != 0;
2024-11-07 09:13:54 +00:00
var activeHeart = Mathf.CeilToInt(_maxHealth / 2f);
2024-06-03 18:26:03 +00:00
2024-11-07 09:13:54 +00:00
for (var i = 0; i < _healthPoints.Count; i++)
2024-06-03 18:26:03 +00:00
{
2024-11-07 09:13:54 +00:00
if (i >= activeHeart)
{
_healthPoints[i].Lock();
continue;
}
2024-06-03 18:26:03 +00:00
if (i < fullHearts)
{
2024-11-07 09:13:54 +00:00
_healthPoints[i].SetHeart(HealthHeart.Full);
2024-06-03 18:26:03 +00:00
}
else if (i == fullHearts && existHalfHeart)
{
2024-11-07 09:13:54 +00:00
_healthPoints[i].SetHeart(HealthHeart.Half);
2024-06-03 18:26:03 +00:00
}
else
{
2024-11-07 09:13:54 +00:00
_healthPoints[i].SetHeart(HealthHeart.Empty);
2024-06-03 18:26:03 +00:00
}
}
}
}
}