add EcsPipelineTemplateSO

This commit is contained in:
Mikhail 2024-06-26 01:35:57 +08:00
parent d65f0de59a
commit 250b6b275f
5 changed files with 118 additions and 0 deletions

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 53368cba894a53d4a9f3a4bf5a5b484a
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,75 @@
using System;
using UnityEngine;
namespace DCFApixels.DragonECS
{
[CreateAssetMenu(fileName = nameof(EcsPipelineTemplateSO), menuName = EcsConsts.FRAMEWORK_NAME + "/" + nameof(EcsPipelineTemplateSO), order = 1)]
public class EcsPipelineTemplateSO : ScriptableObject, IEcsModule
{
private string[] _layers;
private SystemRecord[] _systems;
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)
{
b.AddUnique(s.system, s.layer, sortOrder);
}
else
{
b.Add(s.system, s.layer, sortOrder);
}
}
}
public EcsPipelineTemplate GenerateSerializableTemplate()
{
EcsPipelineTemplate result = new EcsPipelineTemplate();
result.layers = new string[_layers.Length];
Array.Copy(_layers, result.layers, _layers.Length);
result.systems = new EcsPipelineTemplate.SystemRecord[_systems.Length];
for (int i = 0; i < result.systems.Length; i++)
{
ref var s = ref _systems[i];
result.systems[i] = new EcsPipelineTemplate.SystemRecord(s.system, s.layer, s.NullableSortOrder, s.isUnique);
}
return result;
}
public void SetFromSerializableTemplate(EcsPipelineTemplate template)
{
_layers = new string[template.layers.Length];
Array.Copy(template.layers, _layers, template.layers.Length);
_systems = new SystemRecord[template.systems.Length];
for (int i = 0; i < _systems.Length; i++)
{
ref var s = ref template.systems[i];
_systems[i] = new SystemRecord(s.system, s.layer, s.NullableSortOrder, s.isUnique);
}
}
public struct SystemRecord
{
[SerializeReference]
public IEcsProcess system;
public string layer;
public int sortOrder;
public bool isCustomSortOrder;
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;
}
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: db10fad6d6096f54b9ad5752029c2a79
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,13 @@
#if UNITY_EDITOR
using UnityEngine;
using UnityEditor;
namespace DCFApixels.DragonECS.Unity.Editors
{
//[CustomEditor(typeof(EcsPipelineTemplateSO))]
//internal class EcsPipelineTemplateSOEditor
//{
//
//}
}
#endif

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 8971a683bb906a944bbd2b373274c3b1
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: