update runtime component display

This commit is contained in:
Mikhail 2024-05-15 01:06:19 +08:00
parent 7b2f9f5093
commit 60723a67f6

View File

@ -51,6 +51,7 @@ namespace DCFApixels.DragonECS.Unity.Editors
} }
} }
#endregion #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 GrayColor = new Color32(100, 100, 100, 255);
internal readonly static Color GreenColor = new Color32(75, 255, 0, 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; 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 private static bool IsShowHidden
{ {
get { return SettingsPrefs.instance.IsShowHidden; } get { return SettingsPrefs.instance.IsShowHidden; }
@ -71,7 +78,9 @@ namespace DCFApixels.DragonECS.Unity.Editors
get { return SettingsPrefs.instance.IsShowRuntimeComponents; } get { return SettingsPrefs.instance.IsShowRuntimeComponents; }
set { SettingsPrefs.instance.IsShowRuntimeComponents = value; } set { SettingsPrefs.instance.IsShowRuntimeComponents = value; }
} }
#endregion
#region enums
public enum AddClearComponentButton : byte public enum AddClearComponentButton : byte
{ {
None = 0, None = 0,
@ -85,7 +94,9 @@ namespace DCFApixels.DragonECS.Unity.Editors
Alive = 1 << 0, Alive = 1 << 0,
Undefined = 1 << 1, Undefined = 1 << 1,
} }
#endregion
#region HitTest
internal static bool HitTest(Rect rect) internal static bool HitTest(Rect rect)
{ {
return HitTest(rect, Event.current.mousePosition); 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; 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) public static void DrawIcon(Rect position, Texture icon, float iconPadding, string description)
{ {
GUI.Label(position, UnityEditorUtility.GetLabel(string.Empty, 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"); 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) public static void EntityBarForAlive(Rect position, EntityStatus status, int id, short gen, short world)
{ {
EntityBar(position, status != EntityStatus.Alive, status, id, gen, 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) public static bool AddComponentButtons(Rect position)
{ {
@ -281,6 +296,8 @@ namespace DCFApixels.DragonECS.Unity.Editors
EditorGUILayout.IntField("Leaked Entites", leakedEntitesCount, EditorStyles.boldLabel); EditorGUILayout.IntField("Leaked Entites", leakedEntitesCount, EditorStyles.boldLabel);
} }
} }
#region entity bar
public static void EntityBarForAlive(EntityStatus status, int id, short gen, short world) public static void EntityBarForAlive(EntityStatus status, int id, short gen, short world)
{ {
float width = EditorGUIUtility.currentViewWidth; float width = EditorGUIUtility.currentViewWidth;
@ -305,6 +322,7 @@ namespace DCFApixels.DragonECS.Unity.Editors
float height = EntityBarHeight; float height = EntityBarHeight;
EcsGUI.EntityBar(GUILayoutUtility.GetRect(width, height)); EcsGUI.EntityBar(GUILayoutUtility.GetRect(width, height));
} }
#endregion
public static bool AddComponentButtons() public static bool AddComponentButtons()
{ {
@ -344,24 +362,47 @@ namespace DCFApixels.DragonECS.Unity.Editors
GUILayout.Box("", UnityEditorUtility.GetStyle(GUI.color, 0.16f), GUILayout.ExpandWidth(true)); GUILayout.Box("", UnityEditorUtility.GetStyle(GUI.color, 0.16f), GUILayout.ExpandWidth(true));
IsShowHidden = EditorGUI.Toggle(GUILayoutUtility.GetLastRect(), "Show Hidden", IsShowHidden); IsShowHidden = EditorGUI.Toggle(GUILayoutUtility.GetLastRect(), "Show Hidden", IsShowHidden);
int i = 0;
foreach (var componentTypeID in componentTypeIDs) foreach (var componentTypeID in componentTypeIDs)
{ {
var pool = world.GetPoolInstance(componentTypeID); var pool = world.GetPoolInstance(componentTypeID);
{ {
DrawRuntimeComponent(entityID, pool); DrawRuntimeComponent(componentTypeIDs.Length, i++, entityID, pool);
} }
} }
} }
GUILayout.EndVertical(); GUILayout.EndVertical();
} }
private static readonly BindingFlags fieldFlags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic; private static void DrawRuntimeComponent(int total, int index, int entityID, IEcsPool pool)
private static void DrawRuntimeComponent(int entityID, IEcsPool pool)
{ {
var meta = pool.ComponentType.ToMeta(); var meta = pool.ComponentType.ToMeta();
if (meta.IsHidden == false || IsShowHidden) if (meta.IsHidden == false || IsShowHidden)
{ {
object data = pool.GetRaw(entityID); 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; float padding = EditorGUIUtility.standardVerticalSpacing;
Rect removeButtonRect = GUILayoutUtility.GetLastRect(); Rect removeButtonRect = GUILayoutUtility.GetLastRect();