mirror of
https://github.com/DCFApixels/DragonECS.git
synced 2025-09-18 18:14:37 +08:00
update builder & serializable pipeline template
This commit is contained in:
parent
2f1ad7f530
commit
1b4cf66a9e
@ -307,10 +307,9 @@ namespace DCFApixels.DragonECS
|
|||||||
private List<string> _layers;
|
private List<string> _layers;
|
||||||
private string _basicLayerName;
|
private string _basicLayerName;
|
||||||
|
|
||||||
public int Count
|
public int Count { get { return _layers.Count; } }
|
||||||
{
|
public object this[int index] { get { return _layers[index]; } }
|
||||||
get { return _layers.Count; }
|
|
||||||
}
|
|
||||||
public LayerList(Builder source, string basicLayerName)
|
public LayerList(Builder source, string basicLayerName)
|
||||||
{
|
{
|
||||||
_source = source;
|
_source = source;
|
||||||
@ -492,7 +491,8 @@ namespace DCFApixels.DragonECS
|
|||||||
public Item[] records = null;
|
public Item[] records = null;
|
||||||
public int recordsCount = 0;
|
public int recordsCount = 0;
|
||||||
|
|
||||||
private int _lastSortingOrder;
|
private int _lastSortOrder;
|
||||||
|
private int _lastAddOrder;
|
||||||
private bool _isSorted = true;
|
private bool _isSorted = true;
|
||||||
|
|
||||||
private string _layerName;
|
private string _layerName;
|
||||||
@ -516,20 +516,34 @@ namespace DCFApixels.DragonECS
|
|||||||
AddItemInternal(otherRecord);
|
AddItemInternal(otherRecord);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public void Add(IEcsProcess system, int addOrder, int sortingOrder, bool isUnique)
|
public void Add(IEcsProcess system, int addOrder, int sortOrder, bool isUnique)
|
||||||
{
|
{
|
||||||
if (recordsCount <= 1)
|
AddItemInternal(new Item(system, addOrder, sortOrder, isUnique));
|
||||||
{
|
|
||||||
_lastSortingOrder = sortingOrder;
|
|
||||||
}
|
|
||||||
else if (_lastSortingOrder != sortingOrder)
|
|
||||||
{
|
|
||||||
_isSorted = false;
|
|
||||||
}
|
|
||||||
AddItemInternal(new Item(system, addOrder, sortingOrder, isUnique));
|
|
||||||
}
|
}
|
||||||
private void AddItemInternal(Item item)
|
private void AddItemInternal(Item item)
|
||||||
{
|
{
|
||||||
|
if (_isSorted)
|
||||||
|
{
|
||||||
|
if (recordsCount <= 1)
|
||||||
|
{
|
||||||
|
_lastSortOrder = item.sortOrder;
|
||||||
|
}
|
||||||
|
else if (_lastSortOrder != item.sortOrder)
|
||||||
|
{
|
||||||
|
_isSorted = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (recordsCount <= 1)
|
||||||
|
{
|
||||||
|
_lastAddOrder = item.addOrder;
|
||||||
|
}
|
||||||
|
else if (_lastAddOrder != item.addOrder)
|
||||||
|
{
|
||||||
|
_isSorted = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (records.Length <= recordsCount)
|
if (records.Length <= recordsCount)
|
||||||
{
|
{
|
||||||
Array.Resize(ref records, recordsCount << 1);
|
Array.Resize(ref records, recordsCount << 1);
|
||||||
@ -576,8 +590,25 @@ namespace DCFApixels.DragonECS
|
|||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region SerializableTemplate
|
||||||
|
public EcsPipelineTemplate GenerateSerializableTemplate()
|
||||||
|
{
|
||||||
|
Array.Sort(_systemRecords, 0, _systemRecordsCount);
|
||||||
|
var records = SystemRecords;
|
||||||
|
EcsPipelineTemplate result = new EcsPipelineTemplate();
|
||||||
|
result.layers = new string[Layers.Count];
|
||||||
|
result.systems = new EcsPipelineTemplate.SystemRecord[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);
|
||||||
|
}
|
||||||
|
|
||||||
private readonly struct SystemRecord
|
return result;
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private readonly struct SystemRecord : IComparable<SystemRecord>
|
||||||
{
|
{
|
||||||
public readonly IEcsProcess system;
|
public readonly IEcsProcess system;
|
||||||
public readonly string layer;
|
public readonly string layer;
|
||||||
@ -592,6 +623,11 @@ namespace DCFApixels.DragonECS
|
|||||||
this.sortOrder = sortOrder;
|
this.sortOrder = sortOrder;
|
||||||
this.isUnique = isUnique;
|
this.isUnique = isUnique;
|
||||||
}
|
}
|
||||||
|
public int CompareTo(SystemRecord other)
|
||||||
|
{
|
||||||
|
int c = sortOrder - other.sortOrder;
|
||||||
|
return c == 0 ? addOrder - other.addOrder : c;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,11 +9,13 @@ namespace DCFApixels.DragonECS
|
|||||||
{
|
{
|
||||||
[DataMember] public string[] layers;
|
[DataMember] public string[] layers;
|
||||||
[DataMember] public SystemRecord[] systems;
|
[DataMember] public SystemRecord[] systems;
|
||||||
public void Import(EcsPipeline.Builder b)
|
void IEcsModule.Import(EcsPipeline.Builder b)
|
||||||
{
|
{
|
||||||
b.Layers.MergeWith(layers);
|
b.Layers.MergeWith(layers);
|
||||||
foreach (var s in systems)
|
foreach (var s in systems)
|
||||||
{
|
{
|
||||||
|
if (s.system == null) { continue; }
|
||||||
|
|
||||||
int? sortOrder = s.isCustomSortOrder ? s.sortOrder : default(int?);
|
int? sortOrder = s.isCustomSortOrder ? s.sortOrder : default(int?);
|
||||||
if (s.isUnique)
|
if (s.isUnique)
|
||||||
{
|
{
|
||||||
@ -25,7 +27,6 @@ namespace DCFApixels.DragonECS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
[Serializable]
|
[Serializable]
|
||||||
[DataContract]
|
[DataContract]
|
||||||
@ -36,5 +37,15 @@ namespace DCFApixels.DragonECS
|
|||||||
[DataMember] public int sortOrder;
|
[DataMember] public int sortOrder;
|
||||||
[DataMember] public bool isCustomSortOrder;
|
[DataMember] public bool isCustomSortOrder;
|
||||||
[DataMember] public bool isUnique;
|
[DataMember] public bool isUnique;
|
||||||
|
public int? NullableSortOrder { get { return isCustomSortOrder ? sortOrder : default(int?); } }
|
||||||
|
public SystemRecord(IEcsProcess system, string layer, int? sortOrder, bool isUnique)
|
||||||
|
{
|
||||||
|
this.system = system;
|
||||||
|
this.layer = layer;
|
||||||
|
this.sortOrder = sortOrder.HasValue ? sortOrder.Value : 0;
|
||||||
|
isCustomSortOrder = sortOrder.HasValue;
|
||||||
|
this.isUnique = isUnique;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
11
src/Utils/EcsPipelineTemplate.cs.meta
Normal file
11
src/Utils/EcsPipelineTemplate.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: a4f0bb3a054f20f4d937499044d58c20
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
Loading…
Reference in New Issue
Block a user