mirror of
https://github.com/DCFApixels/DragonECS-Unity.git
synced 2025-09-18 01:54:35 +08:00
add EcsPipelineTemplateSO
This commit is contained in:
parent
d65f0de59a
commit
250b6b275f
8
src/EcsPipelineTemplate.meta
Normal file
8
src/EcsPipelineTemplate.meta
Normal file
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 53368cba894a53d4a9f3a4bf5a5b484a
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
75
src/EcsPipelineTemplate/EcsPipelineTemplateSO.cs
Normal file
75
src/EcsPipelineTemplate/EcsPipelineTemplateSO.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
11
src/EcsPipelineTemplate/EcsPipelineTemplateSO.cs.meta
Normal file
11
src/EcsPipelineTemplate/EcsPipelineTemplateSO.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: db10fad6d6096f54b9ad5752029c2a79
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
13
src/EcsPipelineTemplate/EcsPipelineTemplateSOEditor.cs
Normal file
13
src/EcsPipelineTemplate/EcsPipelineTemplateSOEditor.cs
Normal file
@ -0,0 +1,13 @@
|
||||
#if UNITY_EDITOR
|
||||
using UnityEngine;
|
||||
using UnityEditor;
|
||||
|
||||
namespace DCFApixels.DragonECS.Unity.Editors
|
||||
{
|
||||
//[CustomEditor(typeof(EcsPipelineTemplateSO))]
|
||||
//internal class EcsPipelineTemplateSOEditor
|
||||
//{
|
||||
//
|
||||
//}
|
||||
}
|
||||
#endif
|
11
src/EcsPipelineTemplate/EcsPipelineTemplateSOEditor.cs.meta
Normal file
11
src/EcsPipelineTemplate/EcsPipelineTemplateSOEditor.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8971a683bb906a944bbd2b373274c3b1
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
Loading…
Reference in New Issue
Block a user