diff --git a/src/Builtin/InjectSystem.cs b/src/Builtin/InjectSystem.cs index 58d07c1..c714ca6 100644 --- a/src/Builtin/InjectSystem.cs +++ b/src/Builtin/InjectSystem.cs @@ -1,19 +1,17 @@ -using System.Collections.Generic; -using DCFApixels.DragonECS.Internal; +using DCFApixels.DragonECS.Internal; using System.Linq; namespace DCFApixels.DragonECS { - namespace Internal { - internal class InjectController + internal class PreInitInjectController { private EcsSystems _source; private InjectSystemBase[] _injectSystems; private int _injectCount; - public InjectController(EcsSystems source) + public PreInitInjectController(EcsSystems source) { _injectCount = 0; _source = source; @@ -36,17 +34,16 @@ namespace DCFApixels.DragonECS } } - - public interface IEcsInject : IEcsSystem + public interface IEcsPreInject : IEcsSystem { - public void Inject(object obj); + public void PreInject(object obj); } - [DebugColor(DebugColor.Gray)] - public sealed class InjectRunner : EcsRunner, IEcsInject + [DebugHide, DebugColor(DebugColor.Gray)] + public sealed class PreInjectRunner : EcsRunner, IEcsPreInject { - void IEcsInject.Inject(object obj) + void IEcsPreInject.PreInject(object obj) { - foreach (var item in targets) item.Inject(obj); + foreach (var item in targets) item.PreInject(obj); } } @@ -54,54 +51,51 @@ namespace DCFApixels.DragonECS { public void Inject(T obj); } - [DebugColor(DebugColor.Gray)] + + [DebugHide, DebugColor(DebugColor.Gray)] public sealed class InjectRunner : EcsRunner>, IEcsInject { + private IEcsPreInject _preInjectchache; void IEcsInject.Inject(T obj) { + _preInjectchache.PreInject(obj); foreach (var item in targets) item.Inject(obj); } + + protected override void OnSetup() + { + _preInjectchache = Source.GetRunner(); + } } - public interface IEcsInjectCallbacks : IEcsSystem + public interface IEcsPreInitInjectCallbacks : IEcsSystem { - public void OnInjectionBefore(); - public void OnInjectionAfter(); + public void OnPreInitInjectionBefore(); + public void OnPreInitInjectionAfter(); } - [DebugColor(DebugColor.Gray)] - public sealed class InjectCallbacksRunner : EcsRunner, IEcsInjectCallbacks + + [DebugHide, DebugColor(DebugColor.Gray)] + public sealed class InjectCallbacksRunner : EcsRunner, IEcsPreInitInjectCallbacks { - public void OnInjectionAfter() + public void OnPreInitInjectionAfter() { - foreach (var item in targets) item.OnInjectionAfter(); + foreach (var item in targets) item.OnPreInitInjectionAfter(); } - public void OnInjectionBefore() + public void OnPreInitInjectionBefore() { - foreach (var item in targets) item.OnInjectionBefore(); + foreach (var item in targets) item.OnPreInitInjectionBefore(); } } - public class InjectSystemBase - { - private static int _injectSystemID = EcsDebug.RegisterMark("InjectSystem"); + public class InjectSystemBase { } - protected static void ProfileMarkerBegin() - { - EcsDebug.ProfileMarkBegin(_injectSystemID); - } - protected static void ProfileMarkerEnd() - { - EcsDebug.ProfileMarkEnd(_injectSystemID); - } - } - - [DebugColor(DebugColor.Gray)] - public class InjectSystem : InjectSystemBase, IEcsPreInitSystem, IEcsInject, IEcsInjectCallbacks + [DebugHide, DebugColor(DebugColor.Gray)] + public class InjectSystem : InjectSystemBase, IEcsPreInitSystem, IEcsInject, IEcsPreInitInjectCallbacks { private T _injectedData; - private InjectController _injectController; - void IEcsInject.Inject(InjectController obj) => _injectController = obj; + private PreInitInjectController _injectController; + void IEcsInject.Inject(PreInitInjectController obj) => _injectController = obj; public InjectSystem(T injectedData) { @@ -110,33 +104,29 @@ namespace DCFApixels.DragonECS public void PreInit(EcsSystems systems) { - if(_injectController == null) - { - ProfileMarkerBegin(); - _injectController = new InjectController(systems); - var injectMapRunner = systems.GetRunner>(); - systems.GetRunner().OnInjectionBefore(); + if (_injectController == null) + { + _injectController = new PreInitInjectController(systems); + var injectMapRunner = systems.GetRunner>(); + systems.GetRunner().OnPreInitInjectionBefore(); injectMapRunner.Inject(_injectController); } var injectRunnerGeneric = systems.GetRunner>(); - var injectRunner = systems.GetRunner(); injectRunnerGeneric.Inject(_injectedData); - injectRunner.Inject(_injectedData); if (_injectController.OnInject()) { _injectController.Destroy(); - var injectCallbacksRunner = systems.GetRunner(); - injectCallbacksRunner.OnInjectionAfter(); - ProfileMarkerEnd(); + var injectCallbacksRunner = systems.GetRunner(); + injectCallbacksRunner.OnPreInitInjectionAfter(); } } - public void OnInjectionBefore() { } + public void OnPreInitInjectionBefore() { } - public void OnInjectionAfter() + public void OnPreInitInjectionAfter() { _injectController = null; }