using UnityEditor;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
using BaseGames.UI;
using BaseGames.UI.Theme;
namespace BaseGames.Editor.UI
{
///
/// 输入提示控件脚手架:生成 / 放置 UI_Control_InputPrompt 预制件
/// —— 一个「按键图标 + 文字」的可复用提示(如菜单底部「Ⓐ 确定」「Ⓑ 返回」)。
///
/// 图标走已有的设备适配链路(零代码):
/// 控件内 据 ActionName 经 IInputIconService 解析
/// 当前设备(键鼠/PS/Xbox/Switch)+ 改键后的实际绑定 → 自动显示正确按键图标,
/// 设备切换/改键时自动刷新。前提:美术把按键 sprite 填入 ICN_Keyboard/Xbox/PlayStation/Switch 资产。
///
/// 策划/美术用法:
/// 菜单「向选中节点放置 ▸ InputPrompt」放进任意 Canvas,
/// 在 Icon 的 InputIconImage 填 ActionName(如 Interact/Jump),Label 填提示文字(可挂 LocalizedText)。
///
/// 菜单:BaseGames/UI/控件库/...
///
public static class UIInputPromptScaffold
{
private const string ControlsDir = "Assets/_Game/Prefabs/UI/Controls";
private const string ThemePath = "Assets/_Game/Data/UI/Themes/UI_Theme_Default.asset";
private const string PfPrompt = "UI_Control_InputPrompt";
[MenuItem("BaseGames/UI/控件库/生成输入提示控件(UI_Control_InputPrompt)")]
public static void GeneratePrompt()
{
EnsureFolder(ControlsDir);
BuildPrompt();
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
Debug.Log($"[UIInputPrompt] 已生成 {ControlsDir}/{PfPrompt}.prefab。\n" +
"用法:菜单「向选中节点放置 ▸ InputPrompt」放进 UI,Icon 填 ActionName、Label 填文字。\n" +
"图标随当前设备自动切换;需美术把按键 sprite 填入 ICN_Keyboard/Xbox/PlayStation/Switch 资产。");
}
[MenuItem("BaseGames/UI/控件库/向选中节点放置 ▸ InputPrompt")]
private static void PlacePrompt()
{
string path = $"{ControlsDir}/{PfPrompt}.prefab";
var prefab = AssetDatabase.LoadAssetAtPath(path);
if (prefab == null)
{
EditorUtility.DisplayDialog("控件库",
$"未找到预制件:{path}\n请先执行「生成输入提示控件(UI_Control_InputPrompt)」。", "确定");
return;
}
Transform parent = Selection.activeTransform;
if (parent == null)
{
var canvas = Object.FindObjectOfType