using Exsersewo.Nydaliv.Extensions; using System.Collections; using UnityEngine; namespace Exsersewo.UI.ProgressBar { public class ProgressBar : MonoBehaviour { [SerializeField] RectTransform ValueSlider; public ProgressBarType FillType; [Tooltip("X=Left Y=Right")] public Vector2 Padding; [SerializeField] ProgressTransitionType Transition; [SerializeField] float TransitionTime = .5f; [SerializeField] float previousValue; RectTransform RectTransform; void Start() { RectTransform = GetComponent(); previousValue = ValueSlider.rect.width; } IEnumerator SetWidth(ulong value, ulong maxValue) { float hori = RectTransform.rect.width; var width = ((float)value).Remap(0, maxValue, 0, hori-(Padding.x+Padding.y)); switch (Transition) { case ProgressTransitionType.Lerp: case ProgressTransitionType.SmoothStep: { float TimeLerped = 0f; while (TimeLerped <= TransitionTime) { float lerpVal = 0; switch (Transition) { case ProgressTransitionType.SmoothStep: lerpVal = Mathf.SmoothStep(previousValue, width, TimeLerped / TransitionTime); break; case ProgressTransitionType.Lerp: lerpVal = Mathf.Lerp(previousValue, width, TimeLerped / TransitionTime); break; } SetSliderPosition(lerpVal); TimeLerped += Time.deltaTime; yield return null; } } break; case ProgressTransitionType.Instant: default: { SetSliderPosition(width); } break; } previousValue = width; } void SetSliderPosition(float val) { switch (FillType) { case ProgressBarType.FillFromCenter: ValueSlider.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, val); break; case ProgressBarType.FillFromLeft: ValueSlider.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, val); ValueSlider.SetLeft(Padding.x); break; case ProgressBarType.FillFromRight: ValueSlider.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, val); ValueSlider.SetRight(Padding.y); break; } } public void SetValue(ulong value, ulong maxValue) { StartCoroutine(SetWidth(value, maxValue)); } } public enum ProgressBarType { FillFromCenter, FillFromLeft, FillFromRight } public enum ProgressTransitionType { Instant, Lerp, SmoothStep } }