mirror of
https://github.com/DCFApixels/DragonECS.git
synced 2025-09-17 09:24:37 +08:00
update
This commit is contained in:
parent
ab50dcb7e3
commit
b3571e3ed8
@ -37,13 +37,51 @@ namespace DCFApixels.DragonECS
|
||||
private readonly List<InitDeclaredRunner> _initDeclaredRunners = new List<InitDeclaredRunner>(4);
|
||||
|
||||
public readonly LayersMap Layers;
|
||||
public readonly Injector.Builder Injector;
|
||||
public readonly InitInjector Injector;
|
||||
public readonly Configurator Configs;
|
||||
|
||||
private AddParams _defaultAddParams = new AddParams(BASIC_LAYER, 0, false);
|
||||
|
||||
private HashSet<Type> _uniqueSystemsSet = new HashSet<Type>();
|
||||
|
||||
|
||||
#region InitInjector
|
||||
public readonly struct InitInjector
|
||||
{
|
||||
public readonly Injector.Builder Instance;
|
||||
public readonly Builder PipelineBuilder;
|
||||
public InitInjector(Injector.Builder instance, Builder pipelineBuilder)
|
||||
{
|
||||
Instance = instance;
|
||||
PipelineBuilder = pipelineBuilder;
|
||||
}
|
||||
public Builder AddNode<T>()
|
||||
{
|
||||
Instance.AddNode<T>();
|
||||
return PipelineBuilder;
|
||||
}
|
||||
public Builder Inject<T>(T obj)
|
||||
{
|
||||
Instance.Inject(obj);
|
||||
return PipelineBuilder;
|
||||
}
|
||||
public Builder Extract<T>(ref T obj)
|
||||
{
|
||||
Instance.Extract(ref obj);
|
||||
return PipelineBuilder;
|
||||
}
|
||||
public Builder Add(Injector.Builder other)
|
||||
{
|
||||
Instance.Add(other);
|
||||
return PipelineBuilder;
|
||||
}
|
||||
public Injector Build(EcsPipeline pipeline)
|
||||
{
|
||||
return Instance.Build(pipeline);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
//private ReadOnlySpan<SystemNode> SystemRecords
|
||||
//{
|
||||
@ -57,7 +95,8 @@ namespace DCFApixels.DragonECS
|
||||
if (config == null) { config = new ConfigContainer(); }
|
||||
Configs = new Configurator(config, this);
|
||||
|
||||
Injector = new Injector.Builder(this);
|
||||
var injectorBuilder = new Injector.Builder();
|
||||
Injector = new InitInjector(injectorBuilder, this);
|
||||
Injector.AddNode<object>();
|
||||
Injector.AddNode<EcsWorld>();
|
||||
Injector.AddNode<EcsAspect>();
|
||||
@ -368,7 +407,7 @@ namespace DCFApixels.DragonECS
|
||||
}
|
||||
}
|
||||
|
||||
EcsPipeline pipeline = new EcsPipeline(allSystems, Configs.Instance.GetContainer(), Injector);
|
||||
EcsPipeline pipeline = new EcsPipeline(allSystems, Configs.Instance.GetContainer(), Injector.Instance);
|
||||
foreach (var item in _initDeclaredRunners)
|
||||
{
|
||||
item.Declare(pipeline);
|
||||
|
@ -90,7 +90,7 @@ namespace DCFApixels.DragonECS
|
||||
}
|
||||
if(injectorBuilder == null)
|
||||
{
|
||||
injectorBuilder = new Injector.Builder(null);
|
||||
injectorBuilder = new Injector.Builder();
|
||||
}
|
||||
|
||||
_configs = configs;
|
||||
|
@ -176,21 +176,18 @@ namespace DCFApixels.DragonECS
|
||||
|
||||
public class Builder : IInjector
|
||||
{
|
||||
private EcsPipeline.Builder _source;
|
||||
private Injector _instance;
|
||||
private List<InitInjectBase> _initInjections = new List<InitInjectBase>(32);
|
||||
private EcsWorld _monoWorld;
|
||||
internal Builder(EcsPipeline.Builder source)
|
||||
internal Builder()
|
||||
{
|
||||
_source = source;
|
||||
_instance = new Injector();
|
||||
}
|
||||
public EcsPipeline.Builder AddNode<T>()
|
||||
public void AddNode<T>()
|
||||
{
|
||||
_instance.TryDeclare<T>();
|
||||
return _source;
|
||||
}
|
||||
public EcsPipeline.Builder Inject<T>(T obj)
|
||||
public void Inject<T>(T obj)
|
||||
{
|
||||
if (obj is EcsWorld objWorld)
|
||||
{
|
||||
@ -217,9 +214,8 @@ namespace DCFApixels.DragonECS
|
||||
}
|
||||
}
|
||||
_initInjections.Add(new InitInject<T>(obj));
|
||||
return _source;
|
||||
}
|
||||
public EcsPipeline.Builder Extract<T>(ref T obj) // TODO проверить
|
||||
public void Extract<T>(ref T obj) // TODO проверить
|
||||
{
|
||||
Type type = typeof(T);
|
||||
for (int i = _initInjections.Count - 1; i >= 0; i--)
|
||||
@ -228,11 +224,10 @@ namespace DCFApixels.DragonECS
|
||||
if (type.IsAssignableFrom(item.Type))
|
||||
{
|
||||
obj = (T)item.Raw;
|
||||
return _source;
|
||||
return;
|
||||
}
|
||||
}
|
||||
Throw.UndefinedException();
|
||||
return default;
|
||||
}
|
||||
public Injector Build(EcsPipeline pipeline)
|
||||
{
|
||||
@ -242,7 +237,6 @@ namespace DCFApixels.DragonECS
|
||||
monoWorldSystem.World = _monoWorld;
|
||||
}
|
||||
|
||||
|
||||
var initInjectionCallbacks = pipeline.GetProcess<IOnInitInjectionComplete>();
|
||||
foreach (var system in initInjectionCallbacks)
|
||||
{
|
||||
@ -292,7 +286,7 @@ namespace DCFApixels.DragonECS
|
||||
}
|
||||
public override void InjectTo(Injector instance)
|
||||
{
|
||||
instance.Inject<T>(_injectedData);
|
||||
instance.Inject(_injectedData);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user