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 OnChangeValue { get; set; } public void Init() { label = GetComponentInChildren(); slider = GetComponentInChildren(); 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; } } }