RoguelikeKit/Assets/Common/Scripts/Boss Fight/UI/BossfightHealthbarBehavior.cs

61 lines
1.5 KiB
C#

using OctoberStudio.Easing;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
namespace OctoberStudio.Bossfight
{
public class BossfightHealthbarBehavior : MonoBehaviour
{
[SerializeField] RectMask2D rectMask;
[SerializeField] TMP_Text bossNameLabel;
[SerializeField] CanvasGroup canvasGroup;
public EnemyBehavior Boss { get ; private set; }
public void Show()
{
gameObject.SetActive(true);
canvasGroup.alpha = 0f;
canvasGroup.DoAlpha(1f, 0.3f);
}
public void Hide()
{
canvasGroup.DoAlpha(0f, 0.3f).SetOnFinish(() => gameObject.SetActive(false));
}
public void SetBoss(EnemyBehavior boss)
{
Boss = boss;
Boss.onEnemyDied += OnBossDied;
Boss.onHealthChanged += OnBossHealthChanged;
}
private void OnBossHealthChanged(float hp, float maxHP)
{
SetProgress(hp / maxHP);
}
private void OnBossDied(EnemyBehavior enemy)
{
Boss.onEnemyDied -= OnBossDied;
Boss.onHealthChanged -= OnBossHealthChanged;
}
public void Init(BossfightData data)
{
bossNameLabel.text = data.DisplayName;
SetProgress(1);
}
private void SetProgress(float progress)
{
Vector4 padding = rectMask.padding;
padding.z = rectMask.rectTransform.rect.width * (1 - progress);
rectMask.padding = padding;
}
}
}