56 lines
1.5 KiB
C#
56 lines
1.5 KiB
C#
using JetBrains.Annotations;
|
|
using SharpUI.Source.Common.UI.Util;
|
|
using TMPro;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
namespace SharpUI.Source.Common.UI.Elements.Progress
|
|
{
|
|
public class ProgressBar : MonoBehaviour
|
|
{
|
|
public const string DefaultBarTextFormat = "{0:0.00} %";
|
|
public const float DefaultPercentage = 0.0f;
|
|
|
|
[SerializeField] public Image backgroundImage;
|
|
[SerializeField] public Image barImage;
|
|
[SerializeField,CanBeNull] public TMP_Text barText;
|
|
|
|
protected readonly IUiUtil util = new UiUtil();
|
|
protected float percentage;
|
|
|
|
public virtual void Start()
|
|
{
|
|
percentage = DefaultPercentage;
|
|
UpdatePercentage(percentage);
|
|
}
|
|
|
|
public virtual void UpdatePercentage(float percentAmount)
|
|
{
|
|
if (!util.PercentInRange(percentAmount))
|
|
return;
|
|
|
|
percentage = percentAmount;
|
|
SetBarFill();
|
|
SetTextPercentage();
|
|
}
|
|
|
|
public float GetPercentage() => percentage;
|
|
|
|
public void SetBarText(string text)
|
|
{
|
|
if (!(barText is null))
|
|
barText.text = text;
|
|
}
|
|
|
|
private void SetBarFill()
|
|
{
|
|
barImage.fillAmount = util.ToDecimalPercentage(percentage);
|
|
}
|
|
|
|
private void SetTextPercentage()
|
|
{
|
|
if (!(barText is null))
|
|
barText.text = string.Format(DefaultBarTextFormat, percentage);
|
|
}
|
|
}
|
|
} |