From 046a5600148e9e26c41e85c3e52fa0cd23476178 Mon Sep 17 00:00:00 2001 From: Mikhail <99481254+DCFApixels@users.noreply.github.com> Date: Wed, 14 Aug 2024 21:23:34 +0800 Subject: [PATCH] refactoring / fixes --- src/Debug/EcsDebugUtility.cs | 2 +- src/Debug/TypeMeta.cs | 2 +- src/EcsPipeline.Builder.cs | 34 ++++++++++++++++++++++---------- src/EcsRunner.cs | 1 - src/EcsWorld.cs | 2 +- src/Pools/EcsTagPool.cs | 6 ++++-- src/Utils/EcsPipelineTemplate.cs | 34 +++++++++----------------------- 7 files changed, 40 insertions(+), 41 deletions(-) diff --git a/src/Debug/EcsDebugUtility.cs b/src/Debug/EcsDebugUtility.cs index 6021c6e..0106081 100644 --- a/src/Debug/EcsDebugUtility.cs +++ b/src/Debug/EcsDebugUtility.cs @@ -65,7 +65,7 @@ namespace DCFApixels.DragonECS { return AutoToString(self, typeof(T), isWriteName); } - + //TODO сделать специальный вывод в виде названий констант для Enum-ов private static string AutoToString(object target, Type type, bool isWriteName) { diff --git a/src/Debug/TypeMeta.cs b/src/Debug/TypeMeta.cs index a8c252f..9ae6383 100644 --- a/src/Debug/TypeMeta.cs +++ b/src/Debug/TypeMeta.cs @@ -390,7 +390,7 @@ namespace DCFApixels.DragonECS } #endregion } -#endregion + #endregion } public enum EcsMemberType : byte diff --git a/src/EcsPipeline.Builder.cs b/src/EcsPipeline.Builder.cs index f59597c..338bc5c 100644 --- a/src/EcsPipeline.Builder.cs +++ b/src/EcsPipeline.Builder.cs @@ -179,7 +179,7 @@ namespace DCFApixels.DragonECS public readonly Injector.Builder Injector; public readonly Configurator Configs; - private AddParams _defaultAddParams; + private AddParams _defaultAddParams = new AddParams(BASIC_LAYER, 0, false); #region Properties private ReadOnlySpan SystemRecords @@ -205,6 +205,10 @@ namespace DCFApixels.DragonECS #endregion #region Add IEcsProcess + public Builder Add(IEcsProcess system) + { + return AddSystem_Internal(system, AddParams.Default); + } public Builder Add(IEcsProcess system, string layerName) { return AddSystem_Internal(system, new AddParams(layerName: layerName)); @@ -266,7 +270,7 @@ namespace DCFApixels.DragonECS _moduleSystemsStack = new Stack(4); } - if (_moduleSystemsStack.Count <= 0 && system != _moduleSystemsStack.Peek()) + if (_moduleSystemsStack.Count <= 0 || system != _moduleSystemsStack.Peek()) { _moduleSystemsStack.Push(system); AddModule_Internal(module, prms); @@ -296,6 +300,10 @@ namespace DCFApixels.DragonECS #endregion #region AddModule IEcsModule + public Builder AddModule(IEcsModule module) + { + return AddModule_Internal(module, AddParams.Default); + } public Builder AddModule(IEcsModule module, string layerName) { return AddModule_Internal(module, new AddParams(layerName: layerName)); @@ -347,15 +355,21 @@ namespace DCFApixels.DragonECS { prms = prms.Overwrite(overrideInterface.AddParams); } + var oldDefaultAddParams = _defaultAddParams; _defaultAddParams = prms.Overwrite(settedAddParams); module.Import(this); + _defaultAddParams = oldDefaultAddParams; return this; } #endregion #region Add Raw + public Builder Add(object raw) + { + return AddRaw_Internal(raw, AddParams.Default); + } public Builder Add(object raw, string layerName) { return AddRaw_Internal(raw, new AddParams(layerName: layerName)); @@ -437,7 +451,7 @@ namespace DCFApixels.DragonECS //_systemRecordsInrement + otherRecord.addOrder смещает порядок так что новые системы встают в конец очереди, но сохраняют порядок addOrder foreach (var otherRecord in other.SystemRecords) { - AddRecord_Internal(otherRecord.system, otherRecord.layer, otherRecord.sortOrder, otherRecord.isUnique, _systemRecordsInrement + otherRecord.addOrder); + AddRecord_Internal(otherRecord.system, otherRecord.layerName, otherRecord.sortOrder, otherRecord.isUnique, _systemRecordsInrement + otherRecord.addOrder); } _systemRecordsInrement += other._systemRecordsInrement; } @@ -447,7 +461,7 @@ namespace DCFApixels.DragonECS private void RemoveAt(int index) { ref var slot = ref _systemRecords[index]; - _layerLists[slot.layer].lasyInitSystemsCount--; + _layerLists[slot.layerName].lasyInitSystemsCount--; slot = _systemRecords[--_systemRecordsCount]; } public Builder Remove() @@ -501,7 +515,7 @@ namespace DCFApixels.DragonECS for (int i = 0, iMax = _systemRecordsCount; i < iMax; i++) { ref var record = ref _systemRecords[i]; - var list = _layerLists[record.layer]; + var list = _layerLists[record.layerName]; if (list.IsInit == false) { list = basicLayerList; @@ -881,11 +895,11 @@ namespace DCFApixels.DragonECS var records = SystemRecords; EcsPipelineTemplate result = new EcsPipelineTemplate(); result.layers = new string[Layers.Count]; - result.systems = new EcsPipelineTemplate.SystemRecord[records.Length]; + result.systems = new EcsPipelineTemplate.AddCommand[records.Length]; for (int i = 0; i < records.Length; i++) { var r = records[i]; - result.systems[i] = new EcsPipelineTemplate.SystemRecord(r.system, r.layer, r.sortOrder, r.isUnique); + result.systems[i] = new EcsPipelineTemplate.AddCommand(r.system, new AddParams(r.layerName, r.sortOrder, r.isUnique)); } return result; @@ -896,14 +910,14 @@ namespace DCFApixels.DragonECS private readonly struct SystemRecord : IComparable { public readonly IEcsProcess system; - public readonly string layer; + public readonly string layerName; public readonly int addOrder; public readonly int sortOrder; public readonly bool isUnique; - public SystemRecord(IEcsProcess system, string layer, int addOrder, int sortOrder, bool isUnique) + public SystemRecord(IEcsProcess system, string layerName, int addOrder, int sortOrder, bool isUnique) { this.system = system; - this.layer = layer; + this.layerName = layerName; this.addOrder = addOrder; this.sortOrder = sortOrder; this.isUnique = isUnique; diff --git a/src/EcsRunner.cs b/src/EcsRunner.cs index fe22179..3129093 100644 --- a/src/EcsRunner.cs +++ b/src/EcsRunner.cs @@ -1,5 +1,4 @@ using DCFApixels.DragonECS.Internal; -using DCFApixels.DragonECS.PoolsCore; using DCFApixels.DragonECS.RunnersCore; using System; using System.Linq; diff --git a/src/EcsWorld.cs b/src/EcsWorld.cs index 24ac88e..9bef4af 100644 --- a/src/EcsWorld.cs +++ b/src/EcsWorld.cs @@ -555,7 +555,7 @@ namespace DCFApixels.DragonECS { if (_groups[i].TryGetTarget(out EcsGroup group)) { - if(group.IsReleased) + if (group.IsReleased) { group.OnReleaseDelEntityBuffer_Internal(buffer); } diff --git a/src/Pools/EcsTagPool.cs b/src/Pools/EcsTagPool.cs index 8c0908b..ecfefe5 100644 --- a/src/Pools/EcsTagPool.cs +++ b/src/Pools/EcsTagPool.cs @@ -2,8 +2,10 @@ using DCFApixels.DragonECS.PoolsCore; using System; using System.Collections; using System.Collections.Generic; -using System.Reflection; using System.Runtime.CompilerServices; +#if (DEBUG && !DISABLE_DEBUG) +using System.Reflection; +#endif #if ENABLE_IL2CPP using Unity.IL2CPP.CompilerServices; #endif @@ -42,7 +44,7 @@ namespace DCFApixels.DragonECS private EcsWorld.PoolsMediator _mediator; #region CheckValide -#if DEBUG +#if (DEBUG && !DISABLE_DEBUG) private static bool _isInvalidType; static EcsTagPool() { diff --git a/src/Utils/EcsPipelineTemplate.cs b/src/Utils/EcsPipelineTemplate.cs index 09c147e..73e9b4c 100644 --- a/src/Utils/EcsPipelineTemplate.cs +++ b/src/Utils/EcsPipelineTemplate.cs @@ -8,43 +8,27 @@ namespace DCFApixels.DragonECS public class EcsPipelineTemplate : IEcsModule { [DataMember] public string[] layers; - [DataMember] public SystemRecord[] systems; + [DataMember] public AddCommand[] systems; void IEcsModule.Import(EcsPipeline.Builder b) { b.Layers.MergeWith(layers); foreach (var s in systems) { - if (s.system == null) { continue; } + if (s.target == null) { continue; } - int? sortOrder = s.isCustomSortOrder ? s.sortOrder : default(int?); - if (s.isUnique) - { - b.AddUnique(s.system, s.layer, sortOrder); - } - else - { - b.Add(s.system, s.layer, sortOrder); - } + b.Add(s.target, s.parameters); } } - [Serializable] [DataContract] - public struct SystemRecord + public struct AddCommand { - [DataMember] public IEcsProcess system; - [DataMember] public string layer; - [DataMember] public int sortOrder; - [DataMember] public bool isCustomSortOrder; - [DataMember] public bool isUnique; - public int? NullableSortOrder { get { return isCustomSortOrder ? sortOrder : default(int?); } } - public SystemRecord(IEcsProcess system, string layer, int? sortOrder, bool isUnique) + [DataMember] public object target; + [DataMember] public AddParams parameters; + public AddCommand(object target, AddParams parameters) { - this.system = system; - this.layer = layer; - this.sortOrder = sortOrder.HasValue ? sortOrder.Value : 0; - isCustomSortOrder = sortOrder.HasValue; - this.isUnique = isUnique; + this.target = target; + this.parameters = parameters; } } }