Files
tcg-client/Assets/TcgEngine/Scripts/UI/DropdownValue.cs
2025-09-17 16:22:06 +08:00

136 lines
3.4 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
namespace TcgEngine.UI
{
/// <summary>
/// 在Dropdown的每个元素中存储ID
/// </summary>
[System.Serializable]
public class DropdownValueItem
{
public string id;
public string text;
}
[RequireComponent(typeof(Dropdown))]
public class DropdownValue : MonoBehaviour
{
public UnityAction<int, string> onValueChanged;
private List<DropdownValueItem> values = new List<DropdownValueItem>();
private Dropdown dropdown;
void Awake()
{
dropdown = GetComponent<Dropdown>();
dropdown.onValueChanged.AddListener(OnChangeValue);
}
private void Start()
{
}
public void AddOption(string id, string text)
{
Dropdown.OptionData option = new Dropdown.OptionData(text);
dropdown.options.Add(option);
DropdownValueItem item = new DropdownValueItem();
item.id = id;
item.text = text;
values.Add(item);
dropdown.RefreshShownValue();
}
public void ClearOptions()
{
values.Clear();
dropdown.ClearOptions();
}
public void SetValue(string value)
{
int index = 0;
foreach (DropdownValueItem item in values)
{
if (item.id == value)
dropdown.value = index;
index++;
}
}
public void SetValue(int index)
{
if (index >= 0 && index < dropdown.options.Count)
dropdown.value = index;
}
private void OnChangeValue(int selected_index)
{
if (selected_index >= 0 && selected_index < values.Count)
{
DropdownValueItem value = values[selected_index];
if (onValueChanged != null)
onValueChanged.Invoke(selected_index, value.id);
}
}
public DropdownValueItem GetSelected()
{
if (dropdown.value >= 0 && dropdown.value < values.Count)
{
DropdownValueItem item = values[dropdown.value];
return item;
}
return null;
}
public string GetSelectedValue()
{
DropdownValueItem item = GetSelected();
if (item != null)
return item.id;
return "";
}
public string GetSelectedText()
{
DropdownValueItem item = GetSelected();
if (item != null)
return item.text;
return "";
}
public int GetSelectedIndex()
{
return dropdown.value;
}
public int Count
{
get { return dropdown.options.Count; }
}
public bool interactable
{
get { return dropdown.interactable; }
set { dropdown.interactable = value; }
}
public int value
{
get { return dropdown.value; }
set { dropdown.value = value; dropdown.RefreshShownValue(); }
}
public List<DropdownValueItem> Items
{
get { return values; }
}
}
}