DragonECS/src/Builtin/InjectSystem.cs

65 lines
1.9 KiB
C#
Raw Normal View History

2023-03-16 01:49:14 +08:00
namespace DCFApixels.DragonECS
{
2023-03-12 20:45:18 +08:00
public interface IEcsInject<T> : IEcsSystem
2023-03-12 01:33:48 +08:00
{
public void Inject(T obj);
}
2023-03-26 11:19:03 +08:00
[DebugColor(DebugColor.Gray)]
2023-03-12 02:48:51 +08:00
public sealed class InjectRunner<T> : EcsRunner<IEcsInject<T>>, IEcsInject<T>
{
2023-03-12 02:02:39 +08:00
void IEcsInject<T>.Inject(T obj)
{
foreach (var item in targets)
{
item.Inject(obj);
}
}
}
2023-03-12 01:33:48 +08:00
2023-03-26 11:19:03 +08:00
[DebugColor(DebugColor.Gray)]
2023-03-16 01:49:14 +08:00
public class InjectSystem<T> : IEcsPreInitSystem
2023-03-12 02:02:39 +08:00
{
private T _injectedData;
2023-03-16 01:49:14 +08:00
public InjectSystem(T injectedData)
{
_injectedData = injectedData;
}
2023-03-26 11:19:03 +08:00
public void PreInit(EcsSystems systems)
{
2023-03-26 11:19:03 +08:00
var injector = systems.GetRunner<IEcsInject<T>>();
2023-03-12 02:02:39 +08:00
injector.Inject(_injectedData);
}
}
2023-03-16 01:49:14 +08:00
public static class InjectSystemExstensions
{
2023-03-26 11:19:03 +08:00
public static EcsSystems.Builder Inject<T>(this EcsSystems.Builder self, T data)
{
2023-03-16 01:49:14 +08:00
self.Add(new InjectSystem<T>(data));
return self;
}
2023-03-26 11:19:03 +08:00
public static EcsSystems.Builder Inject<A, B>(this EcsSystems.Builder self, A a, B b)
{
2023-03-26 11:19:03 +08:00
self.Inject(a).Inject(b);
return self;
}
2023-03-26 11:19:03 +08:00
public static EcsSystems.Builder Inject<A, B, C, D>(this EcsSystems.Builder self, A a, B b, C c, D d)
{
2023-03-26 11:19:03 +08:00
self.Inject(a).Inject(b).Inject(c).Inject(d);
return self;
}
2023-03-26 11:19:03 +08:00
public static EcsSystems.Builder Inject<A, B, C, D, E>(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<A, B, C, D, E, F>(this EcsSystems.Builder self, A a, B b, C c, D d, E e, F f)
{
2023-03-26 11:19:03 +08:00
self.Inject(a).Inject(b).Inject(c).Inject(d).Inject(e).Inject(f);
return self;
}
}
}