From 60723a67f6ca96410ef3ad329d75df13ad0a94b8 Mon Sep 17 00:00:00 2001 From: Mikhail <99481254+DCFApixels@users.noreply.github.com> Date: Wed, 15 May 2024 01:06:19 +0800 Subject: [PATCH] update runtime component display --- src/Internal/Editor/EcsGUI.cs | 51 +++++++++++++++++++++++++++++++---- 1 file changed, 46 insertions(+), 5 deletions(-) diff --git a/src/Internal/Editor/EcsGUI.cs b/src/Internal/Editor/EcsGUI.cs index 679e47b..0c7a18c 100644 --- a/src/Internal/Editor/EcsGUI.cs +++ b/src/Internal/Editor/EcsGUI.cs @@ -51,6 +51,7 @@ namespace DCFApixels.DragonECS.Unity.Editors } } #endregion + private static readonly BindingFlags fieldFlags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic; internal readonly static Color GrayColor = new Color32(100, 100, 100, 255); internal readonly static Color GreenColor = new Color32(75, 255, 0, 255); @@ -61,6 +62,12 @@ namespace DCFApixels.DragonECS.Unity.Editors public static float EntityBarHeight => EditorGUIUtility.singleLineHeight + 3f; + #region Properties + private static ComponentColorMode AutoColorMode + { + get { return SettingsPrefs.instance.ComponentColorMode; } + set { SettingsPrefs.instance.ComponentColorMode = value; } + } private static bool IsShowHidden { get { return SettingsPrefs.instance.IsShowHidden; } @@ -71,7 +78,9 @@ namespace DCFApixels.DragonECS.Unity.Editors get { return SettingsPrefs.instance.IsShowRuntimeComponents; } set { SettingsPrefs.instance.IsShowRuntimeComponents = value; } } + #endregion + #region enums public enum AddClearComponentButton : byte { None = 0, @@ -85,7 +94,9 @@ namespace DCFApixels.DragonECS.Unity.Editors Alive = 1 << 0, Undefined = 1 << 1, } + #endregion + #region HitTest internal static bool HitTest(Rect rect) { return HitTest(rect, Event.current.mousePosition); @@ -103,7 +114,9 @@ namespace DCFApixels.DragonECS.Unity.Editors { return point.x >= rect.xMin - (float)offset && point.x < rect.xMax + (float)offset && point.y >= rect.yMin - (float)offset && point.y < rect.yMax + (float)offset; } + #endregion + #region small elems public static void DrawIcon(Rect position, Texture icon, float iconPadding, string description) { GUI.Label(position, UnityEditorUtility.GetLabel(string.Empty, description)); @@ -164,8 +177,9 @@ namespace DCFApixels.DragonECS.Unity.Editors { return IconButton(position, Icons.Instance.CloseIcon, 0f, "Delete Entity"); } + #endregion - + #region entity bar public static void EntityBarForAlive(Rect position, EntityStatus status, int id, short gen, short world) { EntityBar(position, status != EntityStatus.Alive, status, id, gen, world); @@ -243,6 +257,7 @@ namespace DCFApixels.DragonECS.Unity.Editors } } } + #endregion public static bool AddComponentButtons(Rect position) { @@ -281,6 +296,8 @@ namespace DCFApixels.DragonECS.Unity.Editors EditorGUILayout.IntField("Leaked Entites", leakedEntitesCount, EditorStyles.boldLabel); } } + + #region entity bar public static void EntityBarForAlive(EntityStatus status, int id, short gen, short world) { float width = EditorGUIUtility.currentViewWidth; @@ -305,6 +322,7 @@ namespace DCFApixels.DragonECS.Unity.Editors float height = EntityBarHeight; EcsGUI.EntityBar(GUILayoutUtility.GetRect(width, height)); } + #endregion public static bool AddComponentButtons() { @@ -344,24 +362,47 @@ namespace DCFApixels.DragonECS.Unity.Editors GUILayout.Box("", UnityEditorUtility.GetStyle(GUI.color, 0.16f), GUILayout.ExpandWidth(true)); IsShowHidden = EditorGUI.Toggle(GUILayoutUtility.GetLastRect(), "Show Hidden", IsShowHidden); + int i = 0; foreach (var componentTypeID in componentTypeIDs) { var pool = world.GetPoolInstance(componentTypeID); { - DrawRuntimeComponent(entityID, pool); + DrawRuntimeComponent(componentTypeIDs.Length, i++, entityID, pool); } } } GUILayout.EndVertical(); } - private static readonly BindingFlags fieldFlags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic; - private static void DrawRuntimeComponent(int entityID, IEcsPool pool) + private static void DrawRuntimeComponent(int total, int index, int entityID, IEcsPool pool) { var meta = pool.ComponentType.ToMeta(); if (meta.IsHidden == false || IsShowHidden) { object data = pool.GetRaw(entityID); - Color panelColor = meta.Color.ToUnityColor().Desaturate(EscEditorConsts.COMPONENT_DRAWER_DESATURATE); + //Color panelColor = meta.Color.ToUnityColor().Desaturate(EscEditorConsts.COMPONENT_DRAWER_DESATURATE); + + Color panelColor; + if (meta.IsCustomColor) + { + panelColor = meta.Color.ToUnityColor(); + } + else + { + switch (AutoColorMode) + { + case ComponentColorMode.Auto: + panelColor = meta.Color.ToUnityColor().Desaturate(0.48f) / 1.18f; //.Desaturate(0.48f) / 1.18f; + break; + case ComponentColorMode.Rainbow: + Color hsv = Color.HSVToRGB(1f / (Mathf.Max(total, EscEditorConsts.AUTO_COLOR_RAINBOW_MIN_RANGE)) * index, 1, 1); + panelColor = hsv.Desaturate(0.48f) / 1.18f; + break; + default: + panelColor = index % 2 == 0 ? new Color(0.40f, 0.40f, 0.40f) : new Color(0.54f, 0.54f, 0.54f); + break; + } + } + panelColor = panelColor.Desaturate(EscEditorConsts.COMPONENT_DRAWER_DESATURATE); float padding = EditorGUIUtility.standardVerticalSpacing; Rect removeButtonRect = GUILayoutUtility.GetLastRect();