namespace DCFApixels.DragonECS { public interface IEcsInject : IEcsSystem { public void Inject(T obj); } [DebugColor(DebugColor.Gray)] public sealed class InjectRunner : EcsRunner>, IEcsInject { void IEcsInject.Inject(T obj) { foreach (var item in targets) { item.Inject(obj); } } } [DebugColor(DebugColor.Gray)] public class InjectSystem : IEcsPreInitSystem { private T _injectedData; public InjectSystem(T injectedData) { _injectedData = injectedData; } public void PreInit(EcsSystems systems) { var injector = systems.GetRunner>(); injector.Inject(_injectedData); } } public static class InjectSystemExstensions { public static EcsSystems.Builder Inject(this EcsSystems.Builder self, T data) { self.Add(new InjectSystem(data)); return self; } public static EcsSystems.Builder Inject(this EcsSystems.Builder self, A a, B b) { self.Inject(a).Inject(b); return self; } public static EcsSystems.Builder Inject(this EcsSystems.Builder self, A a, B b, C c, D d) { self.Inject(a).Inject(b).Inject(c).Inject(d); return self; } public static EcsSystems.Builder Inject(this EcsSystems.Builder self, A a, B b, C c, D d, E e) { self.Inject(a).Inject(b).Inject(c).Inject(d).Inject(e); return self; } public static EcsSystems.Builder Inject(this EcsSystems.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); return self; } } }