DragonECS/src/Builtin/InjectProcessor.cs

68 lines
1.8 KiB
C#
Raw Normal View History

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DCFApixels.DragonECS
{
2023-03-12 02:02:39 +08:00
public interface IEcsInject<T> : IEcsProcessor
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-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-12 02:02:39 +08:00
public class InjectProcessor<T> : IEcsPreInitSystem
{
private T _injectedData;
public InjectProcessor(T injectedData)
{
_injectedData = injectedData;
}
2023-03-12 02:02:39 +08:00
public void PreInit(EcsSession session)
{
2023-03-12 02:02:39 +08:00
var injector = session.GetRunner<IEcsInject<T>>();
injector.Inject(_injectedData);
}
}
public static class InjectProcessorExstensions
{
public static EcsSession Inject<T>(this EcsSession self, T data)
{
self.Add(new InjectProcessor<T>(data));
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;
}
}
}