2023-03-16 01:49:14 +08:00
|
|
|
|
namespace DCFApixels.DragonECS
|
2023-02-13 21:11:54 +08:00
|
|
|
|
{
|
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-12 02:48:51 +08:00
|
|
|
|
public sealed class InjectRunner<T> : EcsRunner<IEcsInject<T>>, IEcsInject<T>
|
2023-02-13 21:11:54 +08:00
|
|
|
|
{
|
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-16 01:49:14 +08:00
|
|
|
|
public class InjectSystem<T> : IEcsPreInitSystem
|
2023-03-12 02:02:39 +08:00
|
|
|
|
{
|
2023-02-13 21:11:54 +08:00
|
|
|
|
private T _injectedData;
|
|
|
|
|
|
2023-03-16 01:49:14 +08:00
|
|
|
|
public InjectSystem(T injectedData)
|
2023-02-13 21:11:54 +08:00
|
|
|
|
{
|
|
|
|
|
_injectedData = injectedData;
|
|
|
|
|
}
|
|
|
|
|
|
2023-03-12 02:02:39 +08:00
|
|
|
|
public void PreInit(EcsSession session)
|
2023-02-13 21:11:54 +08:00
|
|
|
|
{
|
2023-03-12 02:02:39 +08:00
|
|
|
|
var injector = session.GetRunner<IEcsInject<T>>();
|
|
|
|
|
injector.Inject(_injectedData);
|
2023-02-13 21:11:54 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-03-16 01:49:14 +08:00
|
|
|
|
public static class InjectSystemExstensions
|
2023-02-13 21:11:54 +08:00
|
|
|
|
{
|
|
|
|
|
public static EcsSession Inject<T>(this EcsSession self, T data)
|
|
|
|
|
{
|
2023-03-16 01:49:14 +08:00
|
|
|
|
self.Add(new InjectSystem<T>(data));
|
2023-02-13 21:11:54 +08:00
|
|
|
|
return self;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static EcsSession Inject<A, B>(this EcsSession self, A dataA, B dataB)
|
|
|
|
|
{
|
|
|
|
|
self.Inject(dataA).Inject(dataB);
|
|
|
|
|
return self;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static EcsSession Inject<A, B, C, D>(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<A, B, C, D, E>(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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|