mirror of
https://github.com/DCFApixels/DragonECS.git
synced 2025-09-18 09:54:35 +08:00
rename IEcsSystem to IEcsProcess
This commit is contained in:
parent
9d35096f09
commit
5661d1e6d9
@ -3,19 +3,19 @@
|
|||||||
namespace DCFApixels.DragonECS
|
namespace DCFApixels.DragonECS
|
||||||
{
|
{
|
||||||
#region Interfaces
|
#region Interfaces
|
||||||
public interface IEcsPreInitProcess : IEcsSystem
|
public interface IEcsPreInitProcess : IEcsProcess
|
||||||
{
|
{
|
||||||
void PreInit(EcsPipeline pipeline);
|
void PreInit(EcsPipeline pipeline);
|
||||||
}
|
}
|
||||||
public interface IEcsInitProcess : IEcsSystem
|
public interface IEcsInitProcess : IEcsProcess
|
||||||
{
|
{
|
||||||
void Init(EcsPipeline pipeline);
|
void Init(EcsPipeline pipeline);
|
||||||
}
|
}
|
||||||
public interface IEcsRunProcess : IEcsSystem
|
public interface IEcsRunProcess : IEcsProcess
|
||||||
{
|
{
|
||||||
void Run(EcsPipeline pipeline);
|
void Run(EcsPipeline pipeline);
|
||||||
}
|
}
|
||||||
public interface IEcsDestroyProcess : IEcsSystem
|
public interface IEcsDestroyProcess : IEcsProcess
|
||||||
{
|
{
|
||||||
void Destroy(EcsPipeline pipeline);
|
void Destroy(EcsPipeline pipeline);
|
||||||
}
|
}
|
||||||
|
@ -5,15 +5,15 @@ using System.Linq;
|
|||||||
|
|
||||||
namespace DCFApixels.DragonECS
|
namespace DCFApixels.DragonECS
|
||||||
{
|
{
|
||||||
public interface IEcsPreInject : IEcsSystem
|
public interface IEcsPreInject : IEcsProcess
|
||||||
{
|
{
|
||||||
void PreInject(object obj);
|
void PreInject(object obj);
|
||||||
}
|
}
|
||||||
public interface IEcsInject<T> : IEcsSystem
|
public interface IEcsInject<T> : IEcsProcess
|
||||||
{
|
{
|
||||||
void Inject(T obj);
|
void Inject(T obj);
|
||||||
}
|
}
|
||||||
public interface IEcsPreInitInjectProcess : IEcsSystem
|
public interface IEcsPreInitInjectProcess : IEcsProcess
|
||||||
{
|
{
|
||||||
void OnPreInitInjectionBefore();
|
void OnPreInitInjectionBefore();
|
||||||
void OnPreInitInjectionAfter();
|
void OnPreInitInjectionAfter();
|
||||||
|
@ -6,7 +6,7 @@ namespace DCFApixels.DragonECS
|
|||||||
namespace Internal
|
namespace Internal
|
||||||
{
|
{
|
||||||
[DebugHide, DebugColor(DebugColor.Black)]
|
[DebugHide, DebugColor(DebugColor.Black)]
|
||||||
public class SystemsLayerMarkerSystem : IEcsSystem
|
public class SystemsLayerMarkerSystem : IEcsProcess
|
||||||
{
|
{
|
||||||
public readonly string name;
|
public readonly string name;
|
||||||
public SystemsLayerMarkerSystem(string name) => this.name = name;
|
public SystemsLayerMarkerSystem(string name) => this.name = name;
|
||||||
|
@ -11,30 +11,30 @@ namespace DCFApixels.DragonECS
|
|||||||
{
|
{
|
||||||
public sealed class EcsPipeline
|
public sealed class EcsPipeline
|
||||||
{
|
{
|
||||||
private IEcsSystem[] _allSystems;
|
private IEcsProcess[] _allSystems;
|
||||||
private Dictionary<Type, IEcsRunner> _runners;
|
private Dictionary<Type, IEcsRunner> _runners;
|
||||||
private IEcsRunProcess _runRunnerCache;
|
private IEcsRunProcess _runRunnerCache;
|
||||||
|
|
||||||
private ReadOnlyCollection<IEcsSystem> _allSystemsSealed;
|
private ReadOnlyCollection<IEcsProcess> _allSystemsSealed;
|
||||||
private ReadOnlyDictionary<Type, IEcsRunner> _allRunnersSealed;
|
private ReadOnlyDictionary<Type, IEcsRunner> _allRunnersSealed;
|
||||||
|
|
||||||
private bool _isInit;
|
private bool _isInit;
|
||||||
private bool _isDestoryed;
|
private bool _isDestoryed;
|
||||||
|
|
||||||
#region Properties
|
#region Properties
|
||||||
public ReadOnlyCollection<IEcsSystem> AllSystems => _allSystemsSealed;
|
public ReadOnlyCollection<IEcsProcess> AllSystems => _allSystemsSealed;
|
||||||
public ReadOnlyDictionary<Type, IEcsRunner> AllRunners => _allRunnersSealed;
|
public ReadOnlyDictionary<Type, IEcsRunner> AllRunners => _allRunnersSealed;
|
||||||
public bool IsInit => _isInit;
|
public bool IsInit => _isInit;
|
||||||
public bool IsDestoryed => _isDestoryed;
|
public bool IsDestoryed => _isDestoryed;
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Constructors
|
#region Constructors
|
||||||
private EcsPipeline(IEcsSystem[] systems)
|
private EcsPipeline(IEcsProcess[] systems)
|
||||||
{
|
{
|
||||||
_allSystems = systems;
|
_allSystems = systems;
|
||||||
_runners = new Dictionary<Type, IEcsRunner>();
|
_runners = new Dictionary<Type, IEcsRunner>();
|
||||||
|
|
||||||
_allSystemsSealed = new ReadOnlyCollection<IEcsSystem>(_allSystems);
|
_allSystemsSealed = new ReadOnlyCollection<IEcsProcess>(_allSystems);
|
||||||
_allRunnersSealed = new ReadOnlyDictionary<Type, IEcsRunner>(_runners);
|
_allRunnersSealed = new ReadOnlyDictionary<Type, IEcsRunner>(_runners);
|
||||||
|
|
||||||
_isInit = false;
|
_isInit = false;
|
||||||
@ -43,7 +43,7 @@ namespace DCFApixels.DragonECS
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Runners
|
#region Runners
|
||||||
public T GetRunner<T>() where T : IEcsSystem
|
public T GetRunner<T>() where T : IEcsProcess
|
||||||
{
|
{
|
||||||
Type type = typeof(T);
|
Type type = typeof(T);
|
||||||
if (_runners.TryGetValue(type, out IEcsRunner result))
|
if (_runners.TryGetValue(type, out IEcsRunner result))
|
||||||
@ -132,7 +132,7 @@ namespace DCFApixels.DragonECS
|
|||||||
{
|
{
|
||||||
private const int KEYS_CAPACITY = 4;
|
private const int KEYS_CAPACITY = 4;
|
||||||
private HashSet<Type> _uniqueTypes;
|
private HashSet<Type> _uniqueTypes;
|
||||||
private readonly Dictionary<string, List<IEcsSystem>> _systems;
|
private readonly Dictionary<string, List<IEcsProcess>> _systems;
|
||||||
private readonly string _basicLayer;
|
private readonly string _basicLayer;
|
||||||
public readonly LayerList Layers;
|
public readonly LayerList Layers;
|
||||||
public Builder()
|
public Builder()
|
||||||
@ -142,14 +142,14 @@ namespace DCFApixels.DragonECS
|
|||||||
Layers.Insert(EcsConsts.BASIC_LAYER, EcsConsts.PRE_BEGIN_LAYER, EcsConsts.BEGIN_LAYER);
|
Layers.Insert(EcsConsts.BASIC_LAYER, EcsConsts.PRE_BEGIN_LAYER, EcsConsts.BEGIN_LAYER);
|
||||||
Layers.InsertAfter(EcsConsts.BASIC_LAYER, EcsConsts.END_LAYER, EcsConsts.POST_END_LAYER);
|
Layers.InsertAfter(EcsConsts.BASIC_LAYER, EcsConsts.END_LAYER, EcsConsts.POST_END_LAYER);
|
||||||
_uniqueTypes = new HashSet<Type>();
|
_uniqueTypes = new HashSet<Type>();
|
||||||
_systems = new Dictionary<string, List<IEcsSystem>>(KEYS_CAPACITY);
|
_systems = new Dictionary<string, List<IEcsProcess>>(KEYS_CAPACITY);
|
||||||
}
|
}
|
||||||
public Builder Add(IEcsSystem system, string layerName = null)
|
public Builder Add(IEcsProcess system, string layerName = null)
|
||||||
{
|
{
|
||||||
AddInternal(system, layerName, false);
|
AddInternal(system, layerName, false);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
public Builder AddUnique(IEcsSystem system, string layerName = null)
|
public Builder AddUnique(IEcsProcess system, string layerName = null)
|
||||||
{
|
{
|
||||||
AddInternal(system, layerName, true);
|
AddInternal(system, layerName, true);
|
||||||
return this;
|
return this;
|
||||||
@ -161,13 +161,13 @@ namespace DCFApixels.DragonECS
|
|||||||
list.RemoveAll(o => o is TSystem);
|
list.RemoveAll(o => o is TSystem);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
private void AddInternal(IEcsSystem system, string layerName, bool isUnique)
|
private void AddInternal(IEcsProcess system, string layerName, bool isUnique)
|
||||||
{
|
{
|
||||||
if (layerName == null) layerName = _basicLayer;
|
if (layerName == null) layerName = _basicLayer;
|
||||||
List<IEcsSystem> list;
|
List<IEcsProcess> list;
|
||||||
if (!_systems.TryGetValue(layerName, out list))
|
if (!_systems.TryGetValue(layerName, out list))
|
||||||
{
|
{
|
||||||
list = new List<IEcsSystem> { new SystemsLayerMarkerSystem(layerName.ToString()) };
|
list = new List<IEcsProcess> { new SystemsLayerMarkerSystem(layerName.ToString()) };
|
||||||
_systems.Add(layerName, list);
|
_systems.Add(layerName, list);
|
||||||
}
|
}
|
||||||
if ((_uniqueTypes.Add(system.GetType()) == false && isUnique))
|
if ((_uniqueTypes.Add(system.GetType()) == false && isUnique))
|
||||||
@ -185,8 +185,8 @@ namespace DCFApixels.DragonECS
|
|||||||
public EcsPipeline Build()
|
public EcsPipeline Build()
|
||||||
{
|
{
|
||||||
Add(new DeleteEmptyEntitesSystem(), EcsConsts.POST_END_LAYER);
|
Add(new DeleteEmptyEntitesSystem(), EcsConsts.POST_END_LAYER);
|
||||||
List<IEcsSystem> result = new List<IEcsSystem>(32);
|
List<IEcsProcess> result = new List<IEcsProcess>(32);
|
||||||
List<IEcsSystem> basicBlockList = _systems[_basicLayer];
|
List<IEcsProcess> basicBlockList = _systems[_basicLayer];
|
||||||
foreach (var item in _systems)
|
foreach (var item in _systems)
|
||||||
{
|
{
|
||||||
if (!Layers.Contains(item.Key))
|
if (!Layers.Contains(item.Key))
|
||||||
@ -315,12 +315,12 @@ namespace DCFApixels.DragonECS
|
|||||||
public static class EcsPipelineExtensions
|
public static class EcsPipelineExtensions
|
||||||
{
|
{
|
||||||
public static bool IsNullOrDestroyed(this EcsPipeline self) => self == null || self.IsDestoryed;
|
public static bool IsNullOrDestroyed(this EcsPipeline self) => self == null || self.IsDestoryed;
|
||||||
public static EcsPipeline.Builder Add(this EcsPipeline.Builder self, IEnumerable<IEcsSystem> range, string layerName = null)
|
public static EcsPipeline.Builder Add(this EcsPipeline.Builder self, IEnumerable<IEcsProcess> range, string layerName = null)
|
||||||
{
|
{
|
||||||
foreach (var item in range) self.Add(item, layerName);
|
foreach (var item in range) self.Add(item, layerName);
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
public static EcsPipeline.Builder AddUnique(this EcsPipeline.Builder self, IEnumerable<IEcsSystem> range, string layerName = null)
|
public static EcsPipeline.Builder AddUnique(this EcsPipeline.Builder self, IEnumerable<IEcsProcess> range, string layerName = null)
|
||||||
{
|
{
|
||||||
foreach (var item in range) self.AddUnique(item, layerName);
|
foreach (var item in range) self.AddUnique(item, layerName);
|
||||||
return self;
|
return self;
|
||||||
|
@ -23,7 +23,7 @@ namespace DCFApixels.DragonECS
|
|||||||
public EcsRunnerFilterAttribute(object filter) : this(null, filter) { }
|
public EcsRunnerFilterAttribute(object filter) : this(null, filter) { }
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface IEcsSystem { }
|
public interface IEcsProcess { }
|
||||||
|
|
||||||
namespace RunnersCore
|
namespace RunnersCore
|
||||||
{
|
{
|
||||||
@ -103,7 +103,7 @@ namespace DCFApixels.DragonECS
|
|||||||
}
|
}
|
||||||
|
|
||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
internal static void InitFor<TInterface>() where TInterface : IEcsSystem
|
internal static void InitFor<TInterface>() where TInterface : IEcsProcess
|
||||||
{
|
{
|
||||||
Type interfaceType = typeof(TInterface);
|
Type interfaceType = typeof(TInterface);
|
||||||
|
|
||||||
@ -122,8 +122,8 @@ namespace DCFApixels.DragonECS
|
|||||||
#if UNITY_2020_3_OR_NEWER
|
#if UNITY_2020_3_OR_NEWER
|
||||||
[UnityEngine.Scripting.RequireDerived, UnityEngine.Scripting.Preserve]
|
[UnityEngine.Scripting.RequireDerived, UnityEngine.Scripting.Preserve]
|
||||||
#endif
|
#endif
|
||||||
public abstract class EcsRunner<TInterface> : IEcsSystem, IEcsRunner
|
public abstract class EcsRunner<TInterface> : IEcsProcess, IEcsRunner
|
||||||
where TInterface : IEcsSystem
|
where TInterface : IEcsProcess
|
||||||
{
|
{
|
||||||
#region Register
|
#region Register
|
||||||
private static Type _subclass;
|
private static Type _subclass;
|
||||||
@ -142,9 +142,9 @@ namespace DCFApixels.DragonECS
|
|||||||
{
|
{
|
||||||
throw new ArgumentException($"{typeof(TInterface).FullName} is not interface");
|
throw new ArgumentException($"{typeof(TInterface).FullName} is not interface");
|
||||||
}
|
}
|
||||||
if (interfaces.Length != 1 || interfaces[0] != typeof(IEcsSystem))
|
if (interfaces.Length != 1 || interfaces[0] != typeof(IEcsProcess))
|
||||||
{
|
{
|
||||||
throw new ArgumentException($"{typeof(TInterface).FullName} does not directly inherit the {nameof(IEcsSystem)} interface");
|
throw new ArgumentException($"{typeof(TInterface).FullName} does not directly inherit the {nameof(IEcsProcess)} interface");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
_subclass = subclass;
|
_subclass = subclass;
|
||||||
@ -152,15 +152,15 @@ namespace DCFApixels.DragonECS
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region FilterSystems
|
#region FilterSystems
|
||||||
private static TInterface[] FilterSystems(IEnumerable<IEcsSystem> targets)
|
private static TInterface[] FilterSystems(IEnumerable<IEcsProcess> targets)
|
||||||
{
|
{
|
||||||
return targets.Where(o => o is TInterface).Select(o => (TInterface)o).ToArray();
|
return targets.Where(o => o is TInterface).Select(o => (TInterface)o).ToArray();
|
||||||
}
|
}
|
||||||
private static TInterface[] FilterSystems(IEnumerable<IEcsSystem> targets, object filter)
|
private static TInterface[] FilterSystems(IEnumerable<IEcsProcess> targets, object filter)
|
||||||
{
|
{
|
||||||
Type interfaceType = typeof(TInterface);
|
Type interfaceType = typeof(TInterface);
|
||||||
|
|
||||||
IEnumerable<IEcsSystem> newTargets;
|
IEnumerable<IEcsProcess> newTargets;
|
||||||
|
|
||||||
if (filter != null)
|
if (filter != null)
|
||||||
{
|
{
|
||||||
@ -189,7 +189,7 @@ namespace DCFApixels.DragonECS
|
|||||||
{
|
{
|
||||||
if (_subclass == null) EcsRunnerActivator.InitFor<TInterface>();
|
if (_subclass == null) EcsRunnerActivator.InitFor<TInterface>();
|
||||||
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)(IEcsProcess)instance.Set(source, targets, isHasFilter, filter);
|
||||||
}
|
}
|
||||||
public static TInterface Instantiate(EcsPipeline source)
|
public static TInterface Instantiate(EcsPipeline source)
|
||||||
{
|
{
|
||||||
@ -253,11 +253,11 @@ namespace DCFApixels.DragonECS
|
|||||||
#region Extensions
|
#region Extensions
|
||||||
public static class EcsRunner
|
public static class EcsRunner
|
||||||
{
|
{
|
||||||
public static void Destroy(IEcsSystem runner) => ((IEcsRunner)runner).Destroy();
|
public static void Destroy(IEcsProcess runner) => ((IEcsRunner)runner).Destroy();
|
||||||
}
|
}
|
||||||
public static class IEcsSystemExtensions
|
public static class IEcsSystemExtensions
|
||||||
{
|
{
|
||||||
public static bool IsRunner(this IEcsSystem self)
|
public static bool IsRunner(this IEcsProcess self)
|
||||||
{
|
{
|
||||||
return self is IEcsRunner;
|
return self is IEcsRunner;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user