DragonECS/src/Utils/EcsPipelineTemplate.cs

52 lines
1.6 KiB
C#
Raw Normal View History

2024-06-26 00:07:31 +08:00
using System;
using System.Runtime.Serialization;
2024-06-26 00:14:58 +08:00
namespace DCFApixels.DragonECS
2024-06-26 00:07:31 +08:00
{
[Serializable]
[DataContract]
public class EcsPipelineTemplate : IEcsModule
{
[DataMember] public string[] layers;
[DataMember] public SystemRecord[] systems;
void IEcsModule.Import(EcsPipeline.Builder b)
2024-06-26 00:07:31 +08:00
{
b.Layers.MergeWith(layers);
foreach (var s in systems)
{
if (s.system == null) { continue; }
2024-06-26 00:07:31 +08:00
int? sortOrder = s.isCustomSortOrder ? s.sortOrder : default(int?);
if (s.isUnique)
{
b.AddUnique(s.system, s.layer, sortOrder);
}
else
{
b.Add(s.system, s.layer, sortOrder);
}
}
}
[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;
}
}
2024-06-26 00:07:31 +08:00
}
}