61 lines
1.5 KiB
C#
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;
|
|
}
|
|
}
|
|
} |