Files
Cielonos/Assets/Scripts/MainGame/UI/PlayerUI/Base/AttributeBarBase.cs

126 lines
3.8 KiB
C#
Raw Normal View History

2025-12-08 05:27:53 -05:00
using System;
using DG.Tweening;
2026-02-13 09:22:11 -05:00
using SLSUtilities.General;
2025-12-08 05:27:53 -05:00
using UnityEngine;
using UnityEngine.UI;
2026-02-13 09:22:11 -05:00
namespace SLSUtilities.UI
2025-12-08 05:27:53 -05:00
{
2026-02-13 09:22:11 -05:00
public partial class AttributeBarBase : UIElementBase
2025-12-08 05:27:53 -05:00
{
2026-02-13 09:22:11 -05:00
public Image barContainer;
2025-12-08 05:27:53 -05:00
public Image fillImage;
public LerpFloat fillLerp = new LerpFloat(1f, 0.2f);
public bool useLerpColor;
public LerpColor fillColor;
protected virtual void Awake()
{
fillLerp = new LerpFloat(1f, 0.2f);
}
public void UpdateFillImage(float currentValue, float maxValue, bool isInstant = false)
{
if (maxValue < 0)
{
Debug.LogWarning("Max value is less than zero. Cannot update fill image.");
return;
}
if (currentValue <= 0)
{
fillImage.fillAmount = 0;
return;
}
if (!isInstant)
{
float targetFill = currentValue / maxValue;
fillLerp.targetValue = targetFill;
}
else
{
fillLerp.targetValue = currentValue / maxValue;
fillLerp.currentValue = currentValue / maxValue;
}
}
public void UpdateFillColor(Color color, bool isInstant = false)
{
if (useLerpColor)
{
if (!isInstant)
{
fillColor.targetValue = color;
}
else
{
fillColor.targetValue = color;
fillColor.currentValue = color;
}
}
else
{
fillImage.color = color;
}
}
2026-02-13 09:22:11 -05:00
public virtual void Update()
2025-12-08 05:27:53 -05:00
{
fillLerp.Update(1);
fillImage.fillAmount = fillLerp.currentValue;
if (useLerpColor)
{
fillColor.Update(1);
2026-02-13 09:22:11 -05:00
//fillImage.color = fillColor.currentValue;
2025-12-08 05:27:53 -05:00
}
}
private Tweener blinkTweener;
public virtual void Blink(Color blinkColor, float duration = 0.2f)
{
2026-02-13 09:22:11 -05:00
/*blinkTweener?.Kill();
2025-12-08 05:27:53 -05:00
Color originalColor = useLerpColor ? fillColor.targetValue : fillImage.color;
blinkTweener = fillImage.DOColor(blinkColor, duration / 2).SetLoops(2, LoopType.Yoyo).OnComplete(() =>
{
fillImage.color = originalColor;
});
2026-02-13 09:22:11 -05:00
blinkTweener.Play();*/
}
}
public partial class AttributeBarBase
{
private Sequence fadeInSequence;
private Sequence fadeOutSequence;
public void FadeIn(float duration = 0.2f)
{
gameObject.SetActive(true);
Tweener alphaFade = canvasGroup.DOFade(1f, duration).From(0f);
Tweener containerPositionFade = barContainer.rectTransform.DOAnchorPosY(0f, duration).From(new Vector2(0, 50f));
fadeInSequence?.Kill();
fadeInSequence = DOTween.Sequence();
fadeInSequence.Append(alphaFade);
fadeInSequence.Join(containerPositionFade);
fadeInSequence.Play();
}
public void FadeOut(float duration = 0.2f)
{
Tweener alphaFade = canvasGroup.DOFade(0f, duration).From(1f);
Tweener containerPositionFade = barContainer.rectTransform.DOAnchorPosY(50f, duration).From(new Vector2(0, 0f));
fadeOutSequence?.Kill();
fadeOutSequence = DOTween.Sequence();
fadeOutSequence.Append(alphaFade);
fadeOutSequence.Join(containerPositionFade);
fadeOutSequence.OnComplete(() =>
{
gameObject.SetActive(false);
});
fadeOutSequence.Play();
2025-12-08 05:27:53 -05:00
}
}
}