using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DCFApixels.DragonECS { public interface IEcsInject : IEcsProcessor { public void Inject(T obj); } public sealed class InjectRunner : EcsRunner>, IEcsInject { void IEcsInject.Inject(T obj) { foreach (var item in targets) { item.Inject(obj); } } } public class InjectProcessor : IEcsPreInitSystem { private T _injectedData; public InjectProcessor(T injectedData) { _injectedData = injectedData; } public void PreInit(EcsSession session) { var injector = session.GetRunner>(); injector.Inject(_injectedData); } } public static class InjectProcessorExstensions { public static EcsSession Inject(this EcsSession self, T data) { self.Add(new InjectProcessor(data)); return self; } public static EcsSession Inject(this EcsSession self, A dataA, B dataB) { self.Inject(dataA).Inject(dataB); return self; } public static EcsSession Inject(this EcsSession self, A dataA, B dataB, C dataC, D dataD) { self.Inject(dataA).Inject(dataB).Inject(dataC).Inject(dataD); return self; } public static EcsSession Inject(this EcsSession self, A dataA, B dataB, C dataC, D dataD, E dataE) { self.Inject(dataA).Inject(dataB).Inject(dataC).Inject(dataD).Inject(dataE); return self; } } }