update templates

This commit is contained in:
Mikhail 2024-04-26 06:05:29 +08:00
parent 07cb628af7
commit dfcdebab41
3 changed files with 22 additions and 12 deletions

View File

@ -60,9 +60,9 @@ namespace DCFApixels.DragonECS
[SerializeField] [SerializeField]
private bool _deleteEntiityWithDestroy = false; private bool _deleteEntiityWithDestroy = false;
[SerializeField] [SerializeField]
private ScriptableEntityTemplate[] _scriptableTemplates; private ScriptableEntityTemplateBase[] _scriptableTemplates;
[SerializeField] [SerializeField]
private MonoEntityTemplate[] _monoTemplates; private MonoEntityTemplateBase[] _monoTemplates;
private bool _isConnectInvoked = false; private bool _isConnectInvoked = false;
@ -82,11 +82,11 @@ namespace DCFApixels.DragonECS
[MethodImpl(MethodImplOptions.AggressiveInlining)] [MethodImpl(MethodImplOptions.AggressiveInlining)]
get { return _entity.IsAlive; } get { return _entity.IsAlive; }
} }
public IEnumerable<ScriptableEntityTemplate> ScriptableTemplates public IEnumerable<ScriptableEntityTemplateBase> ScriptableTemplates
{ {
get { return _scriptableTemplates; } get { return _scriptableTemplates; }
} }
public IEnumerable<MonoEntityTemplate> MonoTemplates public IEnumerable<MonoEntityTemplateBase> MonoTemplates
{ {
get { return _monoTemplates; } get { return _monoTemplates; }
} }
@ -198,7 +198,7 @@ namespace DCFApixels.DragonECS
private static void Autoset(EcsEntityConnect target) private static void Autoset(EcsEntityConnect target)
{ {
IEnumerable<MonoEntityTemplate> result; IEnumerable<MonoEntityTemplateBase> result;
if (target.MonoTemplates != null && target.MonoTemplates.Count() > 0) if (target.MonoTemplates != null && target.MonoTemplates.Count() > 0)
{ {
result = target.MonoTemplates.Where(o => o != null).Union(GetTemplatesFor(target.transform)); result = target.MonoTemplates.Where(o => o != null).Union(GetTemplatesFor(target.transform));
@ -211,15 +211,15 @@ namespace DCFApixels.DragonECS
target._monoTemplates = result.ToArray(); target._monoTemplates = result.ToArray();
EditorUtility.SetDirty(target); EditorUtility.SetDirty(target);
} }
private static IEnumerable<MonoEntityTemplate> GetTemplatesFor(Transform parent) private static IEnumerable<MonoEntityTemplateBase> GetTemplatesFor(Transform parent)
{ {
IEnumerable<MonoEntityTemplate> result = parent.GetComponents<MonoEntityTemplate>(); IEnumerable<MonoEntityTemplateBase> result = parent.GetComponents<MonoEntityTemplateBase>();
for (int i = 0; i < parent.childCount; i++) for (int i = 0; i < parent.childCount; i++)
{ {
var child = parent.GetChild(i); var child = parent.GetChild(i);
if (child.TryGetComponent<EcsEntityConnect>(out _)) if (child.TryGetComponent<EcsEntityConnect>(out _))
{ {
return Enumerable.Empty<MonoEntityTemplate>(); return Enumerable.Empty<MonoEntityTemplateBase>();
} }
result = result.Concat(GetTemplatesFor(child)); result = result.Concat(GetTemplatesFor(child));
} }

View File

@ -4,9 +4,14 @@ using UnityEngine;
namespace DCFApixels.DragonECS namespace DCFApixels.DragonECS
{ {
public abstract class MonoEntityTemplateBase : MonoBehaviour, ITemplate
{
public abstract void Apply(short worldID, int entityID);
}
[DisallowMultipleComponent] [DisallowMultipleComponent]
[AddComponentMenu(EcsConsts.FRAMEWORK_NAME + "/" + nameof(MonoEntityTemplate), 30)] [AddComponentMenu(EcsConsts.FRAMEWORK_NAME + "/" + nameof(MonoEntityTemplate), 30)]
public class MonoEntityTemplate : MonoBehaviour, ITemplateInternal public class MonoEntityTemplate : MonoEntityTemplateBase, ITemplateInternal
{ {
[SerializeReference] [SerializeReference]
private IComponentTemplate[] _components; private IComponentTemplate[] _components;
@ -25,7 +30,7 @@ namespace DCFApixels.DragonECS
#endregion #endregion
#region Methods #region Methods
public void Apply(short worldID, int entityID) public override void Apply(short worldID, int entityID)
{ {
foreach (var item in _components) foreach (var item in _components)
{ {

View File

@ -4,8 +4,13 @@ using UnityEngine;
namespace DCFApixels.DragonECS namespace DCFApixels.DragonECS
{ {
public abstract class ScriptableEntityTemplateBase : ScriptableObject, ITemplate
{
public abstract void Apply(short worldID, int entityID);
}
[CreateAssetMenu(fileName = nameof(ScriptableEntityTemplate), menuName = EcsConsts.FRAMEWORK_NAME + "/" + nameof(ScriptableEntityTemplate), order = 1)] [CreateAssetMenu(fileName = nameof(ScriptableEntityTemplate), menuName = EcsConsts.FRAMEWORK_NAME + "/" + nameof(ScriptableEntityTemplate), order = 1)]
public class ScriptableEntityTemplate : ScriptableObject, ITemplateInternal public class ScriptableEntityTemplate : ScriptableEntityTemplateBase, ITemplateInternal
{ {
[SerializeReference] [SerializeReference]
private IComponentTemplate[] _components; private IComponentTemplate[] _components;
@ -24,7 +29,7 @@ namespace DCFApixels.DragonECS
#endregion #endregion
#region Methods #region Methods
public void Apply(short worldID, int entityID) public override void Apply(short worldID, int entityID)
{ {
foreach (var item in _components) foreach (var item in _components)
{ {