From 3701423bf622196dbcfda25e2a0236eeb94dcb31 Mon Sep 17 00:00:00 2001 From: Mikhail <99481254+DCFApixels@users.noreply.github.com> Date: Wed, 6 Mar 2024 21:37:21 +0800 Subject: [PATCH] update --- src/Connectors/AutoEntityCreator.cs | 28 +--- src/Connectors/EcsEntityConnect.cs | 148 +----------------- src/Connectors/EcsWorldProvider.cs | 30 +--- src/Connectors/Editor.meta | 8 + .../Editor/AutoEntityCreatorEditor.cs | 26 +++ .../Editor/AutoEntityCreatorEditor.cs.meta | 11 ++ .../Editor/EcsEntityConnectEditor.cs | 146 +++++++++++++++++ .../Editor/EcsEntityConnectEditor.cs.meta | 11 ++ .../Editor/EcsWorldProviderBaseEditor.cs | 30 ++++ .../Editor/EcsWorldProviderBaseEditor.cs.meta | 11 ++ src/Debug/Editor/DebugMonitorPrefs.cs | 4 +- src/EcsUnityConsts.cs | 2 +- src/Editor/EditorUtility.cs | 3 +- src/Editor/EscEditorConsts.cs | 8 +- src/Editor/SOWrappers/RefEditorWrapper.cs | 2 +- src/Editor/Utils.meta | 8 + src/Editor/{ => Utils}/ColorUtility.cs | 0 src/Editor/{ => Utils}/ColorUtility.cs.meta | 2 +- src/Editor/{ => Utils}/RectUtility.cs | 0 src/Editor/{ => Utils}/RectUtility.cs.meta | 2 +- .../Editor/EntityTemplateEditor.cs | 42 ++--- .../Templates/ComponentTemplateBase.cs | 4 +- 22 files changed, 288 insertions(+), 238 deletions(-) create mode 100644 src/Connectors/Editor.meta create mode 100644 src/Connectors/Editor/AutoEntityCreatorEditor.cs create mode 100644 src/Connectors/Editor/AutoEntityCreatorEditor.cs.meta create mode 100644 src/Connectors/Editor/EcsEntityConnectEditor.cs create mode 100644 src/Connectors/Editor/EcsEntityConnectEditor.cs.meta create mode 100644 src/Connectors/Editor/EcsWorldProviderBaseEditor.cs create mode 100644 src/Connectors/Editor/EcsWorldProviderBaseEditor.cs.meta create mode 100644 src/Editor/Utils.meta rename src/Editor/{ => Utils}/ColorUtility.cs (100%) rename src/Editor/{ => Utils}/ColorUtility.cs.meta (83%) rename src/Editor/{ => Utils}/RectUtility.cs (100%) rename src/Editor/{ => Utils}/RectUtility.cs.meta (83%) diff --git a/src/Connectors/AutoEntityCreator.cs b/src/Connectors/AutoEntityCreator.cs index 14ae2d7..8953844 100644 --- a/src/Connectors/AutoEntityCreator.cs +++ b/src/Connectors/AutoEntityCreator.cs @@ -69,30 +69,4 @@ namespace DCFApixels.DragonECS } #endif } -} - -#if UNITY_EDITOR -namespace DCFApixels.DragonECS.Unity.Editors -{ - using UnityEditor; - - [CustomEditor(typeof(AutoEntityCreator))] - [CanEditMultipleObjects] - public class AutoEntityCreatorEditor : Editor - { - public override void OnInspectorGUI() - { - base.OnInspectorGUI(); - if (GUILayout.Button("Autoset")) - { - foreach (var tr in targets) - { - AutoEntityCreator creator = (AutoEntityCreator)tr; - creator.Autoset_Editor(); - EditorUtility.SetDirty(creator); - } - } - } - } -} -#endif \ No newline at end of file +} \ No newline at end of file diff --git a/src/Connectors/EcsEntityConnect.cs b/src/Connectors/EcsEntityConnect.cs index 9d5b8b9..6974007 100644 --- a/src/Connectors/EcsEntityConnect.cs +++ b/src/Connectors/EcsEntityConnect.cs @@ -85,150 +85,4 @@ namespace DCFApixels.DragonECS } } } -} - - -#if UNITY_EDITOR -namespace DCFApixels.DragonECS.Unity.Editors -{ - using DCFApixels.DragonECS.Unity.Internal; - using UnityEditor; - - [CustomEditor(typeof(EcsEntityConnect))] - [CanEditMultipleObjects] - public class EcsEntityEditor : Editor - { - private bool _isInit = false; - private EcsEntityConnect Target => (EcsEntityConnect)target; - private bool IsMultipleTargets => targets.Length > 1; - - private void Init() - { - if (_isInit) - { - return; - } - _isInit = true; - } - - public override void OnInspectorGUI() - { - Init(); - EcsEntityConnect[] targets = new EcsEntityConnect[this.targets.Length]; - for (int i = 0; i < targets.Length; i++) - { - targets[i] = (EcsEntityConnect)this.targets[i]; - } - DrawEntityInfo(targets); - - DrawTemplates(); - - DrawButtons(); - DrawComponents(targets); - } - - private void DrawEntityInfo(EcsEntityConnect[] targets) - { - float width = EditorGUIUtility.currentViewWidth; - float height = EditorGUIUtility.singleLineHeight; - Rect entityRect = GUILayoutUtility.GetRect(width, height + 3f); - var (entityInfoRect, statusRect) = RectUtility.VerticalSliceBottom(entityRect, 3f); - - Color w = Color.gray; - w.a = 0.6f; - Color b = Color.black; - b.a = 0.55f; - EditorGUI.DrawRect(entityInfoRect, w); - - var (idRect, genWorldRect) = RectUtility.HorizontalSliceLerp(entityInfoRect, 0.5f); - var (genRect, worldRect) = RectUtility.HorizontalSliceLerp(genWorldRect, 0.5f); - - idRect = RectUtility.AddPadding(idRect, 2, 1, 0, 0); - genRect = RectUtility.AddPadding(genRect, 1, 1, 0, 0); - worldRect = RectUtility.AddPadding(worldRect, 1, 2, 0, 0); - EditorGUI.DrawRect(idRect, b); - EditorGUI.DrawRect(genRect, b); - EditorGUI.DrawRect(worldRect, b); - - bool isConnected = Target.Entity.TryUnpack(out int id, out short gen, out short world); - - GUIStyle style = new GUIStyle(EditorStyles.numberField); - style.alignment = TextAnchor.MiddleCenter; - style.font = EditorStyles.boldFont; - if (IsMultipleTargets == false && isConnected) - { - Color statusColor = EcsGUI.GreenColor; - statusColor.a = 0.6f; - EditorGUI.DrawRect(statusRect, statusColor); - - EditorGUI.IntField(idRect, id, style); - EditorGUI.IntField(genRect, gen, style); - EditorGUI.IntField(worldRect, world, style); - } - else - { - Color statusColor = IsMultipleTargets ? new Color32(200, 200, 200, 255) : EcsGUI.RedColor; - statusColor.a = 0.6f; - EditorGUI.DrawRect(statusRect, statusColor); - - using (new EditorGUI.DisabledScope(true)) - { - GUI.Label(idRect, "Entity ID", style); - GUI.Label(genRect, "Generation", style); - GUI.Label(worldRect, "World ID", style); - } - } - } - - private void DrawTemplates() - { - var iterator = serializedObject.GetIterator(); - iterator.NextVisible(true); - bool enterChildren = true; - while (iterator.NextVisible(enterChildren)) - { - EditorGUILayout.PropertyField(iterator, true); - enterChildren = false; - } - } - - private void DrawButtons() - { - GUILayout.BeginHorizontal(); - if (GUILayout.Button("Autoset")) - { - Target.SetTemplates_Editor(Target.GetComponents()); - EditorUtility.SetDirty(target); - } - if (GUILayout.Button("Autoset Cascade")) - { - foreach (var item in Target.GetComponentsInChildren()) - { - item.SetTemplates_Editor(item.GetComponents()); - EditorUtility.SetDirty(item); - } - } - GUILayout.EndHorizontal(); - } - - private void DrawComponents(EcsEntityConnect[] targets) - { - if (IsMultipleTargets) - { - for (int i = 0; i < targets.Length; i++) - { - if (targets[i].IsConected == true) - { - EditorGUILayout.HelpBox("Multiple component editing is not available.", MessageType.Warning); - return; - } - } - } - if (Target.Entity.TryUnpack(out int entityID, out EcsWorld world)) - { - EcsGUI.Layout.DrawRuntimeComponents(entityID, world); - } - } - } -} -#endif \ No newline at end of file +} \ No newline at end of file diff --git a/src/Connectors/EcsWorldProvider.cs b/src/Connectors/EcsWorldProvider.cs index 48cbbbd..bd16af8 100644 --- a/src/Connectors/EcsWorldProvider.cs +++ b/src/Connectors/EcsWorldProvider.cs @@ -79,32 +79,4 @@ namespace DCFApixels.DragonECS protected virtual void OnWorldCreated(TWorld world) { } #endregion } -} - -#if UNITY_EDITOR -namespace DCFApixels.DragonECS.Unity.Editors -{ - [CustomEditor(typeof(EcsWorldProviderBase), true)] - [CanEditMultipleObjects] - public class EcsWorldProviderBaseEditor : Editor - { - private EcsWorldProviderBase Target => (EcsWorldProviderBase)target; - - public override void OnInspectorGUI() - { - base.OnInspectorGUI(); - if (Target.IsEmpty) - { - var style = EcsEditor.GetStyle(new Color32(255, 0, 75, 100)); - GUILayout.Box("Is Empty", style, GUILayout.ExpandWidth(true)); - } - else - { - var style = EcsEditor.GetStyle(new Color32(75, 255, 0, 100)); - EcsWorld world = Target.GetRaw(); - GUILayout.Box($"{world.GetMeta().Name} ( {world.id} )", style, GUILayout.ExpandWidth(true)); - } - } - } -} -#endif \ No newline at end of file +} \ No newline at end of file diff --git a/src/Connectors/Editor.meta b/src/Connectors/Editor.meta new file mode 100644 index 0000000..310c075 --- /dev/null +++ b/src/Connectors/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2593ccf9a57f4f045a7e3bf6a839f3c3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/Connectors/Editor/AutoEntityCreatorEditor.cs b/src/Connectors/Editor/AutoEntityCreatorEditor.cs new file mode 100644 index 0000000..07155c8 --- /dev/null +++ b/src/Connectors/Editor/AutoEntityCreatorEditor.cs @@ -0,0 +1,26 @@ +#if UNITY_EDITOR +using UnityEditor; +using UnityEngine; + +namespace DCFApixels.DragonECS.Unity.Editors +{ + [CustomEditor(typeof(AutoEntityCreator))] + [CanEditMultipleObjects] + public class AutoEntityCreatorEditor : Editor + { + public override void OnInspectorGUI() + { + base.OnInspectorGUI(); + if (GUILayout.Button("Autoset")) + { + foreach (var tr in targets) + { + AutoEntityCreator creator = (AutoEntityCreator)tr; + creator.Autoset_Editor(); + EditorUtility.SetDirty(creator); + } + } + } + } +} +#endif \ No newline at end of file diff --git a/src/Connectors/Editor/AutoEntityCreatorEditor.cs.meta b/src/Connectors/Editor/AutoEntityCreatorEditor.cs.meta new file mode 100644 index 0000000..ab1c1f5 --- /dev/null +++ b/src/Connectors/Editor/AutoEntityCreatorEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7e21fcbcfdafbb64d86bf965cd16c6b0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/Connectors/Editor/EcsEntityConnectEditor.cs b/src/Connectors/Editor/EcsEntityConnectEditor.cs new file mode 100644 index 0000000..72b4f81 --- /dev/null +++ b/src/Connectors/Editor/EcsEntityConnectEditor.cs @@ -0,0 +1,146 @@ +#if UNITY_EDITOR +using DCFApixels.DragonECS.Unity.Internal; +using UnityEditor; +using UnityEngine; + +namespace DCFApixels.DragonECS.Unity.Editors +{ + [CustomEditor(typeof(EcsEntityConnect))] + [CanEditMultipleObjects] + public class EcsEntityConnectEditor : Editor + { + private bool _isInit = false; + private EcsEntityConnect Target => (EcsEntityConnect)target; + private bool IsMultipleTargets => targets.Length > 1; + + private void Init() + { + if (_isInit) + { + return; + } + _isInit = true; + } + + public override void OnInspectorGUI() + { + Init(); + EcsEntityConnect[] targets = new EcsEntityConnect[this.targets.Length]; + for (int i = 0; i < targets.Length; i++) + { + targets[i] = (EcsEntityConnect)this.targets[i]; + } + DrawEntityInfo(targets); + + DrawTemplates(); + + DrawButtons(); + DrawComponents(targets); + } + + private void DrawEntityInfo(EcsEntityConnect[] targets) + { + //TODO Отрефакторить + float width = EditorGUIUtility.currentViewWidth; + float height = EditorGUIUtility.singleLineHeight; + Rect entityRect = GUILayoutUtility.GetRect(width, height + 3f); + var (entityInfoRect, statusRect) = RectUtility.VerticalSliceBottom(entityRect, 3f); + + Color w = Color.gray; + w.a = 0.6f; + Color b = Color.black; + b.a = 0.55f; + EditorGUI.DrawRect(entityInfoRect, w); + + var (idRect, genWorldRect) = RectUtility.HorizontalSliceLerp(entityInfoRect, 0.5f); + var (genRect, worldRect) = RectUtility.HorizontalSliceLerp(genWorldRect, 0.5f); + + idRect = RectUtility.AddPadding(idRect, 2, 1, 0, 0); + genRect = RectUtility.AddPadding(genRect, 1, 1, 0, 0); + worldRect = RectUtility.AddPadding(worldRect, 1, 2, 0, 0); + EditorGUI.DrawRect(idRect, b); + EditorGUI.DrawRect(genRect, b); + EditorGUI.DrawRect(worldRect, b); + + bool isConnected = Target.Entity.TryUnpack(out int id, out short gen, out short world); + + GUIStyle style = new GUIStyle(EditorStyles.numberField); + style.alignment = TextAnchor.MiddleCenter; + style.font = EditorStyles.boldFont; + if (IsMultipleTargets == false && isConnected) + { + Color statusColor = EcsGUI.GreenColor; + statusColor.a = 0.6f; + EditorGUI.DrawRect(statusRect, statusColor); + + EditorGUI.IntField(idRect, id, style); + EditorGUI.IntField(genRect, gen, style); + EditorGUI.IntField(worldRect, world, style); + } + else + { + Color statusColor = IsMultipleTargets ? new Color32(200, 200, 200, 255) : EcsGUI.RedColor; + statusColor.a = 0.6f; + EditorGUI.DrawRect(statusRect, statusColor); + + using (new EditorGUI.DisabledScope(true)) + { + GUI.Label(idRect, "Entity ID", style); + GUI.Label(genRect, "Generation", style); + GUI.Label(worldRect, "World ID", style); + } + } + } + + private void DrawTemplates() + { + var iterator = serializedObject.GetIterator(); + iterator.NextVisible(true); + bool enterChildren = true; + while (iterator.NextVisible(enterChildren)) + { + EditorGUILayout.PropertyField(iterator, true); + enterChildren = false; + } + } + + private void DrawButtons() + { + GUILayout.BeginHorizontal(); + if (GUILayout.Button("Autoset")) + { + Target.SetTemplates_Editor(Target.GetComponents()); + EditorUtility.SetDirty(target); + } + if (GUILayout.Button("Autoset Cascade")) + { + foreach (var item in Target.GetComponentsInChildren()) + { + item.SetTemplates_Editor(item.GetComponents()); + EditorUtility.SetDirty(item); + } + } + GUILayout.EndHorizontal(); + } + + private void DrawComponents(EcsEntityConnect[] targets) + { + if (IsMultipleTargets) + { + for (int i = 0; i < targets.Length; i++) + { + if (targets[i].IsConected == true) + { + EditorGUILayout.HelpBox("Multiple component editing is not available.", MessageType.Warning); + return; + } + } + } + if (Target.Entity.TryUnpack(out int entityID, out EcsWorld world)) + { + EcsGUI.Layout.DrawRuntimeComponents(entityID, world); + } + } + } +} +#endif \ No newline at end of file diff --git a/src/Connectors/Editor/EcsEntityConnectEditor.cs.meta b/src/Connectors/Editor/EcsEntityConnectEditor.cs.meta new file mode 100644 index 0000000..497dfeb --- /dev/null +++ b/src/Connectors/Editor/EcsEntityConnectEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 846d3d07f90835048902b412bfac73aa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/Connectors/Editor/EcsWorldProviderBaseEditor.cs b/src/Connectors/Editor/EcsWorldProviderBaseEditor.cs new file mode 100644 index 0000000..427660a --- /dev/null +++ b/src/Connectors/Editor/EcsWorldProviderBaseEditor.cs @@ -0,0 +1,30 @@ +#if UNITY_EDITOR +using UnityEditor; +using UnityEngine; + +namespace DCFApixels.DragonECS.Unity.Editors +{ + [CustomEditor(typeof(EcsWorldProviderBase), true)] + [CanEditMultipleObjects] + public class EcsWorldProviderBaseEditor : Editor + { + private EcsWorldProviderBase Target => (EcsWorldProviderBase)target; + + public override void OnInspectorGUI() + { + base.OnInspectorGUI(); + if (Target.IsEmpty) + { + var style = EcsEditor.GetStyle(new Color32(255, 0, 75, 100)); + GUILayout.Box("Is Empty", style, GUILayout.ExpandWidth(true)); + } + else + { + var style = EcsEditor.GetStyle(new Color32(75, 255, 0, 100)); + EcsWorld world = Target.GetRaw(); + GUILayout.Box($"{world.GetMeta().Name} ( {world.id} )", style, GUILayout.ExpandWidth(true)); + } + } + } +} +#endif \ No newline at end of file diff --git a/src/Connectors/Editor/EcsWorldProviderBaseEditor.cs.meta b/src/Connectors/Editor/EcsWorldProviderBaseEditor.cs.meta new file mode 100644 index 0000000..34cddd1 --- /dev/null +++ b/src/Connectors/Editor/EcsWorldProviderBaseEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1db1c2bb174625249a07a4cef8eff757 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/Debug/Editor/DebugMonitorPrefs.cs b/src/Debug/Editor/DebugMonitorPrefs.cs index 5b2e722..2923965 100644 --- a/src/Debug/Editor/DebugMonitorPrefs.cs +++ b/src/Debug/Editor/DebugMonitorPrefs.cs @@ -1,6 +1,6 @@ #if UNITY_EDITOR -using UnityEngine; using UnityEditor; +using UnityEngine; namespace DCFApixels.DragonECS.Unity.Editors { @@ -22,7 +22,7 @@ namespace DCFApixels.DragonECS.Unity.Editors private bool _isShowHidden = false; public bool IsShowHidden { - get => _isShowHidden; + get => _isShowHidden; set { _isShowHidden = value; diff --git a/src/EcsUnityConsts.cs b/src/EcsUnityConsts.cs index 72a6350..fda3692 100644 --- a/src/EcsUnityConsts.cs +++ b/src/EcsUnityConsts.cs @@ -2,6 +2,6 @@ { public static class EcsUnityConsts { - public const string INFO_MARK = "[i]"; + public const string INFO_MARK = "[D]"; } } diff --git a/src/Editor/EditorUtility.cs b/src/Editor/EditorUtility.cs index c0bc07c..8de4122 100644 --- a/src/Editor/EditorUtility.cs +++ b/src/Editor/EditorUtility.cs @@ -1,5 +1,4 @@ #if UNITY_EDITOR -using Codice.Utils; using DCFApixels.DragonECS.Unity.Internal; using System; using System.Reflection; @@ -201,7 +200,7 @@ namespace DCFApixels.DragonECS.Unity.Editors } } } - + expandMatrix.Up(); return changed; } diff --git a/src/Editor/EscEditorConsts.cs b/src/Editor/EscEditorConsts.cs index e6ff535..9307e9a 100644 --- a/src/Editor/EscEditorConsts.cs +++ b/src/Editor/EscEditorConsts.cs @@ -1,10 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace DCFApixels.DragonECS.Unity.Editors +namespace DCFApixels.DragonECS.Unity.Editors { internal static class EscEditorConsts { diff --git a/src/Editor/SOWrappers/RefEditorWrapper.cs b/src/Editor/SOWrappers/RefEditorWrapper.cs index 9ba3369..bab9af6 100644 --- a/src/Editor/SOWrappers/RefEditorWrapper.cs +++ b/src/Editor/SOWrappers/RefEditorWrapper.cs @@ -1,4 +1,4 @@ - #if UNITY_EDITOR +#if UNITY_EDITOR using System; using System.Runtime.CompilerServices; using UnityEngine; diff --git a/src/Editor/Utils.meta b/src/Editor/Utils.meta new file mode 100644 index 0000000..1ae538d --- /dev/null +++ b/src/Editor/Utils.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c36fbe915640753488e69c6e5d6efe92 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/Editor/ColorUtility.cs b/src/Editor/Utils/ColorUtility.cs similarity index 100% rename from src/Editor/ColorUtility.cs rename to src/Editor/Utils/ColorUtility.cs diff --git a/src/Editor/ColorUtility.cs.meta b/src/Editor/Utils/ColorUtility.cs.meta similarity index 83% rename from src/Editor/ColorUtility.cs.meta rename to src/Editor/Utils/ColorUtility.cs.meta index 22a57a0..c29ec5c 100644 --- a/src/Editor/ColorUtility.cs.meta +++ b/src/Editor/Utils/ColorUtility.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: daa1178cae0d21643b233d22f2c3e867 +guid: ff5cb33212a8c8a4eb5111cc17759e47 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/src/Editor/RectUtility.cs b/src/Editor/Utils/RectUtility.cs similarity index 100% rename from src/Editor/RectUtility.cs rename to src/Editor/Utils/RectUtility.cs diff --git a/src/Editor/RectUtility.cs.meta b/src/Editor/Utils/RectUtility.cs.meta similarity index 83% rename from src/Editor/RectUtility.cs.meta rename to src/Editor/Utils/RectUtility.cs.meta index f61539f..6a31900 100644 --- a/src/Editor/RectUtility.cs.meta +++ b/src/Editor/Utils/RectUtility.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 8e275376d670bdd4c986d661838ed6b4 +guid: a08af8a9e1192f44c8aedf88340cb663 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/src/EntityTemplate/Editor/EntityTemplateEditor.cs b/src/EntityTemplate/Editor/EntityTemplateEditor.cs index ec40dd5..b403085 100644 --- a/src/EntityTemplate/Editor/EntityTemplateEditor.cs +++ b/src/EntityTemplate/Editor/EntityTemplateEditor.cs @@ -68,7 +68,9 @@ namespace DCFApixels.DragonECS.Unity.Editors for (int i = 0; i < componentsProp.arraySize; i++) { if (componentsProp.GetArrayElementAtIndex(i).managedReferenceValue.GetType() == componentType) + { return; + } } componentsProp.InsertArrayElementAtIndex(0); @@ -102,6 +104,7 @@ namespace DCFApixels.DragonECS.Unity.Editors DrawTop(target); GUILayout.BeginVertical(EcsEditor.GetStyle(Color.black, 0.2f)); + GUILayout.Label("", GUILayout.Height(0), GUILayout.ExpandWidth(true)); for (int i = 0; i < componentsProp.arraySize; i++) { DrawComponentData(componentsProp.GetArrayElementAtIndex(i), i); @@ -158,27 +161,23 @@ namespace DCFApixels.DragonECS.Unity.Editors string description = template.Description; Color panelColor = template.Color.Desaturate(EscEditorConsts.COMPONENT_DRAWER_DESATURATE); - EditorGUI.BeginChangeCheck(); + Rect removeButtonRect = GUILayoutUtility.GetLastRect(); GUIContent label = new GUIContent(name); bool isEmpty = componentType.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).Length <= 0; - - float width = EditorGUIUtility.currentViewWidth; - float height = isEmpty ? EditorGUIUtility.singleLineHeight : EditorGUI.GetPropertyHeight(componentProperty, label, true); float padding = EditorGUIUtility.standardVerticalSpacing; - - Rect propertyFullRect = GUILayoutUtility.GetRect(width, height + padding * 3f); - propertyFullRect = RectUtility.AddPadding(propertyFullRect, padding / 2f); Color alphaPanelColor = panelColor; alphaPanelColor.a = EscEditorConsts.COMPONENT_DRAWER_ALPHA; - var (propertyRect, controlRect) = RectUtility.HorizontalSliceRight(propertyFullRect, RemoveButtonRect.width); - var (removeButtonRect, _) = RectUtility.VerticalSliceTop(controlRect, RemoveButtonRect.height); + EditorGUI.BeginChangeCheck(); + GUILayout.BeginVertical(EcsEditor.GetStyle(alphaPanelColor)); #region Draw Component Block - EditorGUI.DrawRect(propertyFullRect, alphaPanelColor); - propertyRect = RectUtility.AddPadding(propertyRect, padding); bool isRemoveComponent = false; + removeButtonRect.yMin = removeButtonRect.yMax; + removeButtonRect.yMax += RemoveButtonRect.height; + removeButtonRect.xMin = removeButtonRect.xMax - RemoveButtonRect.width; + removeButtonRect.center += Vector2.up * padding * 2f; if (GUI.Button(removeButtonRect, "x")) { isRemoveComponent = true; @@ -186,30 +185,31 @@ namespace DCFApixels.DragonECS.Unity.Editors if (isEmpty) { - GUI.Label(propertyRect, label); + GUILayout.Label(label); } else { - EditorGUI.PropertyField(propertyFullRect, componentProperty, label, true); + EditorGUILayout.PropertyField(componentProperty, label, true); } if (isRemoveComponent) { OnRemoveComponentAt(index); } - #endregion - if (!string.IsNullOrEmpty(description)) { Rect tooltipIconRect = TooltipIconRect; - tooltipIconRect.center = new Vector2(propertyRect.xMax - removeButtonRect.width / 2f, propertyRect.yMin + removeButtonRect.height / 2f); - GUIContent descriptionLabel = new GUIContent("( i )", description); + tooltipIconRect.center = removeButtonRect.center; + tooltipIconRect.center -= Vector2.right * tooltipIconRect.width; + GUIContent descriptionLabel = new GUIContent(EcsUnityConsts.INFO_MARK, description); GUI.Label(tooltipIconRect, descriptionLabel, EditorStyles.boldLabel); } + #endregion + GUILayout.EndVertical(); if (EditorGUI.EndChangeCheck()) { componentProperty.serializedObject.ApplyModifiedProperties(); - componentProperty.serializedObject.SetIsDifferentCacheDirty(); + EditorUtility.SetDirty(componentProperty.serializedObject.targetObject); } } @@ -225,7 +225,9 @@ namespace DCFApixels.DragonECS.Unity.Editors GUILayout.Label("", GUILayout.Width(removeButtonRect.width)); if (GUI.Button(removeButtonRect, "x", removeButtonStyle)) + { OnRemoveComponentAt(index); + } GUILayout.EndHorizontal(); } @@ -234,9 +236,13 @@ namespace DCFApixels.DragonECS.Unity.Editors { int lastSlashIndex = input.LastIndexOfAny(new char[] { '/', '\\' }); if (lastSlashIndex == -1) + { return input; + } else + { return input.Substring(lastSlashIndex + 1); + } } } diff --git a/src/EntityTemplate/Templates/ComponentTemplateBase.cs b/src/EntityTemplate/Templates/ComponentTemplateBase.cs index 9d12a76..0b5691e 100644 --- a/src/EntityTemplate/Templates/ComponentTemplateBase.cs +++ b/src/EntityTemplate/Templates/ComponentTemplateBase.cs @@ -56,7 +56,7 @@ namespace DCFApixels.DragonECS [Serializable] public abstract class ComponentTemplateBase : ComponentTemplateBase, IComponentTemplate { - private static TypeMetaDataCached _meta = EcsDebugUtility.GetCachedTypeMeta(); + private static TypeMeta _meta = EcsDebugUtility.GetTypeMeta(); [SerializeField] protected T component; @@ -142,7 +142,7 @@ namespace DCFApixels.DragonECS.Unity.Editors _types = types.ToArray(); foreach (var type in _types) { - EcsDebugUtility.GetCachedTypeMeta(type); + EcsDebugUtility.GetTypeMeta(type); } _dummies = new IComponentTemplate[_types.Length];