From 4196c1e600ee7174df6cdb78078d9615d5d6daa8 Mon Sep 17 00:00:00 2001 From: Mikhail <99481254+DCFApixels@users.noreply.github.com> Date: Sat, 19 Oct 2024 00:02:56 +0800 Subject: [PATCH] fix LayerList --- src/EcsPipeline.Builder.cs | 64 +++++++++++++++++++++++++------------- 1 file changed, 42 insertions(+), 22 deletions(-) diff --git a/src/EcsPipeline.Builder.cs b/src/EcsPipeline.Builder.cs index b14d9b5..af49af0 100644 --- a/src/EcsPipeline.Builder.cs +++ b/src/EcsPipeline.Builder.cs @@ -176,7 +176,7 @@ namespace DCFApixels.DragonECS #region AddModule IEcsModule public Builder AddModule(IEcsModule module, AddParams parameters) { - if(module is IEcsProcess system) + if (module is IEcsProcess system) { return AddSystem_Internal(system, parameters); } @@ -417,12 +417,13 @@ namespace DCFApixels.DragonECS { // Автоматический слой нужный только для метода Add // Идея в том что метод Add добавляет слои до EcsConsts.END_LAYER и EcsConsts.POST_END_LAYER - private const string ADD_LAYERS_LAYER = nameof(LayerList) + "." + nameof(ADD_LAYERS_LAYER); + // private const string ADD_LAYERS_LAYER = nameof(LayerList) + "." + nameof(ADD_LAYERS_LAYER); private Builder _source; private List _layers; private string _basicLayerName; + private string _addLayerName; #region Properties public int Count { get { return _layers.Count; } } @@ -433,21 +434,31 @@ namespace DCFApixels.DragonECS public LayerList(Builder source, string basicLayerName) { _source = source; - _layers = new List(16) { basicLayerName, ADD_LAYERS_LAYER }; + //_layers = new List(16) { basicLayerName, ADD_LAYERS_LAYER }; + _layers = new List(16) { basicLayerName }; _basicLayerName = basicLayerName; + _addLayerName = _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_LAYERS_LAYER, endLayer, postEndLayer }; + //_layers = new List(16) { preBeginlayer, beginlayer, basicLayer, ADD_LAYERS_LAYER, endLayer, postEndLayer }; + _layers = new List(16) { preBeginlayer, beginlayer, basicLayer, endLayer, postEndLayer }; _basicLayerName = basicLayer; + _addLayerName = _basicLayerName; } #endregion #region Edit #region Single - public Builder Add(string newLayer) { return InsertAfter(ADD_LAYERS_LAYER, newLayer); } + //public Builder Add(string newLayer) { return InsertAfter(ADD_LAYERS_LAYER, newLayer); } + public Builder Add(string newLayer) + { + InsertAfter(_addLayerName, newLayer); + _addLayerName = newLayer; + return _source; + } public Builder Insert(string targetLayer, string newLayer) { if (Contains(newLayer)) { return _source; } @@ -464,10 +475,10 @@ namespace DCFApixels.DragonECS { if (Contains(newLayer)) { return _source; } - if (targetLayer == _basicLayerName) // нужно чтобы метод Add работал правильно. _basicLayerName и ADD_LAYER считается одним слоем, поэтому Before = _basicLayerName After = ADD_LAYER - { - targetLayer = ADD_LAYERS_LAYER; - } + //if (targetLayer == _basicLayerName) // нужно чтобы метод Add работал правильно. _basicLayerName и ADD_LAYER считается одним слоем, поэтому Before = _basicLayerName After = ADD_LAYER + //{ + // targetLayer = ADD_LAYERS_LAYER; + //} int index = _layers.IndexOf(targetLayer); if (index < 0) @@ -485,10 +496,10 @@ namespace DCFApixels.DragonECS } public Builder MoveAfter(string targetLayer, string movingLayer) { - if (targetLayer == _basicLayerName) // нужно чтобы метод Add работал правильно. _basicLayerName и ADD_LAYER считается одним слоем, поэтому Before = _basicLayerName After = ADD_LAYER - { - targetLayer = ADD_LAYERS_LAYER; - } + //if (targetLayer == _basicLayerName) // нужно чтобы метод Add работал правильно. _basicLayerName и ADD_LAYER считается одним слоем, поэтому Before = _basicLayerName After = ADD_LAYER + //{ + // targetLayer = ADD_LAYERS_LAYER; + //} _layers.Remove(movingLayer); return InsertAfter(targetLayer, movingLayer); @@ -496,7 +507,13 @@ namespace DCFApixels.DragonECS #endregion #region Range - public Builder Add(params string[] newLayers) { return InsertAfter(ADD_LAYERS_LAYER, newLayers); } + //public Builder Add(params string[] newLayers) { return InsertAfter(ADD_LAYERS_LAYER, newLayers); } + public Builder Add(params string[] newLayers) + { + InsertAfter(_addLayerName, newLayers); + _addLayerName = newLayers[newLayers.Length - 1]; + return _source; + } public Builder Insert(string targetLayer, params string[] newLayers) { int index = _layers.IndexOf(targetLayer); @@ -509,10 +526,10 @@ namespace DCFApixels.DragonECS } public Builder InsertAfter(string targetLayer, params string[] newLayers) { - if (targetLayer == _basicLayerName) // нужно чтобы метод Add работал правильно. _basicLayerName и ADD_LAYER считается одним слоем, поэтому Before = _basicLayerName After = ADD_LAYER - { - targetLayer = ADD_LAYERS_LAYER; - } + //if (targetLayer == _basicLayerName) // нужно чтобы метод Add работал правильно. _basicLayerName и ADD_LAYER считается одним слоем, поэтому Before = _basicLayerName After = ADD_LAYER + //{ + // targetLayer = ADD_LAYERS_LAYER; + //} int index = _layers.IndexOf(targetLayer); if (index < 0) @@ -533,10 +550,10 @@ namespace DCFApixels.DragonECS } public Builder MoveAfter(string targetLayer, params string[] movingLayers) { - if (targetLayer == _basicLayerName) // нужно чтобы метод Add работал правильно. _basicLayerName и ADD_LAYER считается одним слоем, поэтому Before = _basicLayerName After = ADD_LAYER - { - targetLayer = ADD_LAYERS_LAYER; - } + //if (targetLayer == _basicLayerName) // нужно чтобы метод Add работал правильно. _basicLayerName и ADD_LAYER считается одним слоем, поэтому Before = _basicLayerName After = ADD_LAYER + //{ + // targetLayer = ADD_LAYERS_LAYER; + //} foreach (var movingLayer in movingLayers) { @@ -552,8 +569,11 @@ namespace DCFApixels.DragonECS private static bool AreMatchingOrderIdentical(IReadOnlyList listA, IReadOnlyList listB) { int indexA = 0; + //if (listA.Contains(ADD_LAYERS_LAYER)) { indexA++; }// чтобы игнорировать слой ADD_LAYERS_LAYER + foreach (string itemB in listB) { + //if (itemB == ADD_LAYERS_LAYER) { continue; } // чтобы игнорировать слой ADD_LAYERS_LAYER if (indexA < listA.Count && listA[indexA] == itemB) { indexA++;