65 lines
1.5 KiB
C#
65 lines
1.5 KiB
C#
using DG.Tweening;
|
|
using Obvious.Soap;
|
|
using SoapCustomVariable;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
public class UI_PlayerStaminaIndicator : MonoBehaviour
|
|
{
|
|
[SerializeField]
|
|
private FloatVariable playerStamina;
|
|
|
|
[SerializeField]
|
|
private BoolVariable isStaminaReachedZero;
|
|
|
|
[SerializeField]
|
|
private FSMVariable playerState;
|
|
|
|
[SerializeField]
|
|
private Image fillImage;
|
|
|
|
private Color startColor;
|
|
|
|
private CanvasGroup canvasGroup;
|
|
|
|
private void OnEnable()
|
|
{
|
|
canvasGroup = GetComponent<CanvasGroup>();
|
|
startColor = fillImage.color;
|
|
PlayerStamina_OnValueChanged(playerStamina.Value);
|
|
playerState.OnValueChanged += PlayerState_OnValueChanged;
|
|
playerStamina.OnValueChanged += PlayerStamina_OnValueChanged;
|
|
isStaminaReachedZero.OnValueChanged += IsStaminaReachedZero_OnValueChanged;
|
|
}
|
|
|
|
private void OnDisable()
|
|
{
|
|
playerState.OnValueChanged -= PlayerState_OnValueChanged;
|
|
playerStamina.OnValueChanged -= PlayerStamina_OnValueChanged;
|
|
isStaminaReachedZero.OnValueChanged -= IsStaminaReachedZero_OnValueChanged;
|
|
}
|
|
|
|
private void PlayerState_OnValueChanged(State state)
|
|
{
|
|
canvasGroup.alpha = ((state == State.fight) ? 1f : 0f);
|
|
}
|
|
|
|
private void IsStaminaReachedZero_OnValueChanged(bool value)
|
|
{
|
|
DOTween.Kill(fillImage);
|
|
if (value)
|
|
{
|
|
fillImage.DOColor(Color.red, 1f).SetLoops(-1, LoopType.Yoyo);
|
|
}
|
|
else
|
|
{
|
|
fillImage.color = startColor;
|
|
}
|
|
}
|
|
|
|
private void PlayerStamina_OnValueChanged(float value)
|
|
{
|
|
fillImage.fillAmount = value;
|
|
}
|
|
}
|