Files
Cielonos/Assets/Scripts/Settings/UI/SettingsEntrySlider.cs
SoulliesOfficial 6d7ebc5825 Passion & UI
2026-06-12 17:11:39 -04:00

60 lines
1.6 KiB
C#

using System.Reflection;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
namespace Cielonos.Settings.UI
{
/// <summary>
/// 带 [Range] 特性的 int 字段的设置条目 — 使用 Slider + 数值文本。
/// </summary>
public class SettingsEntrySlider : SettingsEntryBase
{
[SerializeField] private Slider slider;
[SerializeField] private TMP_Text valueText;
protected override void SetupUI()
{
if (slider == null) return;
var rangeAttr = fieldInfo.GetCustomAttribute<RangeAttribute>();
if (rangeAttr != null)
{
slider.minValue = rangeAttr.min;
slider.maxValue = rangeAttr.max;
}
slider.wholeNumbers = true;
slider.onValueChanged.AddListener(OnSliderChanged);
}
public override void RefreshValue()
{
if (slider == null) return;
int currentValue = (int)GetFieldValue();
slider.SetValueWithoutNotify(currentValue);
UpdateValueText(currentValue);
}
private void OnSliderChanged(float value)
{
int intValue = Mathf.RoundToInt(value);
SetFieldValue(intValue);
UpdateValueText(intValue);
}
private void UpdateValueText(int value)
{
if (valueText != null)
valueText.text = value.ToString();
}
private void OnDestroy()
{
if (slider != null)
slider.onValueChanged.RemoveListener(OnSliderChanged);
}
}
}