mirror of
https://github.com/DCFApixels/DragonECS.git
synced 2025-09-18 09:54:35 +08:00
rename EcsSystems to EcsPipeline
This commit is contained in:
parent
abbe33e3b5
commit
f23ed953d7
@ -7,11 +7,11 @@ namespace DCFApixels.DragonECS
|
|||||||
{
|
{
|
||||||
internal class PreInitInjectController
|
internal class PreInitInjectController
|
||||||
{
|
{
|
||||||
private EcsSystems _source;
|
private EcsPipeline _source;
|
||||||
private InjectSystemBase[] _injectSystems;
|
private InjectSystemBase[] _injectSystems;
|
||||||
private int _injectCount;
|
private int _injectCount;
|
||||||
|
|
||||||
public PreInitInjectController(EcsSystems source)
|
public PreInitInjectController(EcsPipeline source)
|
||||||
{
|
{
|
||||||
_injectCount = 0;
|
_injectCount = 0;
|
||||||
_source = source;
|
_source = source;
|
||||||
@ -102,25 +102,26 @@ namespace DCFApixels.DragonECS
|
|||||||
_injectedData = injectedData;
|
_injectedData = injectedData;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void PreInit(EcsSystems systems)
|
public void PreInit(EcsPipeline pipeline)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (_injectController == null)
|
if (_injectController == null)
|
||||||
{
|
{
|
||||||
_injectController = new PreInitInjectController(systems);
|
_injectController = new PreInitInjectController(pipeline);
|
||||||
var injectMapRunner = systems.GetRunner<IEcsInject<PreInitInjectController>>();
|
var injectMapRunner = pipeline.GetRunner<IEcsInject<PreInitInjectController>>();
|
||||||
systems.GetRunner<IEcsPreInitInjectCallbacks>().OnPreInitInjectionBefore();
|
pipeline.GetRunner<IEcsPreInitInjectCallbacks>().OnPreInitInjectionBefore();
|
||||||
injectMapRunner.Inject(_injectController);
|
injectMapRunner.Inject(_injectController);
|
||||||
}
|
}
|
||||||
|
|
||||||
var injectRunnerGeneric = systems.GetRunner<IEcsInject<T>>();
|
var injectRunnerGeneric = pipeline.GetRunner<IEcsInject<T>>();
|
||||||
injectRunnerGeneric.Inject(_injectedData);
|
injectRunnerGeneric.Inject(_injectedData);
|
||||||
|
|
||||||
if (_injectController.OnInject())
|
if (_injectController.OnInject())
|
||||||
{
|
{
|
||||||
_injectController.Destroy();
|
_injectController.Destroy();
|
||||||
var injectCallbacksRunner = systems.GetRunner<IEcsPreInitInjectCallbacks>();
|
var injectCallbacksRunner = pipeline.GetRunner<IEcsPreInitInjectCallbacks>();
|
||||||
injectCallbacksRunner.OnPreInitInjectionAfter();
|
injectCallbacksRunner.OnPreInitInjectionAfter();
|
||||||
|
EcsRunner.Destroy(injectCallbacksRunner);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -134,27 +135,27 @@ namespace DCFApixels.DragonECS
|
|||||||
|
|
||||||
public static class InjectSystemExstensions
|
public static class InjectSystemExstensions
|
||||||
{
|
{
|
||||||
public static EcsSystems.Builder Inject<T>(this EcsSystems.Builder self, T data)
|
public static EcsPipeline.Builder Inject<T>(this EcsPipeline.Builder self, T data)
|
||||||
{
|
{
|
||||||
self.Add(new InjectSystem<T>(data));
|
self.Add(new InjectSystem<T>(data));
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
public static EcsSystems.Builder Inject<A, B>(this EcsSystems.Builder self, A a, B b)
|
public static EcsPipeline.Builder Inject<A, B>(this EcsPipeline.Builder self, A a, B b)
|
||||||
{
|
{
|
||||||
self.Inject(a).Inject(b);
|
self.Inject(a).Inject(b);
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
public static EcsSystems.Builder Inject<A, B, C, D>(this EcsSystems.Builder self, A a, B b, C c, D d)
|
public static EcsPipeline.Builder Inject<A, B, C, D>(this EcsPipeline.Builder self, A a, B b, C c, D d)
|
||||||
{
|
{
|
||||||
self.Inject(a).Inject(b).Inject(c).Inject(d);
|
self.Inject(a).Inject(b).Inject(c).Inject(d);
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
public static EcsSystems.Builder Inject<A, B, C, D, E>(this EcsSystems.Builder self, A a, B b, C c, D d, E e)
|
public static EcsPipeline.Builder Inject<A, B, C, D, E>(this EcsPipeline.Builder self, A a, B b, C c, D d, E e)
|
||||||
{
|
{
|
||||||
self.Inject(a).Inject(b).Inject(c).Inject(d).Inject(e);
|
self.Inject(a).Inject(b).Inject(c).Inject(d).Inject(e);
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
public static EcsSystems.Builder Inject<A, B, C, D, E, F>(this EcsSystems.Builder self, A a, B b, C c, D d, E e, F f)
|
public static EcsPipeline.Builder Inject<A, B, C, D, E, F>(this EcsPipeline.Builder self, A a, B b, C c, D d, E e, F f)
|
||||||
{
|
{
|
||||||
self.Inject(a).Inject(b).Inject(c).Inject(d).Inject(e).Inject(f);
|
self.Inject(a).Inject(b).Inject(c).Inject(d).Inject(e).Inject(f);
|
||||||
return self;
|
return self;
|
||||||
|
@ -2,19 +2,19 @@
|
|||||||
{
|
{
|
||||||
public interface IEcsPreInitSystem : IEcsSystem
|
public interface IEcsPreInitSystem : IEcsSystem
|
||||||
{
|
{
|
||||||
public void PreInit(EcsSystems systems);
|
public void PreInit(EcsPipeline pipeline);
|
||||||
}
|
}
|
||||||
public interface IEcsInitSystem : IEcsSystem
|
public interface IEcsInitSystem : IEcsSystem
|
||||||
{
|
{
|
||||||
public void Init(EcsSystems systems);
|
public void Init(EcsPipeline pipeline);
|
||||||
}
|
}
|
||||||
public interface IEcsRunSystem : IEcsSystem
|
public interface IEcsRunSystem : IEcsSystem
|
||||||
{
|
{
|
||||||
public void Run(EcsSystems systems);
|
public void Run(EcsPipeline pipeline);
|
||||||
}
|
}
|
||||||
public interface IEcsDestroySystem : IEcsSystem
|
public interface IEcsDestroySystem : IEcsSystem
|
||||||
{
|
{
|
||||||
public void Destroy(EcsSystems systems);
|
public void Destroy(EcsPipeline pipeline);
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface IEcsBaseSystem : IEcsInitSystem, IEcsRunSystem, IEcsDestroySystem { }
|
public interface IEcsBaseSystem : IEcsInitSystem, IEcsRunSystem, IEcsDestroySystem { }
|
||||||
@ -24,18 +24,18 @@
|
|||||||
#if DEBUG
|
#if DEBUG
|
||||||
private int[] _targetIds;
|
private int[] _targetIds;
|
||||||
#endif
|
#endif
|
||||||
public void PreInit(EcsSystems systems)
|
public void PreInit(EcsPipeline pipeline)
|
||||||
{
|
{
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
for (int i = 0; i < targets.Length; i++)
|
for (int i = 0; i < targets.Length; i++)
|
||||||
{
|
{
|
||||||
int id = _targetIds[i];
|
int id = _targetIds[i];
|
||||||
EcsDebug.ProfileMarkBegin(id);
|
EcsDebug.ProfileMarkBegin(id);
|
||||||
targets[i].PreInit(systems);
|
targets[i].PreInit(pipeline);
|
||||||
EcsDebug.ProfileMarkEnd(id);
|
EcsDebug.ProfileMarkEnd(id);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
foreach (var item in targets) item.PreInit(systems);
|
foreach (var item in targets) item.PreInit(pipeline);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -55,18 +55,18 @@
|
|||||||
#if DEBUG
|
#if DEBUG
|
||||||
private int[] _targetIds;
|
private int[] _targetIds;
|
||||||
#endif
|
#endif
|
||||||
public void Init(EcsSystems systems)
|
public void Init(EcsPipeline pipeline)
|
||||||
{
|
{
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
for (int i = 0; i < targets.Length; i++)
|
for (int i = 0; i < targets.Length; i++)
|
||||||
{
|
{
|
||||||
int id = _targetIds[i];
|
int id = _targetIds[i];
|
||||||
EcsDebug.ProfileMarkBegin(id);
|
EcsDebug.ProfileMarkBegin(id);
|
||||||
targets[i].Init(systems);
|
targets[i].Init(pipeline);
|
||||||
EcsDebug.ProfileMarkEnd(id);
|
EcsDebug.ProfileMarkEnd(id);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
foreach (var item in targets) item.Init(systems);
|
foreach (var item in targets) item.Init(pipeline);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -86,18 +86,18 @@
|
|||||||
#if DEBUG
|
#if DEBUG
|
||||||
private int[] _targetIds;
|
private int[] _targetIds;
|
||||||
#endif
|
#endif
|
||||||
public void Run(EcsSystems systems)
|
public void Run(EcsPipeline pipeline)
|
||||||
{
|
{
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
for (int i = 0; i < targets.Length; i++)
|
for (int i = 0; i < targets.Length; i++)
|
||||||
{
|
{
|
||||||
int id = _targetIds[i];
|
int id = _targetIds[i];
|
||||||
EcsDebug.ProfileMarkBegin(id);
|
EcsDebug.ProfileMarkBegin(id);
|
||||||
targets[i].Run(systems);
|
targets[i].Run(pipeline);
|
||||||
EcsDebug.ProfileMarkEnd(id);
|
EcsDebug.ProfileMarkEnd(id);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
foreach (var item in targets) item.Run(systems);
|
foreach (var item in targets) item.Run(pipeline);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -117,18 +117,18 @@
|
|||||||
#if DEBUG
|
#if DEBUG
|
||||||
private int[] _targetIds;
|
private int[] _targetIds;
|
||||||
#endif
|
#endif
|
||||||
public void Destroy(EcsSystems systems)
|
public void Destroy(EcsPipeline pipeline)
|
||||||
{
|
{
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
for (int i = 0; i < targets.Length; i++)
|
for (int i = 0; i < targets.Length; i++)
|
||||||
{
|
{
|
||||||
int id = _targetIds[i];
|
int id = _targetIds[i];
|
||||||
EcsDebug.ProfileMarkBegin(id);
|
EcsDebug.ProfileMarkBegin(id);
|
||||||
targets[i].Destroy(systems);
|
targets[i].Destroy(pipeline);
|
||||||
EcsDebug.ProfileMarkEnd(id);
|
EcsDebug.ProfileMarkEnd(id);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
foreach (var item in targets) item.Destroy(systems);
|
foreach (var item in targets) item.Destroy(pipeline);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@ using System.Runtime.CompilerServices;
|
|||||||
|
|
||||||
namespace DCFApixels.DragonECS
|
namespace DCFApixels.DragonECS
|
||||||
{
|
{
|
||||||
public sealed class EcsSystems
|
public sealed class EcsPipeline
|
||||||
{
|
{
|
||||||
private IEcsSystem[] _allSystems;
|
private IEcsSystem[] _allSystems;
|
||||||
private Dictionary<Type, IEcsRunner> _runners;
|
private Dictionary<Type, IEcsRunner> _runners;
|
||||||
@ -24,7 +24,7 @@ namespace DCFApixels.DragonECS
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Constructors
|
#region Constructors
|
||||||
private EcsSystems(IEcsSystem[] systems)
|
private EcsPipeline(IEcsSystem[] systems)
|
||||||
{
|
{
|
||||||
_allSystems = systems;
|
_allSystems = systems;
|
||||||
_runners = new Dictionary<Type, IEcsRunner>();
|
_runners = new Dictionary<Type, IEcsRunner>();
|
||||||
@ -47,6 +47,11 @@ namespace DCFApixels.DragonECS
|
|||||||
_runners.Add(type, result);
|
_runners.Add(type, result);
|
||||||
return (T)result;
|
return (T)result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal void OnRunnerDestroy(IEcsRunner runner)
|
||||||
|
{
|
||||||
|
_runners.Remove(runner.Interface);
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region LifeCycle
|
#region LifeCycle
|
||||||
@ -54,7 +59,7 @@ namespace DCFApixels.DragonECS
|
|||||||
{
|
{
|
||||||
if(_isInit == true)
|
if(_isInit == true)
|
||||||
{
|
{
|
||||||
EcsDebug.Print("[Warning]", $"This {nameof(EcsSystems)} has already been initialized");
|
EcsDebug.Print("[Warning]", $"This {nameof(EcsPipeline)} has already been initialized");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
_isInit = true;
|
_isInit = true;
|
||||||
@ -81,7 +86,7 @@ namespace DCFApixels.DragonECS
|
|||||||
#endif
|
#endif
|
||||||
if (_isDestoryed == true)
|
if (_isDestoryed == true)
|
||||||
{
|
{
|
||||||
EcsDebug.Print("[Warning]", $"This {nameof(EcsSystems)} has already been destroyed");
|
EcsDebug.Print("[Warning]", $"This {nameof(EcsPipeline)} has already been destroyed");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
_isDestoryed = true;
|
_isDestoryed = true;
|
||||||
@ -94,17 +99,17 @@ namespace DCFApixels.DragonECS
|
|||||||
private void CheckBeforeInitForMethod(string methodName)
|
private void CheckBeforeInitForMethod(string methodName)
|
||||||
{
|
{
|
||||||
if (!_isInit)
|
if (!_isInit)
|
||||||
throw new MethodAccessException($"It is forbidden to call {methodName}, before initialization {nameof(EcsSystems)}");
|
throw new MethodAccessException($"It is forbidden to call {methodName}, before initialization {nameof(EcsPipeline)}");
|
||||||
}
|
}
|
||||||
private void CheckAfterInitForMethod(string methodName)
|
private void CheckAfterInitForMethod(string methodName)
|
||||||
{
|
{
|
||||||
if (_isInit)
|
if (_isInit)
|
||||||
throw new MethodAccessException($"It is forbidden to call {methodName}, after initialization {nameof(EcsSystems)}");
|
throw new MethodAccessException($"It is forbidden to call {methodName}, after initialization {nameof(EcsPipeline)}");
|
||||||
}
|
}
|
||||||
private void CheckAfterDestroyForMethod(string methodName)
|
private void CheckAfterDestroyForMethod(string methodName)
|
||||||
{
|
{
|
||||||
if (_isDestoryed)
|
if (_isDestoryed)
|
||||||
throw new MethodAccessException($"It is forbidden to call {methodName}, after destroying {nameof(EcsSystems)}");
|
throw new MethodAccessException($"It is forbidden to call {methodName}, after destroying {nameof(EcsPipeline)}");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endregion
|
#endregion
|
||||||
@ -117,6 +122,7 @@ namespace DCFApixels.DragonECS
|
|||||||
public class Builder
|
public class Builder
|
||||||
{
|
{
|
||||||
private const int KEYS_CAPACITY = 4;
|
private const int KEYS_CAPACITY = 4;
|
||||||
|
private HashSet<Type> _uniqueTypes;
|
||||||
private readonly List<object> _blockExecutionOrder;
|
private readonly List<object> _blockExecutionOrder;
|
||||||
private readonly Dictionary<object, List<IEcsSystem>> _systems;
|
private readonly Dictionary<object, List<IEcsSystem>> _systems;
|
||||||
private readonly object _basicBlocKey;
|
private readonly object _basicBlocKey;
|
||||||
@ -125,6 +131,7 @@ namespace DCFApixels.DragonECS
|
|||||||
public Builder()
|
public Builder()
|
||||||
{
|
{
|
||||||
_basicBlocKey = "Basic";
|
_basicBlocKey = "Basic";
|
||||||
|
_uniqueTypes = new HashSet<Type>();
|
||||||
_blockExecutionOrder = new List<object>(KEYS_CAPACITY);
|
_blockExecutionOrder = new List<object>(KEYS_CAPACITY);
|
||||||
_systems = new Dictionary<object, List<IEcsSystem>>(KEYS_CAPACITY);
|
_systems = new Dictionary<object, List<IEcsSystem>>(KEYS_CAPACITY);
|
||||||
_isBasicBlockDeclared = false;
|
_isBasicBlockDeclared = false;
|
||||||
@ -132,6 +139,17 @@ namespace DCFApixels.DragonECS
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Builder Add(IEcsSystem system, object blockKey = null)
|
public Builder Add(IEcsSystem system, object blockKey = null)
|
||||||
|
{
|
||||||
|
AddInternal(system, blockKey, false);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
public Builder AddUnique(IEcsSystem system, object blockKey = null)
|
||||||
|
{
|
||||||
|
AddInternal(system, blockKey, true);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void AddInternal(IEcsSystem system, object blockKey, bool isUnique)
|
||||||
{
|
{
|
||||||
if (blockKey == null) blockKey = _basicBlocKey;
|
if (blockKey == null) blockKey = _basicBlocKey;
|
||||||
List<IEcsSystem> list;
|
List<IEcsSystem> list;
|
||||||
@ -141,8 +159,9 @@ namespace DCFApixels.DragonECS
|
|||||||
list.Add(new SystemsBlockMarkerSystem(blockKey.ToString()));
|
list.Add(new SystemsBlockMarkerSystem(blockKey.ToString()));
|
||||||
_systems.Add(blockKey, list);
|
_systems.Add(blockKey, list);
|
||||||
}
|
}
|
||||||
|
if ((_uniqueTypes.Add(system.GetType()) == false && isUnique))
|
||||||
|
return;
|
||||||
list.Add(system);
|
list.Add(system);
|
||||||
return this;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Builder Add(IEcsModule module)
|
public Builder Add(IEcsModule module)
|
||||||
@ -167,11 +186,11 @@ namespace DCFApixels.DragonECS
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public EcsSystems Build()
|
public EcsPipeline Build()
|
||||||
{
|
{
|
||||||
if (_isOnlyBasicBlock)
|
if (_isOnlyBasicBlock)
|
||||||
{
|
{
|
||||||
return new EcsSystems(_systems[_basicBlocKey].ToArray());
|
return new EcsPipeline(_systems[_basicBlocKey].ToArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
if(_isBasicBlockDeclared == false)
|
if(_isBasicBlockDeclared == false)
|
||||||
@ -196,7 +215,7 @@ namespace DCFApixels.DragonECS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return new EcsSystems(result.ToArray());
|
return new EcsPipeline(result.ToArray());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
@ -204,16 +223,17 @@ namespace DCFApixels.DragonECS
|
|||||||
|
|
||||||
public interface IEcsModule
|
public interface IEcsModule
|
||||||
{
|
{
|
||||||
public void ImportSystems(EcsSystems.Builder builder);
|
public void ImportSystems(EcsPipeline.Builder builder);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class EcsSystemsExt
|
#region Extensions
|
||||||
|
public static class EcsSystemsExtensions
|
||||||
{
|
{
|
||||||
public static bool IsNullOrDestroyed(this EcsSystems self)
|
public static bool IsNullOrDestroyed(this EcsPipeline self)
|
||||||
{
|
{
|
||||||
return self == null || self.IsDestoryed;
|
return self == null || self.IsDestoryed;
|
||||||
}
|
}
|
||||||
public static EcsSystems.Builder Add(this EcsSystems.Builder self, IEnumerable<IEcsSystem> range, object blockKey = null)
|
public static EcsPipeline.Builder Add(this EcsPipeline.Builder self, IEnumerable<IEcsSystem> range, object blockKey = null)
|
||||||
{
|
{
|
||||||
foreach (var item in range)
|
foreach (var item in range)
|
||||||
{
|
{
|
||||||
@ -221,12 +241,21 @@ namespace DCFApixels.DragonECS
|
|||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
public static EcsSystems BuildAndInit(this EcsSystems.Builder self)
|
public static EcsPipeline.Builder AddUnique(this EcsPipeline.Builder self, IEnumerable<IEcsSystem> range, object blockKey = null)
|
||||||
{
|
{
|
||||||
EcsSystems result = self.Build();
|
foreach (var item in range)
|
||||||
|
{
|
||||||
|
self.AddUnique(item, blockKey);
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
public static EcsPipeline BuildAndInit(this EcsPipeline.Builder self)
|
||||||
|
{
|
||||||
|
EcsPipeline result = self.Build();
|
||||||
result.Init();
|
result.Init();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
}
|
}
|
@ -24,10 +24,15 @@ namespace DCFApixels.DragonECS
|
|||||||
public interface IEcsSystem { }
|
public interface IEcsSystem { }
|
||||||
public interface IEcsRunner
|
public interface IEcsRunner
|
||||||
{
|
{
|
||||||
public EcsSystems Source { get; }
|
public EcsPipeline Source { get; }
|
||||||
|
public Type Interface { get; }
|
||||||
public IList Targets { get; }
|
public IList Targets { get; }
|
||||||
public object Filter { get; }
|
public object Filter { get; }
|
||||||
public bool IsHasFilter { get; }
|
public bool IsHasFilter { get; }
|
||||||
|
public bool IsDestroyed { get; }
|
||||||
|
public bool IsEmpty { get; }
|
||||||
|
|
||||||
|
public void Destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static class EcsRunnerActivator
|
internal static class EcsRunnerActivator
|
||||||
@ -120,6 +125,10 @@ namespace DCFApixels.DragonECS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class EcsRunner
|
||||||
|
{
|
||||||
|
public static void Destroy(object runner) => ((IEcsRunner)runner).Destroy();
|
||||||
|
}
|
||||||
public abstract class EcsRunner<TInterface> : IEcsSystem, IEcsRunner
|
public abstract class EcsRunner<TInterface> : IEcsSystem, IEcsRunner
|
||||||
where TInterface : IEcsSystem
|
where TInterface : IEcsSystem
|
||||||
{
|
{
|
||||||
@ -183,7 +192,7 @@ namespace DCFApixels.DragonECS
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Instantiate
|
#region Instantiate
|
||||||
private static TInterface Instantiate(EcsSystems source, TInterface[] targets, bool isHasFilter, object filter)
|
private static TInterface Instantiate(EcsPipeline source, TInterface[] targets, bool isHasFilter, object filter)
|
||||||
{
|
{
|
||||||
if (_subclass == null)
|
if (_subclass == null)
|
||||||
EcsRunnerActivator.InitFor<TInterface>();
|
EcsRunnerActivator.InitFor<TInterface>();
|
||||||
@ -191,30 +200,34 @@ namespace DCFApixels.DragonECS
|
|||||||
var instance = (EcsRunner<TInterface>)Activator.CreateInstance(_subclass);
|
var instance = (EcsRunner<TInterface>)Activator.CreateInstance(_subclass);
|
||||||
return (TInterface)(IEcsSystem)instance.Set(source, targets, isHasFilter, filter);
|
return (TInterface)(IEcsSystem)instance.Set(source, targets, isHasFilter, filter);
|
||||||
}
|
}
|
||||||
public static TInterface Instantiate(EcsSystems source)
|
public static TInterface Instantiate(EcsPipeline source)
|
||||||
{
|
{
|
||||||
return Instantiate(source, FilterSystems(source.AllSystems), false, null);
|
return Instantiate(source, FilterSystems(source.AllSystems), false, null);
|
||||||
}
|
}
|
||||||
public static TInterface Instantiate(EcsSystems source, object filter)
|
public static TInterface Instantiate(EcsPipeline source, object filter)
|
||||||
{
|
{
|
||||||
return Instantiate(source, FilterSystems(source.AllSystems, filter), true, filter);
|
return Instantiate(source, FilterSystems(source.AllSystems, filter), true, filter);
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
private EcsSystems _source;
|
private EcsPipeline _source;
|
||||||
protected TInterface[] targets;
|
protected TInterface[] targets;
|
||||||
private ReadOnlyCollection<TInterface> _targetsSealed;
|
private ReadOnlyCollection<TInterface> _targetsSealed;
|
||||||
private object _filter;
|
private object _filter;
|
||||||
private bool _isHasFilter;
|
private bool _isHasFilter;
|
||||||
|
private bool _isDestroyed;
|
||||||
|
|
||||||
#region Properties
|
#region Properties
|
||||||
public EcsSystems Source => _source;
|
public EcsPipeline Source => _source;
|
||||||
|
public Type Interface => typeof(TInterface);
|
||||||
public IList Targets => _targetsSealed;
|
public IList Targets => _targetsSealed;
|
||||||
public object Filter => _filter;
|
public object Filter => _filter;
|
||||||
public bool IsHasFilter => _isHasFilter;
|
public bool IsHasFilter => _isHasFilter;
|
||||||
|
public bool IsDestroyed => _isDestroyed;
|
||||||
|
public bool IsEmpty => targets == null || targets.Length <= 0;
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
private EcsRunner<TInterface> Set(EcsSystems source, TInterface[] targets, bool isHasFilter, object filter)
|
private EcsRunner<TInterface> Set(EcsPipeline source, TInterface[] targets, bool isHasFilter, object filter)
|
||||||
{
|
{
|
||||||
_source = source;
|
_source = source;
|
||||||
this.targets = targets;
|
this.targets = targets;
|
||||||
@ -225,8 +238,6 @@ namespace DCFApixels.DragonECS
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual void OnSetup() { }
|
|
||||||
|
|
||||||
internal void Rebuild()
|
internal void Rebuild()
|
||||||
{
|
{
|
||||||
if(_isHasFilter)
|
if(_isHasFilter)
|
||||||
@ -234,6 +245,20 @@ namespace DCFApixels.DragonECS
|
|||||||
else
|
else
|
||||||
Set(_source, FilterSystems(_source.AllSystems, _filter), _isHasFilter, _filter);
|
Set(_source, FilterSystems(_source.AllSystems, _filter), _isHasFilter, _filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Destroy()
|
||||||
|
{
|
||||||
|
_isDestroyed = true;
|
||||||
|
_source.OnRunnerDestroy(this);
|
||||||
|
_source = null;
|
||||||
|
targets = null;
|
||||||
|
_targetsSealed = null;
|
||||||
|
_filter = null;
|
||||||
|
OnDestroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void OnSetup() { }
|
||||||
|
protected virtual void OnDestroy() { }
|
||||||
}
|
}
|
||||||
|
|
||||||
#region Extensions
|
#region Extensions
|
||||||
|
Loading…
Reference in New Issue
Block a user