using System; using System.Collections.Generic; using TyphoonGUIStyle; using UnityEditor; using UnityEngine; namespace TyphoonUI { /// /// Preferences gui 绘制 /// public class PreferencesGUIDrawer { public static Dictionary> OverrideDrawGUIFunc = new Dictionary>() { { "m_Script", (res) => { return true; } }, { nameof(Preferences.Keymap), DrawProperty_Keymap }, { nameof(Preferences.DefaultNamespace), DrawProperty_DefaultNamespace }, { nameof(Preferences.DrawUIObjectHierarchy), DrawProperty_DrawUIObjectHierarchy }, { nameof(Preferences.DrawUINodeHierarchy), DrawProperty_DrawUINodeHierarchy }, { nameof(Preferences.DrawHierarchyInPlayingMode), DrawProperty_DrawHierarchyInPlayingMode }, { nameof(Preferences.UpdateUIPackageOnPlaying), DrawProperty_UpdateUIPackageOnPlaying }, }; private static bool DrawProperty_UpdateUIPackageOnPlaying(Preferences arg) { GUILayout.Space(10); GUILayout.Label("运行时自动更新UIPackage", Styles.BoldLabel); GUIDrawer.DrawPopUpToggle(arg.UpdateUIPackageOnPlaying, (res) => { arg.UpdateUIPackageOnPlaying = res; }); return true; } private static bool DrawProperty_DrawUINodeHierarchy(Preferences arg) { GUILayout.Space(10); GUILayout.Label("节点标识", Styles.BoldLabel); GUIDrawer.DrawPopUpToggle(arg.DrawUINodeHierarchy, (res) => { arg.DrawUINodeHierarchy = res; }); return true; } private static bool DrawProperty_DrawUIObjectHierarchy(Preferences arg) { GUILayout.Space(10); GUILayout.Label("UIObject标识", Styles.BoldLabel); GUIDrawer.DrawPopUpToggle(arg.DrawUIObjectHierarchy, (res) => { arg.DrawUIObjectHierarchy = res; }); return true; } private static bool DrawProperty_DrawHierarchyInPlayingMode(Preferences arg) { GUILayout.Space(10); GUILayout.Label("运行时绘制标识", Styles.BoldLabel); GUIDrawer.DrawPopUpToggle(arg.DrawHierarchyInPlayingMode, (res) => { arg.DrawHierarchyInPlayingMode = res; }); return true; } private static bool DrawProperty_DefaultNamespace(Preferences arg) { GUILayout.Space(10); GUILayout.Label("默认命名空间", Styles.BoldLabel); arg.DefaultNamespace = EditorGUILayout.TextField(arg.DefaultNamespace); return true; } public static void DrawGUI() { var config = Preferences.Default; GUIDrawer.DrawProperty(config, (property) => { if (OverrideDrawGUIFunc.TryGetValue(property, out var match)) { return match.Invoke(config); } return false; }); } private static bool DrawProperty_Keymap(Preferences arg) { var rect = GUIDrawer.DrawTitleLabel("选项", GUILayout.Height(32)); var rectSave = rect; rectSave.height = 22; rectSave.width = 80; rectSave.center = rect.center; rectSave.x = rect.xMax - rectSave.width; rectSave.x -= 4; if (GUI.Button(rectSave, new GUIContent("保存配置", EditorIcons.icon_save))) { arg.Save(); TyphoonUIEditor.Generate_EditorCsFile(); } GUILayout.Space(10); GUILayout.Label("导出快捷键", Styles.BoldLabel); arg.Keymap = EditorGUILayout.TextField(arg.Keymap); GUIDrawer.DrawMessageBox("[%表示ctrl][&表示alt][#表示shift]\n例如ctrl+e,填写%e", GUILayout.Height(44)); return true; } } }