CapersProject/Assets/02.Scripts/Ui/Combat/FieldBossHealthPointUi.cs
Nam Tae Gun 8cfa321479 #27 SandMole 스파인으로 변경 중
+ TransparentLit shadow 기능 추가
2024-06-23 18:38:19 +09:00

90 lines
2.5 KiB
C#

using System.Collections;
using Sirenix.OdinInspector;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
namespace BlueWater.Uis
{
public class FieldBossHealthPointUi : MonoBehaviour
{
[SerializeField, Required]
private Slider _slider;
[SerializeField, Required]
private TMP_Text _nameText;
[SerializeField, Required]
private Slider _damageEffectSlider;
[SerializeField]
private float _duration = 1f;
private Coroutine _damageEffectCoroutineInstance;
private bool _isInitialized;
[Button("컴포넌트 초기화")]
private void InitializeComponents()
{
_slider = GetComponent<Slider>();
_nameText = transform.Find("NameText").GetComponent<TMP_Text>();
_damageEffectSlider = transform.Find("Background/DamageEffectSlider").GetComponent<Slider>();
}
private void Awake()
{
SetActiveHpSlider(false);
}
public void SetBoss(int maxHp, string bossName)
{
if (!_slider || !_damageEffectSlider) return;
if (_damageEffectCoroutineInstance != null)
{
StopCoroutine(_damageEffectCoroutineInstance);
_damageEffectCoroutineInstance = null;
}
_slider.maxValue = maxHp;
_damageEffectSlider.maxValue = maxHp;
_slider.value = maxHp;
_damageEffectSlider.value = maxHp;
_nameText.text = _nameText ? bossName : null;
SetActiveHpSlider(true);
}
public void SetCurrentHealthPoint(int value)
{
if (!_slider || !_damageEffectSlider) return;
_damageEffectCoroutineInstance = StartCoroutine(DamageEffect(value));
}
private IEnumerator DamageEffect(int value)
{
var previousHp = _slider.value;
var tick = (previousHp - value) / _duration;
_slider.value = value;
while (_damageEffectSlider.value > value)
{
_damageEffectSlider.value -= tick * Time.deltaTime;
yield return null;
}
_damageEffectSlider.value = value;
if (_damageEffectSlider.value == 0)
{
SetActiveHpSlider(false);
}
}
public void SetActiveHpSlider(bool value) => gameObject.SetActive(value);
}
}