using System;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
namespace Cielonos.Settings.UI
{
///
/// enum 字段的设置条目 — 使用 TMP_Dropdown。
/// 自动从枚举类型生成选项列表。
///
public class SettingsEntryDropdown : SettingsEntryBase
{
[SerializeField] private TMP_Dropdown dropdown;
private Array enumValues;
protected override void SetupUI()
{
if (dropdown == null) return;
enumValues = Enum.GetValues(fieldInfo.FieldType);
dropdown.ClearOptions();
var options = new List(enumValues.Length);
foreach (object val in enumValues)
{
options.Add(val.ToString());
}
dropdown.AddOptions(options);
dropdown.onValueChanged.AddListener(OnDropdownChanged);
}
public override void RefreshValue()
{
if (dropdown == null || enumValues == null) return;
object currentValue = GetFieldValue();
for (int i = 0; i < enumValues.Length; i++)
{
if (enumValues.GetValue(i).Equals(currentValue))
{
dropdown.SetValueWithoutNotify(i);
break;
}
}
}
private void OnDropdownChanged(int index)
{
if (enumValues != null && index >= 0 && index < enumValues.Length)
{
SetFieldValue(enumValues.GetValue(index));
}
}
private void OnDestroy()
{
if (dropdown != null)
dropdown.onValueChanged.RemoveListener(OnDropdownChanged);
}
}
}