using UnityEngine; using UnityEngine.Events; using DIG.Tools; namespace DIG.UIExpansion { public class ProgresBar : MonoBehaviour { public float Value { get { if (_fillValue < MinFill) _fillValue = MinFill; else if (_fillValue > MaxFill) _fillValue = MaxFill; return _fillValue; } set { _fillValue = value; float scaledValue; if (_fillValue == 0) scaledValue = _fillValue / MaxFill; else scaledValue = (_fillValue - MinFill) / (MaxFill - MinFill); _fill.FillImage.fillAmount = scaledValue; OnValueChange?.Invoke(value); } } public float MaxFill { get { return _maxFill; } private set { _maxFill = value; } } public float MinFill { get { return _minFill; } private set { _minFill = value; } } public SliderBarEvent OnValueChange { get { return _onValueChange; } set { _onValueChange = value; } } [Header("UI")] [SerializeField] private BarFill _fill; [Header("Settings")] [SerializeField] private float _maxFill = 1f; [SerializeField] private float _minFill = 0f; [CustomRange("_minFill", "_maxFill")] [SerializeField] private float _fillValue = 1; [Space(10)] [SerializeField] private SliderBarEvent _onValueChange; private void OnValidate() { UpdateBar(_fillValue); } /// /// Used to update bar value in editor /// /// private void UpdateBar(float value) { float scaledValue; if (_fillValue == 0) scaledValue = _fillValue / MaxFill; else scaledValue = (_fillValue - MinFill) / (MaxFill - MinFill); _fill.FillImage.fillAmount = scaledValue; OnValueChange?.Invoke(value); } } [System.Serializable] public class SliderBarEvent : UnityEvent { } }