using System; 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; [Button("컴포넌트 초기화")] private void InitializeComponents() { _slider = GetComponent(); _nameText = transform.Find("NameText").GetComponent(); _damageEffectSlider = transform.Find("Background/DamageEffectSlider").GetComponent(); } private void Awake() { SetActiveHpSlider(false); } public void SetBoss(int maxHp, string bossName) { if (!_slider || !_damageEffectSlider) return; _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; 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; } public void SetActiveHpSlider(bool value) => gameObject.SetActive(value); } }