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(); 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; } }