Files
EnglewoodLAB/Assets/Scripts/UVC/UI/UISliderWithLabel.cs

82 lines
1.8 KiB
C#

using System;
using TMPro;
using UnityEngine;
namespace UVC.UI
{
[RequireComponent(typeof(RectTransform))]
public class UISliderWithLabel : UnityEngine.MonoBehaviour
{
private TextMeshProUGUI label;
private SliderWithEvent slider;
public int Value
{
get
{
return (int)slider.value;
}
set
{
if (slider.value != value)
{
slider.value = value;
UpdateLabel();
}
}
}
public Action<int> OnChangeValue { get; set; }
public void Init()
{
label = GetComponentInChildren<TextMeshProUGUI>();
slider = GetComponentInChildren<SliderWithEvent>();
slider.onValueChanged.AddListener(onValueChangedSlider);
slider.OnClickAction += OnClickSlider;
slider.OnEndDragAction += OnEndDragSlider;
slider.value = 1;
label.text = $"{slider.value}x";
}
private void onValueChangedSlider(float value)
{
UpdateLabel();
}
private void OnClickSlider()
{
UpdateLabel();
DispatchOnChange();
}
private void OnEndDragSlider()
{
UpdateLabel();
DispatchOnChange();
}
private void DispatchOnChange()
{
if (OnChangeValue != null) OnChangeValue.Invoke(Value);
}
private void UpdateLabel()
{
label.text = $"{slider.value}x";
}
private void OnDestroy()
{
slider.onValueChanged.RemoveListener(onValueChangedSlider);
slider.OnClickAction = null;
slider.OnEndDragAction = null;
}
}
}