From 3235b9f5b84b18d66b3118d3fcbe273c60cc7a1b Mon Sep 17 00:00:00 2001 From: Mikhail <99481254+DCFApixels@users.noreply.github.com> Date: Mon, 8 Jul 2024 20:31:42 +0800 Subject: [PATCH] update --- src/EcsPipeline.Builder.cs | 82 ++++++++++++++++++++++++-------------- src/EcsPipeline.cs | 11 +---- 2 files changed, 53 insertions(+), 40 deletions(-) diff --git a/src/EcsPipeline.Builder.cs b/src/EcsPipeline.Builder.cs index 23c4256..32be1ce 100644 --- a/src/EcsPipeline.Builder.cs +++ b/src/EcsPipeline.Builder.cs @@ -4,6 +4,7 @@ using System; using System.Collections; using System.Collections.Generic; using System.Linq; +using static DCFApixels.DragonECS.EcsConsts; namespace DCFApixels.DragonECS { @@ -11,25 +12,26 @@ namespace DCFApixels.DragonECS { public class Builder : IEcsModule { - private const int KEYS_CAPACITY = 4; - private const string BASIC_LAYER = EcsConsts.BASIC_LAYER; - private SystemRecord[] _systemRecords = new SystemRecord[256]; private int _systemRecordsCount = 0; private int _systemRecordsInrement = 0; - private Dictionary _layerLists = new Dictionary(KEYS_CAPACITY); - + private readonly Dictionary _layerLists = new Dictionary(8); private readonly List _initDeclaredRunners = new List(4); public readonly LayerList Layers; public readonly Injector.Builder Injector; public readonly Configurator Configs; + private string _defaultLayer = BASIC_LAYER; + private int _defaultOrder = 0; + + #region Properties private ReadOnlySpan SystemRecords { get { return new ReadOnlySpan(_systemRecords, 0, _systemRecordsCount); } } + #endregion #region Constructors public Builder(IConfigContainerWriter config = null) @@ -43,9 +45,7 @@ namespace DCFApixels.DragonECS Injector.AddNode(); Injector.AddNode(); - Layers = new LayerList(this, BASIC_LAYER); - Layers.Insert(EcsConsts.BASIC_LAYER, EcsConsts.PRE_BEGIN_LAYER, EcsConsts.BEGIN_LAYER); - Layers.InsertAfter(EcsConsts.BASIC_LAYER, EcsConsts.END_LAYER, EcsConsts.POST_END_LAYER); + Layers = new LayerList(this, PRE_BEGIN_LAYER, BEGIN_LAYER, BASIC_LAYER, END_LAYER, POST_END_LAYER); } #endregion @@ -75,11 +75,11 @@ namespace DCFApixels.DragonECS } else { - sortOrder = system is IEcsSystemDefaultSortOrder defaultSortOrder ? defaultSortOrder.SortOrder : 0; + sortOrder = system is IEcsSystemDefaultSortOrder defaultSortOrder ? defaultSortOrder.SortOrder : _defaultOrder; } if (string.IsNullOrEmpty(layerName)) { - layerName = system is IEcsSystemDefaultLayer defaultLayer ? defaultLayer.Layer : BASIC_LAYER; + layerName = system is IEcsSystemDefaultLayer defaultLayer ? defaultLayer.Layer : _defaultLayer; } AddRecordInternal(system, layerName, _systemRecordsInrement++, sortOrder, isUnique); @@ -108,12 +108,45 @@ namespace DCFApixels.DragonECS #endregion - #region Add other - public Builder AddModule(IEcsModule module) + #region AddModule + public Builder AddModule(IEcsModule module, int? sortOrder = null) { + return AddModuleInternal(module, string.Empty, sortOrder); + } + public Builder AddModule(IEcsModule module, string layerName, int? sortOrder = null) + { + return AddModuleInternal(module, layerName, sortOrder); + } + public Builder AddModuleInternal(IEcsModule module, string layerName, int? settedSortOrder) + { + string prevLayer = _defaultLayer; + int prevSortOrder = _defaultOrder; + + if (settedSortOrder.HasValue) + { + _defaultOrder = settedSortOrder.Value; + } + else + { + _defaultOrder = module is IEcsSystemDefaultSortOrder defaultSortOrder ? defaultSortOrder.SortOrder : 0; + } + if (string.IsNullOrEmpty(layerName)) + { + _defaultLayer = module is IEcsSystemDefaultLayer defaultLayer ? defaultLayer.Layer : BASIC_LAYER; + } + else + { + _defaultLayer = layerName; + } + module.Import(this); + _defaultLayer = prevLayer; + _defaultOrder = prevSortOrder; return this; } + #endregion + + #region Add other public Builder AddRunner() where TRunner : EcsRunner, IEcsRunner, new() { _initDeclaredRunners.Add(new InitDeclaredRunner()); @@ -180,25 +213,6 @@ namespace DCFApixels.DragonECS basicLayerList = new LayerSystemsList(BASIC_LAYER); _layerLists.Add(BASIC_LAYER, basicLayerList); } - //int allSystemsLength = 0; - //foreach (var item in _layerLists) - //{ - // if (item.Key == BASIC_LAYER) - // { - // continue; - // } - // if (!Layers.Contains(item.Key)) - // { - // basicBlockList.AddList(item.Value); - // } - // else - // { - // allSystemsLength += item.Value.recordsCount; - // } - // item.Value.Sort(); - //} - //allSystemsLength += basicBlockList.recordsCount; - //basicBlockList.Sort(); HashSet uniqueSystemsSet = new HashSet(); @@ -316,6 +330,12 @@ namespace DCFApixels.DragonECS _layers = new List(16) { basicLayerName, ADD_LAYER }; _basicLayerName = basicLayerName; } + public LayerList(Builder source, string preBeginlayer, string beginlayer, string basicLayer, string endLayer, string postEndLayer) + { + _source = source; + _layers = new List(16) { preBeginlayer, beginlayer, basicLayer, ADD_LAYER, endLayer, postEndLayer }; + _basicLayerName = basicLayer; + } public Builder Add(string newLayer) { return Insert(ADD_LAYER, newLayer); } public Builder Insert(string targetLayer, string newLayer) diff --git a/src/EcsPipeline.cs b/src/EcsPipeline.cs index fd28f47..76d14e8 100644 --- a/src/EcsPipeline.cs +++ b/src/EcsPipeline.cs @@ -108,16 +108,9 @@ namespace DCFApixels.DragonECS private static IEcsProcess[] _buffer; private T[] CreateProcess() where T : IEcsProcess { - if(_buffer == null || _buffer.Length < _allSystems.Length) + if (_buffer == null || _buffer.Length < _allSystems.Length) { - if(_buffer == null) - { - _buffer = new IEcsProcess[_allSystems.Length]; - } - else - { - Array.Resize(ref _buffer, _allSystems.Length); - } + Array.Resize(ref _buffer, _allSystems.Length); } int l = 0; for (int i = 0, iMax = _allSystems.Length; i < iMax; i++)