using UnityEngine;
namespace BaseGames.UI
{
///
/// 输入设备图标集 SO(架构 10_UIModule §12)。
/// 存储一套设备(键鼠 or 手柄)所有按键对应的 Sprite。
/// 由 InputDeviceIconSwitcher 根据当前设备选择正确的图标集。
///
[CreateAssetMenu(menuName = "BaseGames/UI/Input Device Icon Set", fileName = "InputDeviceIconSetSO")]
public class InputDeviceIconSetSO : ScriptableObject
{
[System.Serializable]
public struct IconEntry
{
[Tooltip("InputSystem 绑定路径,如 /space 或 /buttonSouth。改键后路径变化,图标集中须包含全部可能按键的映射。")]
public string BindingPath;
public Sprite Icon;
}
[Tooltip("标识此图标集对应的输入设备类型(仅作编辑器说明,运行时由 InputIconService 选择)")]
[SerializeField] private InputDeviceType _deviceType;
[SerializeField] private IconEntry[] _entries;
/// 此图标集对应的设备类型。
public InputDeviceType DeviceType => _deviceType;
/// 根据 binding path 查找对应图标;未找到返回 null。
public Sprite GetIcon(string bindingPath)
{
if (_entries == null || string.IsNullOrEmpty(bindingPath)) return null;
// 先精确匹配,再做路径前缀不区分大小写匹配(兼容大小写差异)
foreach (var entry in _entries)
if (string.Equals(entry.BindingPath, bindingPath, System.StringComparison.OrdinalIgnoreCase))
return entry.Icon;
return null;
}
}
}