Merge branch 'dev'

This commit is contained in:
Mikhail 2026-03-17 16:19:02 +08:00
commit 9401455046
16 changed files with 52 additions and 49 deletions

View File

@ -32,7 +32,7 @@ namespace DCFApixels.DragonECS
public static implicit operator UnityComponent<T>(T a) { return new UnityComponent<T>(a); }
public override string ToString()
{
return $"UnityComponent<{typeof(T).ToMeta().TypeName}>";
return $"UnityComponent<{typeof(T).GetMeta().TypeName}>";
}
}

View File

@ -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<EcsEntityConnect>();
}
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<EcsEntityConnect>();
}
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<ScriptableEntityTemplateBase>();
[SerializeField]
private MonoEntityTemplateBase[] _monoTemplates;
private MonoEntityTemplateBase[] _monoTemplates = System.Array.Empty<MonoEntityTemplateBase>();
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<EcsEntityConnect>())
{
@ -258,27 +261,34 @@ namespace DCFApixels.DragonECS
IEnumerable<MonoEntityTemplateBase> 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<MonoEntityTemplateBase> GetTemplatesFor(Transform parent)
private static (int Count, IEnumerable<MonoEntityTemplateBase> Range) GetTemplatesFor(Transform parent)
{
IEnumerable<MonoEntityTemplateBase> result = parent.GetComponents<MonoEntityTemplateBase>();
(int Count, IEnumerable<MonoEntityTemplateBase> Range) result;
result.Count = 0;
result.Range = parent.GetComponents<MonoEntityTemplateBase>();
for (int i = 0; i < parent.childCount; i++)
{
var child = parent.GetChild(i);
if (child.TryGetComponent<EcsEntityConnect>(out _))
if (child.TryGetComponent<EcsEntityConnect>(out _) == false)
{
return Enumerable.Empty<MonoEntityTemplateBase>();
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;
}

View File

@ -31,11 +31,11 @@ namespace DCFApixels.DragonECS
Connect = connect;
}
void IEcsComponentLifecycle<GameObjectConnect>.Enable(ref GameObjectConnect component)
void IEcsComponentLifecycle<GameObjectConnect>.OnAdd(ref GameObjectConnect component, short worldID, int entityID)
{
component = default;
}
void IEcsComponentLifecycle<GameObjectConnect>.Disable(ref GameObjectConnect component)
void IEcsComponentLifecycle<GameObjectConnect>.OnDel(ref GameObjectConnect component, short worldID, int entityID)
{
if (component.Connect != null)
{

View File

@ -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))
{

View File

@ -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;

View File

@ -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
{

View File

@ -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);

View File

@ -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<PipelineMonitor>();
Object.DontDestroyOnLoad(_monitor);
_monitor.Set(Pipeline);

View File

@ -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;

View File

@ -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);
}

View File

@ -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;

View File

@ -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))

View File

@ -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))
{

View File

@ -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<T> : ComponentTemplateBase, ICloneable
where T : struct
{
protected static readonly TypeMeta Meta = EcsDebugUtility.GetTypeMeta<T>();
protected static readonly bool _isHasIEcsComponentLifecycle;
protected static readonly IEcsComponentLifecycle<T> _iEcsComponentLifecycle;
private static bool _defaultValueTypeInit = false;
private static T _defaultValueType;
@ -93,11 +91,6 @@ namespace DCFApixels.DragonECS
return _defaultValueType;
}
}
static ComponentTemplateBase()
{
_isHasIEcsComponentLifecycle = EcsComponentLifecycleHandler<T>.isHasHandler;
_iEcsComponentLifecycle = EcsComponentLifecycleHandler<T>.instance;
}
[SerializeField]
protected T component = DefaultValueType;

View File

@ -27,7 +27,7 @@ namespace DCFApixels.DragonECS.Unity.Docs
List<DragonDocsMeta> metas = new List<DragonDocsMeta>(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);

View File

@ -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));
}