From 34e1e20af699409928b28431f7a78ee29f604da1 Mon Sep 17 00:00:00 2001 From: Mikhail <99481254+DCFApixels@users.noreply.github.com> Date: Wed, 26 Jun 2024 00:07:31 +0800 Subject: [PATCH] add seralizable EcsPipelineTemplate --- src/EcsPipeline.Builder.cs | 25 +++++++++------- src/Serializable/EcsPipelineTemplate.cs | 40 +++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 11 deletions(-) create mode 100644 src/Serializable/EcsPipelineTemplate.cs diff --git a/src/EcsPipeline.Builder.cs b/src/EcsPipeline.Builder.cs index c94d7d3..5fa416a 100644 --- a/src/EcsPipeline.Builder.cs +++ b/src/EcsPipeline.Builder.cs @@ -50,21 +50,21 @@ namespace DCFApixels.DragonECS #endregion #region Add - public Builder Add(IEcsProcess system, int? sortingOrder = null) + public Builder Add(IEcsProcess system, int? sortOrder = null) { - return AddInternal(system, string.Empty, sortingOrder, false); + return AddInternal(system, string.Empty, sortOrder, false); } - public Builder Add(IEcsProcess system, string layerName, int? sortingOrder = null) + public Builder Add(IEcsProcess system, string layerName, int? sortOrder = null) { - return AddInternal(system, layerName, sortingOrder, false); + return AddInternal(system, layerName, sortOrder, false); } - public Builder AddUnique(IEcsProcess system, int? sortingOrder = null) + public Builder AddUnique(IEcsProcess system, int? sortOrder = null) { - return AddInternal(system, string.Empty, sortingOrder, true); + return AddInternal(system, string.Empty, sortOrder, true); } - public Builder AddUnique(IEcsProcess system, string layerName, int? sortingOrder = null) + public Builder AddUnique(IEcsProcess system, string layerName, int? sortOrder = null) { - return AddInternal(system, layerName, sortingOrder, true); + return AddInternal(system, layerName, sortOrder, true); } private Builder AddInternal(IEcsProcess system, string layerName, int? settedSortOrder, bool isUnique) { @@ -427,14 +427,13 @@ namespace DCFApixels.DragonECS } return InsertAfter(targetLayer, movingLayers); } - - public void MergeWith(LayerList other) + public void MergeWith(IReadOnlyList other) { HashSet seen = new HashSet(); List result = new List(); List listA = _layers; - List listB = other._layers; + IReadOnlyList listB = other; foreach (string item in listA) { @@ -472,6 +471,10 @@ namespace DCFApixels.DragonECS _layers = result; } + public void MergeWith(LayerList other) + { + MergeWith(other._layers); + } public bool Contains(string layer) { return _layers.Contains(layer); } diff --git a/src/Serializable/EcsPipelineTemplate.cs b/src/Serializable/EcsPipelineTemplate.cs new file mode 100644 index 0000000..27ef672 --- /dev/null +++ b/src/Serializable/EcsPipelineTemplate.cs @@ -0,0 +1,40 @@ +using System; +using System.Runtime.Serialization; + +namespace DCFApixels.DragonECS.Serializable +{ + [Serializable] + [DataContract] + public class EcsPipelineTemplate : IEcsModule + { + [DataMember] public string[] layers; + [DataMember] public SystemRecord[] systems; + public void Import(EcsPipeline.Builder b) + { + b.Layers.MergeWith(layers); + foreach (var s in systems) + { + 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; + } +}