82 lines
1.8 KiB
C#
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;
|
|
}
|
|
|
|
}
|
|
}
|