using System; using TyphoonGUIStyle; using UnityEditor; using UnityEngine; using Object = UnityEngine.Object; namespace TyphoonUI { /// /// GUI绘制器 /// public static class GUIDrawer { /// /// 绘制GUI属性 /// public static void DrawProperty(Object target, Func ignoreFunc) { var obj = new SerializedObject(target); EditorGUI.BeginChangeCheck(); obj.UpdateIfRequiredOrScript(); SerializedProperty iterator = obj.GetIterator(); for (var enterChildren = true; iterator.NextVisible(enterChildren); enterChildren = false) { using (new EditorGUI.DisabledScope("m_Script" == iterator.propertyPath)) { var cover = ignoreFunc.Invoke(iterator.propertyPath); if (!cover) { EditorGUILayout.PropertyField(iterator, true); } } } obj.ApplyModifiedProperties(); EditorGUI.EndChangeCheck(); } /// /// 绘制标题 /// public static void DrawTitleLabel(Rect rect, string content) { GUI.Label(rect, content, Styles.TitleBar); } /// /// 绘制标题 /// public static Rect DrawTitleLabel(string content, params GUILayoutOption[] options) { GUILayout.Label(content, Styles.TitleBar, options); var last = GUILayoutUtility.GetLastRect(); return last; } public static Rect DrawMessageBox(string content, params GUILayoutOption[] options) { GUILayout.Label(new GUIContent(content, Styles.IconInfo), Styles.HelpBox, options); var last = GUILayoutUtility.GetLastRect(); return last; } // /// // ///绘制颜色按钮 // /// // public static bool DrawColorButton(string content, Color color, out Rect rect, params GUILayoutOption[] options) // { // var click = GUILayout.Button("", Styles.R2Button, options); // rect = GUILayoutUtility.GetLastRect(); // EditorGUI.DrawRect(rect, color * 0.3f); // GUI.Label(rect, content, Styles.RLabel_Middle); // return click; // } // public static bool DrawBlueButton(string content, out Rect rect, params GUILayoutOption[] options) // { // return DrawColorButton(content, new Color(0.01f, 0.49f, 0.84f, 1f), out rect, options); // } // // public static bool DrawGreenButton(string content, out Rect rect, params GUILayoutOption[] options) // { // return DrawColorButton(content, new Color(0.27f, 0.79f, 0.24f, 1f), out rect, options); // } public static void DrawPopUpToggle(bool isOn, Action onClick, params GUILayoutOption[] options) { var txt = isOn ? "开启" : "关闭"; var click = GUILayout.Button(txt, "PopUp", options); if (click) { var menu = new GenericMenu(); menu.AddItem(new GUIContent("开启"), false, () => onClick?.Invoke(true)); menu.AddItem(new GUIContent("关闭"), false, () => onClick?.Invoke(false)); menu.ShowAsContext(); } } } }