diff --git a/src/Builtin/InjectSystem/EcsPipelineExtensions.cs b/src/Builtin/InjectSystem/EcsPipelineExtensions.cs deleted file mode 100644 index 2ea31c2..0000000 --- a/src/Builtin/InjectSystem/EcsPipelineExtensions.cs +++ /dev/null @@ -1,66 +0,0 @@ -using DCFApixels.DragonECS.DI.Internal; - -namespace DCFApixels.DragonECS -{ - public static partial class EcsPipelineExtensions - { - public static void Inject(this EcsPipeline self, T data) - { - self.GetRunner>().Inject(data); - } - } - public static partial class EcsPipelineBuilderExtensions - { - public static EcsPipeline.Builder AddInjectionGraph(this EcsPipeline.Builder self, InjectionGraph graph) - { - self.Config.Set(InjectionGraph.CONFIG_NAME, graph); - return self; - } - public static EcsPipeline.Builder GetInjectionGraph(this EcsPipeline.Builder self, out InjectionGraph graph) - { - graph = self.Config.Get(InjectionGraph.CONFIG_NAME); - return self; - } - public static EcsPipeline.Builder Inject(this EcsPipeline.Builder self, T data) - { - if (data == null) - { - Throw.ArgumentNull(); - } - self.Add(new InitInjectionSystem(data)); - if (data is IEcsModule module) - { - self.AddModule(module); - } - return self; - } - public static EcsPipeline.Builder Inject(this EcsPipeline.Builder self, T0 d0, T1 d1) - { - return self.Inject(d0).Inject(d1); - } - public static EcsPipeline.Builder Inject(this EcsPipeline.Builder self, T0 d0, T1 d1, T2 d2) - { - return self.Inject(d0).Inject(d1).Inject(d2); - } - public static EcsPipeline.Builder Inject(this EcsPipeline.Builder self, T0 d0, T1 d1, T2 d2, T3 d3) - { - return self.Inject(d0).Inject(d1).Inject(d2).Inject(d3); - } - public static EcsPipeline.Builder Inject(this EcsPipeline.Builder self, T0 d0, T1 d1, T2 d2, T3 d3, T4 d4) - { - return self.Inject(d0).Inject(d1).Inject(d2).Inject(d3).Inject(d4); - } - public static EcsPipeline.Builder Inject(this EcsPipeline.Builder self, T0 d0, T1 d1, T2 d2, T3 d3, T4 d4, T5 f) - { - return self.Inject(d0).Inject(d1).Inject(d2).Inject(d3).Inject(d4).Inject(f); - } - public static EcsPipeline.Builder Inject(this EcsPipeline.Builder self, T0 d0, T1 d1, T2 d2, T3 d3, T4 d4, T5 f, T6 d6) - { - return self.Inject(d0).Inject(d1).Inject(d2).Inject(d3).Inject(d4).Inject(f).Inject(d6); - } - public static EcsPipeline.Builder Inject(this EcsPipeline.Builder self, T0 d0, T1 d1, T2 d2, T3 d3, T4 d4, T5 f, T6 d6, T7 d7) - { - return self.Inject(d0).Inject(d1).Inject(d2).Inject(d3).Inject(d4).Inject(f).Inject(d6).Inject(d7); - } - } -} \ No newline at end of file diff --git a/src/Builtin/InjectSystem/Exceptions.cs b/src/Builtin/InjectSystem/Exceptions.cs deleted file mode 100644 index c48f0d9..0000000 --- a/src/Builtin/InjectSystem/Exceptions.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; - -namespace DCFApixels.DragonECS.DI.Internal -{ - internal class Throw - { - public static void ArgumentNull() - { - throw new ArgumentNullException(); - } - } -} diff --git a/src/Builtin/InjectSystem/IInjectionBlock.cs b/src/Builtin/InjectSystem/IInjectionBlock.cs deleted file mode 100644 index 68a9782..0000000 --- a/src/Builtin/InjectSystem/IInjectionBlock.cs +++ /dev/null @@ -1,29 +0,0 @@ -namespace DCFApixels.DragonECS -{ - public readonly struct Injector - { - private readonly InjectionGraph _injectionGraph; - public Injector(InjectionGraph injectionGraph) - { - _injectionGraph = injectionGraph; - } - public void Inject(T obj) - { - _injectionGraph.Inject(obj); - } - public void InjectNoBoxing(T data) - { - _injectionGraph.InjectNoBoxing(data); - } -#if !REFLECTION_DISABLED - public void InjectRaw(object obj) - { - _injectionGraph.InjectRaw(obj); - } -#endif - } - public interface IInjectionBlock - { - void InjectTo(Injector i); - } -} diff --git a/src/Builtin/InjectSystem/InitInjectionSystem.cs b/src/Builtin/InjectSystem/InitInjectionSystem.cs deleted file mode 100644 index 8537b0a..0000000 --- a/src/Builtin/InjectSystem/InitInjectionSystem.cs +++ /dev/null @@ -1,62 +0,0 @@ -namespace DCFApixels.DragonECS.DI.Internal -{ - public abstract class InitInjectSystemBase : IEcsSystem { } - - [MetaTags(MetaTags.HIDDEN)] - [MetaColor(MetaColor.Gray)] - public class InitInjectionSystem : InitInjectSystemBase, IEcsPipelineMember, IEcsInject, IEcsPreInitInjectProcess - { - private EcsPipeline _pipeline; - public EcsPipeline Pipeline - { - get { return Pipeline; } - set - { - _pipeline = value; - - if (_injectedData == null) - { - return; - } - if (_injectController == null) - { - _pipeline.Config.Get(InjectionGraph.CONFIG_NAME).Init(_pipeline); - var injectPipelineRunner = _pipeline.GetRunner>(); - injectPipelineRunner.Inject(_pipeline); - EcsRunner.Destroy(injectPipelineRunner); - - _injectController = new InitInjectController(_pipeline); - var injectMapRunner = _pipeline.GetRunner>(); - _pipeline.GetRunner().OnPreInitInjectionBefore(_pipeline); - injectMapRunner.Inject(_injectController); - EcsRunner.Destroy(injectMapRunner); - } - var injectRunnerGeneric = _pipeline.GetRunner>(); - injectRunnerGeneric.Inject(_injectedData); - if (_injectController.OnInject()) - { - _injectController.Destroy(); - var injectCallbacksRunner = _pipeline.GetRunner(); - injectCallbacksRunner.OnPreInitInjectionAfter(); - EcsRunner.Destroy(injectCallbacksRunner); - } - _injectedData = default; - } - } - - private InitInjectController _injectController; - void IEcsInject.Inject(InitInjectController obj) { _injectController = obj; } - - private T _injectedData; - internal InitInjectionSystem(T injectedData) - { - if (injectedData == null) - { - Throw.ArgumentNull(); - } - _injectedData = injectedData; - } - void IEcsPreInitInjectProcess.OnPreInitInjectionBefore(EcsPipeline pipeline) { } - void IEcsPreInitInjectProcess.OnPreInitInjectionAfter() { _injectController = null; } - } -} diff --git a/src/Builtin/InjectSystem/InjectProcesses.cs b/src/Builtin/InjectSystem/InjectProcesses.cs deleted file mode 100644 index 54b429d..0000000 --- a/src/Builtin/InjectSystem/InjectProcesses.cs +++ /dev/null @@ -1,75 +0,0 @@ -using DCFApixels.DragonECS.DI.Internal; -using DCFApixels.DragonECS.RunnersCore; - -namespace DCFApixels.DragonECS -{ - [MetaName(nameof(Inject))] - [BindWithEcsRunner(typeof(EcsInjectRunner<>))] - public interface IEcsInject : IEcsSystem - { - void Inject(T obj); - } - [MetaName("PreInitInject")] - [BindWithEcsRunner(typeof(EcsInitInjectProcessRunner))] - public interface IEcsPreInitInjectProcess : IEcsSystem - { - void OnPreInitInjectionBefore(EcsPipeline pipeline); - void OnPreInitInjectionAfter(); - } -} -namespace DCFApixels.DragonECS.DI.Internal -{ - internal class InitInjectController - { - private EcsPipeline _source; - private EcsProcess _injectSystems; - private int _injectCount; - public bool IsInjectionEnd - { - get { return _injectCount >= _injectSystems.Length; } - } - public InitInjectController(EcsPipeline source) - { - _injectCount = 0; - _source = source; - _injectSystems = _source.GetProcess(); - } - public bool OnInject() - { - _injectCount++; - return IsInjectionEnd; - } - public void Destroy() - { - _source = null; - _injectSystems = EcsProcess.Empty; - } - } - [MetaTags(MetaTags.HIDDEN)] - [MetaColor(MetaColor.Gray)] - public sealed class EcsInjectRunner : EcsRunner>, IEcsInject - { - private InjectionGraph _injectionGraph; - void IEcsInject.Inject(T obj) - { - _injectionGraph.Inject(obj); - } - protected override void OnSetup() - { - _injectionGraph = Pipeline.Config.Get(InjectionGraph.CONFIG_NAME); - } - } - [MetaTags(MetaTags.HIDDEN)] - [MetaColor(MetaColor.Gray)] - public sealed class EcsInitInjectProcessRunner : EcsRunner, IEcsPreInitInjectProcess - { - public void OnPreInitInjectionAfter() - { - foreach (var item in Process) item.OnPreInitInjectionAfter(); - } - public void OnPreInitInjectionBefore(EcsPipeline pipeline) - { - foreach (var item in Process) item.OnPreInitInjectionBefore(pipeline); - } - } -} diff --git a/src/Builtin/InjectSystem/InjectSystem.cs.meta b/src/Builtin/InjectSystem/InjectSystem.cs.meta deleted file mode 100644 index b62a95c..0000000 --- a/src/Builtin/InjectSystem/InjectSystem.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0404e70f4ccc54a41b3da9268ff287ad -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/Builtin/InjectSystem/InjectionBranch.cs b/src/Builtin/InjectSystem/InjectionBranch.cs deleted file mode 100644 index fcffe76..0000000 --- a/src/Builtin/InjectSystem/InjectionBranch.cs +++ /dev/null @@ -1,65 +0,0 @@ -using System; - -namespace DCFApixels.DragonECS -{ - public class InjectionBranch - { - private InjectionGraph _source; - private Type _type; - private InjectionNodeBase[] _nodes = new InjectionNodeBase[2]; - private int _nodesCount = 0; - private bool _isDeclared = false; - - public Type Type - { - get { return _type; } - } - public bool IsDeclared - { - get { return _isDeclared; } - } - public InjectionBranch(InjectionGraph source, Type type, bool isDeclared) - { - _source = source; - _isDeclared = isDeclared; - _type = type; - } - public void SetDeclaredTrue() - { - _isDeclared = true; - } - public void Inject(object obj) - { - for (int i = 0; i < _nodesCount; i++) - { - _nodes[i].Inject(obj); - } - if (obj is IInjectionBlock container) - { - container.InjectTo(new Injector(_source)); - } - } - public void AddNode(InjectionNodeBase node) - { - if (_nodesCount >= _nodes.Length) - { - Array.Resize(ref _nodes, (_nodes.Length << 1) + 1); - } - _nodes[_nodesCount++] = node; - } - public void Trim() - { - if (_nodesCount <= 0) - { - _nodes = Array.Empty(); - return; - } - - InjectionNodeBase[] newNodes = new InjectionNodeBase[_nodesCount]; - for (int i = 0; i < newNodes.Length; i++) - { - newNodes[i] = _nodes[i]; - } - } - } -} diff --git a/src/Builtin/InjectSystem/InjectionGraph.cs b/src/Builtin/InjectSystem/InjectionGraph.cs deleted file mode 100644 index b8e9519..0000000 --- a/src/Builtin/InjectSystem/InjectionGraph.cs +++ /dev/null @@ -1,124 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace DCFApixels.DragonECS -{ - public class InjectionGraph - { - internal const string CONFIG_NAME = "DCFApixels.DragonECS.DI:" + nameof(InjectionGraph); - - private EcsPipeline _pipeline; - private Dictionary _branches = new Dictionary(32); - private Dictionary _nodes = new Dictionary(32); - private bool _isInit = false; - - public InjectionGraph() - { - Declare(); - Declare(); - } - public void Init(EcsPipeline pipeline) - { - if (_isInit) - { - throw new Exception("Already initialized"); - } - _pipeline = pipeline; - foreach (var node in _nodes.Values) - { - node.Init(pipeline); - } - _isInit = true; - } - public bool TryDeclare() - { - Type type = typeof(T); - if (_nodes.ContainsKey(type)) - { - return false; - } - InitNode(new InjectionNode(type)); - if (IsCanInstantiated(type)) - { - InitBranch(new InjectionBranch(this, type, true)); - } - return true; - } - public void Declare() - { - if (TryDeclare() == false) - { - throw new Exception(); - } - } - public void InjectNoBoxing(T data) - { - _pipeline.GetRunner>().Inject(data); - } - public void Inject(T obj) - { - Type type = typeof(T); -#if DEBUG - if (obj.GetType() != type) - { - throw new ArgumentException(); - } - if (IsCanInstantiated(type) == false) - { - throw new Exception(); - } -#endif - if (_branches.TryGetValue(type, out InjectionBranch branch) == false) - { - InitNode(new InjectionNode(type)); - branch = new InjectionBranch(this, type, true); - InitBranch(branch); - } - branch.Inject(obj); - } - -#if !REFLECTION_DISABLED - public void InjectRaw(object obj) - { - Type type = obj.GetType(); - if (_branches.TryGetValue(type, out InjectionBranch branch) == false) - { - branch = new InjectionBranch(this, type, false); - InitBranch(branch); - } - branch.Inject(obj); - } -#endif - - private void InitBranch(InjectionBranch branch) - { - _branches.Add(branch.Type, branch); - foreach (var (type, node) in _nodes) - { - if (branch.Type.IsAssignableTo(type)) - { - branch.AddNode(node); - } - } - } - private void InitNode(InjectionNodeBase node) - { - if (_pipeline != null) - { - node.Init(_pipeline); - } - _nodes.Add(node.Type, node); - foreach (var (type, branch) in _branches) - { - if (branch.Type.IsAssignableTo(type)) - { - branch.AddNode(node); - } - } - } - private bool IsCanInstantiated(Type type) - { - return !type.IsAbstract && !type.IsInterface; - } - } -} diff --git a/src/Builtin/InjectSystem/InjectionNode.cs b/src/Builtin/InjectSystem/InjectionNode.cs deleted file mode 100644 index a5efc97..0000000 --- a/src/Builtin/InjectSystem/InjectionNode.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; - -namespace DCFApixels.DragonECS -{ - public abstract class InjectionNodeBase - { - private readonly Type _type; - public Type Type - { - get { return _type; } - } - protected InjectionNodeBase(Type type) - { - _type = type; - } - public abstract void Inject(object obj); - public abstract void Init(EcsPipeline pipeline); - } - public class InjectionNode : InjectionNodeBase - { - private EcsProcess> _process; - public InjectionNode(Type type) : base(type) { } - public override void Init(EcsPipeline pipeline) - { - _process = pipeline.GetProcess>(); - } - public override void Inject(object obj) - { - for (int i = 0; i < _process.Length; i++) - { - _process[i].Inject((T)obj); - } - } - } -} diff --git a/src/Builtin/InjectSystem/Worlds.cs b/src/Builtin/InjectSystem/Worlds.cs deleted file mode 100644 index db3c5a2..0000000 --- a/src/Builtin/InjectSystem/Worlds.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace DCFApixels.DragonECS -{ - public sealed class EcsDefaultWorld : EcsWorld - { - public EcsDefaultWorld(IEcsWorldConfig config = null, short worldID = -1) : base(config, worldID) { } - } - public sealed class EcsEventWorld : EcsWorld - { - public EcsEventWorld(IEcsWorldConfig config = null, short worldID = -1) : base(config, worldID) { } - } -} diff --git a/src/Builtin/InjectSystem/Worlds.cs.meta b/src/Builtin/InjectSystem/Worlds.cs.meta deleted file mode 100644 index 6c52533..0000000 --- a/src/Builtin/InjectSystem/Worlds.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 76bb6fc0896102347bbd36ed235e45f7 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: