mirror of
https://github.com/DCFApixels/DragonECS.git
synced 2025-09-18 01:44:35 +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 string _basicLayerName;
|
||||
|
||||
public int Count
|
||||
{
|
||||
get { return _layers.Count; }
|
||||
}
|
||||
public int Count { get { return _layers.Count; } }
|
||||
public object this[int index] { get { return _layers[index]; } }
|
||||
|
||||
public LayerList(Builder source, string basicLayerName)
|
||||
{
|
||||
_source = source;
|
||||
@ -492,7 +491,8 @@ namespace DCFApixels.DragonECS
|
||||
public Item[] records = null;
|
||||
public int recordsCount = 0;
|
||||
|
||||
private int _lastSortingOrder;
|
||||
private int _lastSortOrder;
|
||||
private int _lastAddOrder;
|
||||
private bool _isSorted = true;
|
||||
|
||||
private string _layerName;
|
||||
@ -516,20 +516,34 @@ namespace DCFApixels.DragonECS
|
||||
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)
|
||||
{
|
||||
_lastSortingOrder = sortingOrder;
|
||||
}
|
||||
else if (_lastSortingOrder != sortingOrder)
|
||||
{
|
||||
_isSorted = false;
|
||||
}
|
||||
AddItemInternal(new Item(system, addOrder, sortingOrder, isUnique));
|
||||
AddItemInternal(new Item(system, addOrder, sortOrder, isUnique));
|
||||
}
|
||||
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)
|
||||
{
|
||||
Array.Resize(ref records, recordsCount << 1);
|
||||
@ -576,8 +590,25 @@ namespace DCFApixels.DragonECS
|
||||
}
|
||||
#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 string layer;
|
||||
@ -592,6 +623,11 @@ namespace DCFApixels.DragonECS
|
||||
this.sortOrder = sortOrder;
|
||||
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 SystemRecord[] systems;
|
||||
public void Import(EcsPipeline.Builder b)
|
||||
void IEcsModule.Import(EcsPipeline.Builder b)
|
||||
{
|
||||
b.Layers.MergeWith(layers);
|
||||
foreach (var s in systems)
|
||||
{
|
||||
if (s.system == null) { continue; }
|
||||
|
||||
int? sortOrder = s.isCustomSortOrder ? s.sortOrder : default(int?);
|
||||
if (s.isUnique)
|
||||
{
|
||||
@ -25,16 +27,25 @@ namespace DCFApixels.DragonECS
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
[DataContract]
|
||||
public struct SystemRecord
|
||||
{
|
||||
[DataMember] public IEcsProcess system;
|
||||
[DataMember] public string layer;
|
||||
[DataMember] public int sortOrder;
|
||||
[DataMember] public bool isCustomSortOrder;
|
||||
[DataMember] public bool isUnique;
|
||||
[Serializable]
|
||||
[DataContract]
|
||||
public struct SystemRecord
|
||||
{
|
||||
[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)
|
||||
{
|
||||
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