From 51735b9ce032a9a6ce33e6094451d8bd8b40c0d3 Mon Sep 17 00:00:00 2001 From: Mikhail <99481254+DCFApixels@users.noreply.github.com> Date: Mon, 2 Mar 2026 17:13:11 +0800 Subject: [PATCH 1/2] Update EcsEntityConnect.cs --- src/Connectors/EcsEntityConnect.cs | 50 ++++++++++++++++++------------ 1 file changed, 30 insertions(+), 20 deletions(-) diff --git a/src/Connectors/EcsEntityConnect.cs b/src/Connectors/EcsEntityConnect.cs index 8a53fb6..ecf9a13 100644 --- a/src/Connectors/EcsEntityConnect.cs +++ b/src/Connectors/EcsEntityConnect.cs @@ -19,44 +19,47 @@ namespace DCFApixels.DragonECS public static class EcsConnect { [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void Connect(this Component cmp, entlong entity, bool applyTemplates) + public static EcsEntityConnect Connect(this Component cmp, entlong entity, bool applyTemplates) { - Connect(entity, cmp, applyTemplates); + return Connect(entity, cmp, applyTemplates); } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void Connect(this entlong entity, Component cmp, bool applyTemplates) + public static EcsEntityConnect Connect(this entlong entity, Component cmp, bool applyTemplates) { if (cmp.TryGetComponent(out EcsEntityConnect connect) == false) { connect = cmp.gameObject.AddComponent(); } connect.ConnectWith(entity, applyTemplates); + return connect; } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void Connect(this GameObject go, entlong entity, bool applyTemplates) + public static EcsEntityConnect Connect(this GameObject go, entlong entity, bool applyTemplates) { - Connect(entity, go, applyTemplates); + return Connect(entity, go, applyTemplates); } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void Connect(this entlong entity, GameObject go, bool applyTemplates) + public static EcsEntityConnect Connect(this entlong entity, GameObject go, bool applyTemplates) { if (go.TryGetComponent(out EcsEntityConnect connect) == false) { connect = go.AddComponent(); } connect.ConnectWith(entity, applyTemplates); + return connect; } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void Connect(this EcsEntityConnect connect, entlong entity, bool applyTemplates) + public static EcsEntityConnect Connect(this EcsEntityConnect connect, entlong entity, bool applyTemplates) { - Connect(entity, connect, applyTemplates); + return Connect(entity, connect, applyTemplates); } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void Connect(this entlong entity, EcsEntityConnect connect, bool applyTemplates) + public static EcsEntityConnect Connect(this entlong entity, EcsEntityConnect connect, bool applyTemplates) { connect.ConnectWith(entity, applyTemplates); + return connect; } } @@ -77,9 +80,9 @@ namespace DCFApixels.DragonECS [SerializeField] private bool _deleteEntityWithDestroy = false; [SerializeField] - private ScriptableEntityTemplateBase[] _scriptableTemplates; + private ScriptableEntityTemplateBase[] _scriptableTemplates = System.Array.Empty(); [SerializeField] - private MonoEntityTemplateBase[] _monoTemplates; + private MonoEntityTemplateBase[] _monoTemplates = System.Array.Empty(); private bool _isConnectInvoked = false; @@ -226,12 +229,12 @@ namespace DCFApixels.DragonECS #region Editor #if UNITY_EDITOR [ContextMenu("Autoset")] - internal void Autoset_Editor() + public void Autoset_Editor() { Autoset(this); } [ContextMenu("Autoset Cascade")] - internal void AutosetCascade_Editor() + public void AutosetCascade_Editor() { foreach (var item in GetComponentsInChildren()) { @@ -258,27 +261,34 @@ namespace DCFApixels.DragonECS IEnumerable result; if (target.MonoTemplates != null && target.MonoTemplates.Count() > 0) { - result = target.MonoTemplates.Where(o => o != null).Union(GetTemplatesFor(target.transform)); + result = target.MonoTemplates.Where(o => o != null).Union(GetTemplatesFor(target.transform).Range); } else { - result = GetTemplatesFor(target.transform); + result = GetTemplatesFor(target.transform).Range; } target._monoTemplates = result.ToArray(); EditorUtility.SetDirty(target); } - private static IEnumerable GetTemplatesFor(Transform parent) + private static (int Count, IEnumerable Range) GetTemplatesFor(Transform parent) { - IEnumerable result = parent.GetComponents(); + (int Count, IEnumerable Range) result; + result.Count = 0; + result.Range = parent.GetComponents(); + for (int i = 0; i < parent.childCount; i++) { var child = parent.GetChild(i); - if (child.TryGetComponent(out _)) + if (child.TryGetComponent(out _) == false) { - return Enumerable.Empty(); + var concated = GetTemplatesFor(child); + if (concated.Count > 0) + { + result.Range = result.Range.Concat(concated.Range); + result.Count += concated.Count; + } } - result = result.Concat(GetTemplatesFor(child)); } return result; } From f352ec0d92d2c98776ce19fe02d5c8f66de5a354 Mon Sep 17 00:00:00 2001 From: Mikhail <99481254+DCFApixels@users.noreply.github.com> Date: Sun, 15 Mar 2026 21:57:40 +0800 Subject: [PATCH 2/2] update --- src/Buildin/UnityComponent.cs | 2 +- src/Connectors/GameObjectConnect.cs | 4 ++-- src/DebugUtils/Monitors/Editor/PipelineMonitorEditor.cs | 4 ++-- .../Monitors/Editor/PipelineProcessesMonitorEditor.cs | 2 +- src/DebugUtils/Monitors/Editor/WorldMonitorEditor.cs | 2 +- .../Monitors/Editor/WorldQueriesMonitorEditor.cs | 4 ++-- src/DebugUtils/Monitors/PipelineMonitor.cs | 2 +- src/Internal/Editor/EcsGUI.cs | 4 ++-- src/Internal/Editor/MetaObjectsDropDown.cs | 6 +++--- src/Internal/Editor/RuntimeComponentsDrawer.cs | 4 ++-- .../Editor/ComponentTemplatePropertyDrawer.cs | 2 +- .../EntityTemplate/Editor/EntityTemplateEditor.cs | 2 +- .../EntityTemplate/Templates/ComponentTemplateBase.cs | 9 +-------- src/Tools/DragonDocs/DragonDocs.cs | 2 +- src/Tools/DragonDocs/Editors/DragonDocsWindow.cs | 2 +- 15 files changed, 22 insertions(+), 29 deletions(-) diff --git a/src/Buildin/UnityComponent.cs b/src/Buildin/UnityComponent.cs index 9d53a3d..7a414a5 100644 --- a/src/Buildin/UnityComponent.cs +++ b/src/Buildin/UnityComponent.cs @@ -32,7 +32,7 @@ namespace DCFApixels.DragonECS public static implicit operator UnityComponent(T a) { return new UnityComponent(a); } public override string ToString() { - return $"UnityComponent<{typeof(T).ToMeta().TypeName}>"; + return $"UnityComponent<{typeof(T).GetMeta().TypeName}>"; } } diff --git a/src/Connectors/GameObjectConnect.cs b/src/Connectors/GameObjectConnect.cs index dd30270..d83c2a1 100644 --- a/src/Connectors/GameObjectConnect.cs +++ b/src/Connectors/GameObjectConnect.cs @@ -31,11 +31,11 @@ namespace DCFApixels.DragonECS Connect = connect; } - void IEcsComponentLifecycle.Enable(ref GameObjectConnect component) + void IEcsComponentLifecycle.OnAdd(ref GameObjectConnect component, short worldID, int entityID) { component = default; } - void IEcsComponentLifecycle.Disable(ref GameObjectConnect component) + void IEcsComponentLifecycle.OnDel(ref GameObjectConnect component, short worldID, int entityID) { if (component.Connect != null) { diff --git a/src/DebugUtils/Monitors/Editor/PipelineMonitorEditor.cs b/src/DebugUtils/Monitors/Editor/PipelineMonitorEditor.cs index 909eb3e..dfa1fd4 100644 --- a/src/DebugUtils/Monitors/Editor/PipelineMonitorEditor.cs +++ b/src/DebugUtils/Monitors/Editor/PipelineMonitorEditor.cs @@ -139,7 +139,7 @@ namespace DCFApixels.DragonECS.Unity.Editors } Type type = system.GetType(); - TypeMeta meta = type.ToMeta(); + TypeMeta meta = type.GetMeta(); if (CheckIsHidden(meta)) { @@ -162,7 +162,7 @@ namespace DCFApixels.DragonECS.Unity.Editors private void DrawRunner(IEcsRunner runner, int index) { Type type = runner.GetType(); - TypeMeta meta = type.ToMeta(); + TypeMeta meta = type.GetMeta(); if (CheckIsHidden(meta)) { diff --git a/src/DebugUtils/Monitors/Editor/PipelineProcessesMonitorEditor.cs b/src/DebugUtils/Monitors/Editor/PipelineProcessesMonitorEditor.cs index 360142c..751b026 100644 --- a/src/DebugUtils/Monitors/Editor/PipelineProcessesMonitorEditor.cs +++ b/src/DebugUtils/Monitors/Editor/PipelineProcessesMonitorEditor.cs @@ -33,7 +33,7 @@ namespace DCFApixels.DragonECS.Unity.Editors var system = _systemsList[i]; foreach (var interfaceType in system.meta.Type.GetInterfaces()) { - TypeMeta meta = interfaceType.ToMeta(); + TypeMeta meta = interfaceType.GetMeta(); if (SYSTEM_INTERFACE_TYPE.IsAssignableFrom(interfaceType) && SYSTEM_INTERFACE_TYPE != interfaceType && (IsShowHidden || meta.IsHidden == false)) { ProcessData data; diff --git a/src/DebugUtils/Monitors/Editor/WorldMonitorEditor.cs b/src/DebugUtils/Monitors/Editor/WorldMonitorEditor.cs index ea734fc..88e1e8d 100644 --- a/src/DebugUtils/Monitors/Editor/WorldMonitorEditor.cs +++ b/src/DebugUtils/Monitors/Editor/WorldMonitorEditor.cs @@ -57,7 +57,7 @@ namespace DCFApixels.DragonECS.Unity.Editors sb.Append($"{SEPARATOR}"); if (pool.IsNullOrDummy() == false) { - sb.Append(pool.ComponentType.ToMeta().TypeName); + sb.Append(pool.ComponentType.GetMeta().TypeName); } else { diff --git a/src/DebugUtils/Monitors/Editor/WorldQueriesMonitorEditor.cs b/src/DebugUtils/Monitors/Editor/WorldQueriesMonitorEditor.cs index 116fba8..9445f73 100644 --- a/src/DebugUtils/Monitors/Editor/WorldQueriesMonitorEditor.cs +++ b/src/DebugUtils/Monitors/Editor/WorldQueriesMonitorEditor.cs @@ -54,7 +54,7 @@ namespace DCFApixels.DragonECS.Unity.Editors sb.Append($"{SEPARATOR}"); if (pool.IsNullOrDummy() == false) { - sb.Append(pool.ComponentType.ToMeta().TypeName); + sb.Append(pool.ComponentType.GetMeta().TypeName); } else { @@ -185,7 +185,7 @@ namespace DCFApixels.DragonECS.Unity.Editors foreach (var inc in ids) { Type type = Target.World.GetComponentType(inc); - TypeMeta meta = type.ToMeta(); + TypeMeta meta = type.GetMeta(); Color color = EcsGUI.SelectPanelColor(meta, i, 9); diff --git a/src/DebugUtils/Monitors/PipelineMonitor.cs b/src/DebugUtils/Monitors/PipelineMonitor.cs index feced3e..62d8727 100644 --- a/src/DebugUtils/Monitors/PipelineMonitor.cs +++ b/src/DebugUtils/Monitors/PipelineMonitor.cs @@ -34,7 +34,7 @@ namespace DCFApixels.DragonECS.Unity.Internal public void Init() { - TypeMeta meta = typeof(EcsPipeline).ToMeta(); + TypeMeta meta = typeof(EcsPipeline).GetMeta(); _monitor = new GameObject($"{UnityEditorUtility.TransformToUpperName(meta.Name)}").AddComponent(); Object.DontDestroyOnLoad(_monitor); _monitor.Set(Pipeline); diff --git a/src/Internal/Editor/EcsGUI.cs b/src/Internal/Editor/EcsGUI.cs index c4a05bd..ee402a9 100644 --- a/src/Internal/Editor/EcsGUI.cs +++ b/src/Internal/Editor/EcsGUI.cs @@ -875,7 +875,7 @@ namespace DCFApixels.DragonECS.Unity.Editors #region SelectPanelColor public static Color SelectPanelColor(ITypeMeta meta, int index, int total) { - var trueMeta = meta.Type.ToMeta(); + var trueMeta = meta.Type.GetMeta(); bool isCustomColor = trueMeta.IsCustomColor || meta.Color != trueMeta.Color; return SelectPanelColor(meta.Color, isCustomColor, index, total); } @@ -1087,7 +1087,7 @@ namespace DCFApixels.DragonECS.Unity.Editors } if (isAssignable) { - ITypeMeta meta = type.ToMeta(); + ITypeMeta meta = type.GetMeta(); string description = meta.Description.Text; MetaGroup group = meta.Group; var splitedGroup = group.Splited; diff --git a/src/Internal/Editor/MetaObjectsDropDown.cs b/src/Internal/Editor/MetaObjectsDropDown.cs index afe5f8a..f8eb6a0 100644 --- a/src/Internal/Editor/MetaObjectsDropDown.cs +++ b/src/Internal/Editor/MetaObjectsDropDown.cs @@ -35,7 +35,7 @@ namespace DCFApixels.DragonECS.Unity.Editors } } return result; - }).Select(o => (o, (ITypeMeta)o.ToMeta())); + }).Select(o => (o, (ITypeMeta)o.GetMeta())); Setup(itemMetaPairs); } @@ -99,7 +99,7 @@ namespace DCFApixels.DragonECS.Unity.Editors } else { - meta = dummy.Type.ToMeta(); + meta = dummy.Type.GetMeta(); } return (dummy, meta); }); @@ -174,7 +174,7 @@ namespace DCFApixels.DragonECS.Unity.Editors { IEnumerable<(IEcsPool pool, ITypeMeta meta)> itemMetaPairs = pools.Select(pool => { - return (pool, (ITypeMeta)pool.ComponentType.ToMeta()); + return (pool, (ITypeMeta)pool.ComponentType.GetMeta()); }); Setup(itemMetaPairs); } diff --git a/src/Internal/Editor/RuntimeComponentsDrawer.cs b/src/Internal/Editor/RuntimeComponentsDrawer.cs index de23e32..fb6ca78 100644 --- a/src/Internal/Editor/RuntimeComponentsDrawer.cs +++ b/src/Internal/Editor/RuntimeComponentsDrawer.cs @@ -259,7 +259,7 @@ namespace DCFApixels.DragonECS.Unity.Editors.X foreach (var cmp in cmps) { index++; - var meta = cmp.ComponentType.ToMeta(); + var meta = cmp.ComponentType.GetMeta(); if (meta.IsHidden == false || IsShowHidden) { Type componentType = cmp.ComponentType; @@ -372,7 +372,7 @@ namespace DCFApixels.DragonECS.Unity.Editors.X } private void DrawRuntimeComponent(int entityID, IEcsPool pool, int total, int index) { - var meta = pool.ComponentType.ToMeta(); + var meta = pool.ComponentType.GetMeta(); if (meta.IsHidden == false || IsShowHidden) { Type componentType = pool.ComponentType; diff --git a/src/Templates/EntityTemplate/Editor/ComponentTemplatePropertyDrawer.cs b/src/Templates/EntityTemplate/Editor/ComponentTemplatePropertyDrawer.cs index 8591dd0..ff64535 100644 --- a/src/Templates/EntityTemplate/Editor/ComponentTemplatePropertyDrawer.cs +++ b/src/Templates/EntityTemplate/Editor/ComponentTemplatePropertyDrawer.cs @@ -128,7 +128,7 @@ namespace DCFApixels.DragonECS.Unity.Editors return; } - ITypeMeta meta = template is ITypeMeta metaOverride ? metaOverride : template.Type.ToMeta(); + ITypeMeta meta = template is ITypeMeta metaOverride ? metaOverride : template.Type.GetMeta(); Rect rect = position; if (EcsGUI.DrawTypeMetaBlock(ref rect, rootProperty, meta)) diff --git a/src/Templates/EntityTemplate/Editor/EntityTemplateEditor.cs b/src/Templates/EntityTemplate/Editor/EntityTemplateEditor.cs index 4c74f71..3869699 100644 --- a/src/Templates/EntityTemplate/Editor/EntityTemplateEditor.cs +++ b/src/Templates/EntityTemplate/Editor/EntityTemplateEditor.cs @@ -93,7 +93,7 @@ namespace DCFApixels.DragonECS.Unity.Editors var componentProp = GetTargetProperty(prop); - ITypeMeta meta = template is ITypeMeta metaOverride ? metaOverride : template.Type.ToMeta(); + ITypeMeta meta = template is ITypeMeta metaOverride ? metaOverride : template.Type.GetMeta(); if (EcsGUI.DrawTypeMetaElementBlock(ref rect, _componentsProp, index, componentProp, meta)) { diff --git a/src/Templates/EntityTemplate/Templates/ComponentTemplateBase.cs b/src/Templates/EntityTemplate/Templates/ComponentTemplateBase.cs index 0c0c28a..ecdeefc 100644 --- a/src/Templates/EntityTemplate/Templates/ComponentTemplateBase.cs +++ b/src/Templates/EntityTemplate/Templates/ComponentTemplateBase.cs @@ -1,7 +1,6 @@ #if DISABLE_DEBUG #undef DEBUG #endif -using DCFApixels.DragonECS.Core; using System; using System.Buffers; using System.Collections.Generic; @@ -60,10 +59,9 @@ namespace DCFApixels.DragonECS [Serializable] [StructLayout(LayoutKind.Sequential)] public abstract class ComponentTemplateBase : ComponentTemplateBase, ICloneable + where T : struct { protected static readonly TypeMeta Meta = EcsDebugUtility.GetTypeMeta(); - protected static readonly bool _isHasIEcsComponentLifecycle; - protected static readonly IEcsComponentLifecycle _iEcsComponentLifecycle; private static bool _defaultValueTypeInit = false; private static T _defaultValueType; @@ -93,11 +91,6 @@ namespace DCFApixels.DragonECS return _defaultValueType; } } - static ComponentTemplateBase() - { - _isHasIEcsComponentLifecycle = EcsComponentLifecycleHandler.isHasHandler; - _iEcsComponentLifecycle = EcsComponentLifecycleHandler.instance; - } [SerializeField] protected T component = DefaultValueType; diff --git a/src/Tools/DragonDocs/DragonDocs.cs b/src/Tools/DragonDocs/DragonDocs.cs index 1795f05..87ca7b6 100644 --- a/src/Tools/DragonDocs/DragonDocs.cs +++ b/src/Tools/DragonDocs/DragonDocs.cs @@ -27,7 +27,7 @@ namespace DCFApixels.DragonECS.Unity.Docs List metas = new List(256); foreach (var type in GetTypes()) { - metas.Add(new DragonDocsMeta(type.ToMeta())); + metas.Add(new DragonDocsMeta(type.GetMeta())); } DragonDocsMeta[] array = metas.ToArray(); Array.Sort(array); diff --git a/src/Tools/DragonDocs/Editors/DragonDocsWindow.cs b/src/Tools/DragonDocs/Editors/DragonDocsWindow.cs index 37fc775..5835f23 100644 --- a/src/Tools/DragonDocs/Editors/DragonDocsWindow.cs +++ b/src/Tools/DragonDocs/Editors/DragonDocsWindow.cs @@ -261,7 +261,7 @@ namespace DCFApixels.DragonECS.Unity.Docs.Editors { GUILayout.TextArea(IsUseCustomNames ? meta.Name : meta.TypeName, EditorStyles.boldLabel, GUILayout.ExpandWidth(false)); - if (meta.TryGetSourceType(out System.Type targetType) && ScriptsCache.TryGetScriptAsset(targetType.ToMeta(), out MonoScript script)) + if (meta.TryGetSourceType(out System.Type targetType) && ScriptsCache.TryGetScriptAsset(targetType.GetMeta(), out MonoScript script)) { EcsGUI.Layout.ScriptAssetButton(script, GUILayout.Width(18f)); }