using TyphoonGUIStyle; using UnityEditor; using UnityEngine; namespace TyphoonPool { [CustomEditor(typeof(PoolManageImpl))] public class PoolManagerImplEditor : Editor { private const float ID_WIDTH = 120; private const float STATUS_WIDTH = 160; private PoolManageImpl Target => target as PoolManageImpl; public override void OnInspectorGUI() { base.OnInspectorGUI(); var pools = Target.Pools; //绘制池清单 GUILayout.BeginHorizontal(); GUILayout.Label("池ID", Styles.TitleBar, GUILayout.Width(ID_WIDTH)); GUILayout.Label("实例", Styles.TitleBar); GUILayout.Label("状态", Styles.TitleBar, GUILayout.Width(STATUS_WIDTH)); GUILayout.EndHorizontal(); foreach (var kv in pools) { var id = kv.Key; var value = kv.Value; GUILayout.BeginHorizontal(); GUILayout.Label($"{id}", Styles.TitleBar, GUILayout.Width(ID_WIDTH)); GUILayout.Label("", Styles.TitleBar); var last = GUILayoutUtility.GetLastRect(); EditorGUI.ObjectField(last, value, typeof(Object)); if (value != null) { value.GetStatus(out var total, out var busy); GUILayout.Label($"{busy}/{total}", Styles.TitleBar, GUILayout.Width(STATUS_WIDTH)); } else { GUILayout.Label("---", Styles.TitleBar, GUILayout.Width(STATUS_WIDTH)); } GUILayout.EndHorizontal(); } Repaint(); } } }