fix LayerList

This commit is contained in:
Mikhail 2024-10-19 00:02:56 +08:00
parent ef18594f82
commit 4196c1e600

View File

@ -417,12 +417,13 @@ namespace DCFApixels.DragonECS
{ {
// Автоматический слой нужный только для метода Add // Автоматический слой нужный только для метода Add
// Идея в том что метод Add добавляет слои до EcsConsts.END_LAYER и EcsConsts.POST_END_LAYER // Идея в том что метод 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 Builder _source;
private List<string> _layers; private List<string> _layers;
private string _basicLayerName; private string _basicLayerName;
private string _addLayerName;
#region Properties #region Properties
public int Count { get { return _layers.Count; } } public int Count { get { return _layers.Count; } }
@ -433,21 +434,31 @@ namespace DCFApixels.DragonECS
public LayerList(Builder source, string basicLayerName) public LayerList(Builder source, string basicLayerName)
{ {
_source = source; _source = source;
_layers = new List<string>(16) { basicLayerName, ADD_LAYERS_LAYER }; //_layers = new List<string>(16) { basicLayerName, ADD_LAYERS_LAYER };
_layers = new List<string>(16) { basicLayerName };
_basicLayerName = basicLayerName; _basicLayerName = basicLayerName;
_addLayerName = _basicLayerName;
} }
public LayerList(Builder source, string preBeginlayer, string beginlayer, string basicLayer, string endLayer, string postEndLayer) public LayerList(Builder source, string preBeginlayer, string beginlayer, string basicLayer, string endLayer, string postEndLayer)
{ {
_source = source; _source = source;
_layers = new List<string>(16) { preBeginlayer, beginlayer, basicLayer, ADD_LAYERS_LAYER, endLayer, postEndLayer }; //_layers = new List<string>(16) { preBeginlayer, beginlayer, basicLayer, ADD_LAYERS_LAYER, endLayer, postEndLayer };
_layers = new List<string>(16) { preBeginlayer, beginlayer, basicLayer, endLayer, postEndLayer };
_basicLayerName = basicLayer; _basicLayerName = basicLayer;
_addLayerName = _basicLayerName;
} }
#endregion #endregion
#region Edit #region Edit
#region Single #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) public Builder Insert(string targetLayer, string newLayer)
{ {
if (Contains(newLayer)) { return _source; } if (Contains(newLayer)) { return _source; }
@ -464,10 +475,10 @@ namespace DCFApixels.DragonECS
{ {
if (Contains(newLayer)) { return _source; } if (Contains(newLayer)) { return _source; }
if (targetLayer == _basicLayerName) // нужно чтобы метод Add работал правильно. _basicLayerName и ADD_LAYER считается одним слоем, поэтому Before = _basicLayerName After = ADD_LAYER //if (targetLayer == _basicLayerName) // нужно чтобы метод Add работал правильно. _basicLayerName и ADD_LAYER считается одним слоем, поэтому Before = _basicLayerName After = ADD_LAYER
{ //{
targetLayer = ADD_LAYERS_LAYER; // targetLayer = ADD_LAYERS_LAYER;
} //}
int index = _layers.IndexOf(targetLayer); int index = _layers.IndexOf(targetLayer);
if (index < 0) if (index < 0)
@ -485,10 +496,10 @@ namespace DCFApixels.DragonECS
} }
public Builder MoveAfter(string targetLayer, string movingLayer) public Builder MoveAfter(string targetLayer, string movingLayer)
{ {
if (targetLayer == _basicLayerName) // нужно чтобы метод Add работал правильно. _basicLayerName и ADD_LAYER считается одним слоем, поэтому Before = _basicLayerName After = ADD_LAYER //if (targetLayer == _basicLayerName) // нужно чтобы метод Add работал правильно. _basicLayerName и ADD_LAYER считается одним слоем, поэтому Before = _basicLayerName After = ADD_LAYER
{ //{
targetLayer = ADD_LAYERS_LAYER; // targetLayer = ADD_LAYERS_LAYER;
} //}
_layers.Remove(movingLayer); _layers.Remove(movingLayer);
return InsertAfter(targetLayer, movingLayer); return InsertAfter(targetLayer, movingLayer);
@ -496,7 +507,13 @@ namespace DCFApixels.DragonECS
#endregion #endregion
#region Range #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) public Builder Insert(string targetLayer, params string[] newLayers)
{ {
int index = _layers.IndexOf(targetLayer); int index = _layers.IndexOf(targetLayer);
@ -509,10 +526,10 @@ namespace DCFApixels.DragonECS
} }
public Builder InsertAfter(string targetLayer, params string[] newLayers) public Builder InsertAfter(string targetLayer, params string[] newLayers)
{ {
if (targetLayer == _basicLayerName) // нужно чтобы метод Add работал правильно. _basicLayerName и ADD_LAYER считается одним слоем, поэтому Before = _basicLayerName After = ADD_LAYER //if (targetLayer == _basicLayerName) // нужно чтобы метод Add работал правильно. _basicLayerName и ADD_LAYER считается одним слоем, поэтому Before = _basicLayerName After = ADD_LAYER
{ //{
targetLayer = ADD_LAYERS_LAYER; // targetLayer = ADD_LAYERS_LAYER;
} //}
int index = _layers.IndexOf(targetLayer); int index = _layers.IndexOf(targetLayer);
if (index < 0) if (index < 0)
@ -533,10 +550,10 @@ namespace DCFApixels.DragonECS
} }
public Builder MoveAfter(string targetLayer, params string[] movingLayers) public Builder MoveAfter(string targetLayer, params string[] movingLayers)
{ {
if (targetLayer == _basicLayerName) // нужно чтобы метод Add работал правильно. _basicLayerName и ADD_LAYER считается одним слоем, поэтому Before = _basicLayerName After = ADD_LAYER //if (targetLayer == _basicLayerName) // нужно чтобы метод Add работал правильно. _basicLayerName и ADD_LAYER считается одним слоем, поэтому Before = _basicLayerName After = ADD_LAYER
{ //{
targetLayer = ADD_LAYERS_LAYER; // targetLayer = ADD_LAYERS_LAYER;
} //}
foreach (var movingLayer in movingLayers) foreach (var movingLayer in movingLayers)
{ {
@ -552,8 +569,11 @@ namespace DCFApixels.DragonECS
private static bool AreMatchingOrderIdentical(IReadOnlyList<string> listA, IReadOnlyList<string> listB) private static bool AreMatchingOrderIdentical(IReadOnlyList<string> listA, IReadOnlyList<string> listB)
{ {
int indexA = 0; int indexA = 0;
//if (listA.Contains(ADD_LAYERS_LAYER)) { indexA++; }// чтобы игнорировать слой ADD_LAYERS_LAYER
foreach (string itemB in listB) foreach (string itemB in listB)
{ {
//if (itemB == ADD_LAYERS_LAYER) { continue; } // чтобы игнорировать слой ADD_LAYERS_LAYER
if (indexA < listA.Count && listA[indexA] == itemB) if (indexA < listA.Count && listA[indexA] == itemB)
{ {
indexA++; indexA++;