mirror of
https://github.com/DCFApixels/DragonECS.git
synced 2025-09-17 17:34:36 +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);
|
private readonly List<InitDeclaredRunner> _initDeclaredRunners = new List<InitDeclaredRunner>(4);
|
||||||
|
|
||||||
public readonly LayersMap Layers;
|
public readonly LayersMap Layers;
|
||||||
public readonly Injector.Builder Injector;
|
public readonly InitInjector Injector;
|
||||||
public readonly Configurator Configs;
|
public readonly Configurator Configs;
|
||||||
|
|
||||||
private AddParams _defaultAddParams = new AddParams(BASIC_LAYER, 0, false);
|
private AddParams _defaultAddParams = new AddParams(BASIC_LAYER, 0, false);
|
||||||
|
|
||||||
private HashSet<Type> _uniqueSystemsSet = new HashSet<Type>();
|
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
|
#region Properties
|
||||||
//private ReadOnlySpan<SystemNode> SystemRecords
|
//private ReadOnlySpan<SystemNode> SystemRecords
|
||||||
//{
|
//{
|
||||||
@ -57,7 +95,8 @@ namespace DCFApixels.DragonECS
|
|||||||
if (config == null) { config = new ConfigContainer(); }
|
if (config == null) { config = new ConfigContainer(); }
|
||||||
Configs = new Configurator(config, this);
|
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<object>();
|
||||||
Injector.AddNode<EcsWorld>();
|
Injector.AddNode<EcsWorld>();
|
||||||
Injector.AddNode<EcsAspect>();
|
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)
|
foreach (var item in _initDeclaredRunners)
|
||||||
{
|
{
|
||||||
item.Declare(pipeline);
|
item.Declare(pipeline);
|
||||||
|
@ -90,7 +90,7 @@ namespace DCFApixels.DragonECS
|
|||||||
}
|
}
|
||||||
if(injectorBuilder == null)
|
if(injectorBuilder == null)
|
||||||
{
|
{
|
||||||
injectorBuilder = new Injector.Builder(null);
|
injectorBuilder = new Injector.Builder();
|
||||||
}
|
}
|
||||||
|
|
||||||
_configs = configs;
|
_configs = configs;
|
||||||
|
@ -176,21 +176,18 @@ namespace DCFApixels.DragonECS
|
|||||||
|
|
||||||
public class Builder : IInjector
|
public class Builder : IInjector
|
||||||
{
|
{
|
||||||
private EcsPipeline.Builder _source;
|
|
||||||
private Injector _instance;
|
private Injector _instance;
|
||||||
private List<InitInjectBase> _initInjections = new List<InitInjectBase>(32);
|
private List<InitInjectBase> _initInjections = new List<InitInjectBase>(32);
|
||||||
private EcsWorld _monoWorld;
|
private EcsWorld _monoWorld;
|
||||||
internal Builder(EcsPipeline.Builder source)
|
internal Builder()
|
||||||
{
|
{
|
||||||
_source = source;
|
|
||||||
_instance = new Injector();
|
_instance = new Injector();
|
||||||
}
|
}
|
||||||
public EcsPipeline.Builder AddNode<T>()
|
public void AddNode<T>()
|
||||||
{
|
{
|
||||||
_instance.TryDeclare<T>();
|
_instance.TryDeclare<T>();
|
||||||
return _source;
|
|
||||||
}
|
}
|
||||||
public EcsPipeline.Builder Inject<T>(T obj)
|
public void Inject<T>(T obj)
|
||||||
{
|
{
|
||||||
if (obj is EcsWorld objWorld)
|
if (obj is EcsWorld objWorld)
|
||||||
{
|
{
|
||||||
@ -217,9 +214,8 @@ namespace DCFApixels.DragonECS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
_initInjections.Add(new InitInject<T>(obj));
|
_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);
|
Type type = typeof(T);
|
||||||
for (int i = _initInjections.Count - 1; i >= 0; i--)
|
for (int i = _initInjections.Count - 1; i >= 0; i--)
|
||||||
@ -228,11 +224,10 @@ namespace DCFApixels.DragonECS
|
|||||||
if (type.IsAssignableFrom(item.Type))
|
if (type.IsAssignableFrom(item.Type))
|
||||||
{
|
{
|
||||||
obj = (T)item.Raw;
|
obj = (T)item.Raw;
|
||||||
return _source;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Throw.UndefinedException();
|
Throw.UndefinedException();
|
||||||
return default;
|
|
||||||
}
|
}
|
||||||
public Injector Build(EcsPipeline pipeline)
|
public Injector Build(EcsPipeline pipeline)
|
||||||
{
|
{
|
||||||
@ -242,7 +237,6 @@ namespace DCFApixels.DragonECS
|
|||||||
monoWorldSystem.World = _monoWorld;
|
monoWorldSystem.World = _monoWorld;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
var initInjectionCallbacks = pipeline.GetProcess<IOnInitInjectionComplete>();
|
var initInjectionCallbacks = pipeline.GetProcess<IOnInitInjectionComplete>();
|
||||||
foreach (var system in initInjectionCallbacks)
|
foreach (var system in initInjectionCallbacks)
|
||||||
{
|
{
|
||||||
@ -292,7 +286,7 @@ namespace DCFApixels.DragonECS
|
|||||||
}
|
}
|
||||||
public override void InjectTo(Injector instance)
|
public override void InjectTo(Injector instance)
|
||||||
{
|
{
|
||||||
instance.Inject<T>(_injectedData);
|
instance.Inject(_injectedData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user