diff --git a/src/EcsPipeline.cs b/src/EcsPipeline.cs index 9a3d5cb..2d30c06 100644 --- a/src/EcsPipeline.cs +++ b/src/EcsPipeline.cs @@ -197,16 +197,16 @@ namespace DCFApixels.DragonECS private readonly Dictionary> _systems; private readonly string _basicLayer; public readonly LayerList Layers; - private readonly IConfigContainerWriter _configs; + private readonly Configurator _configurator; private readonly Injector.Builder _injector; #if (DEBUG && !DISABLE_DEBUG) || ENABLE_DRAGONECS_ASSERT_CHEKS private EcsProfilerMarker _buildBarker = new EcsProfilerMarker("EcsPipeline.Build"); #endif private List _initDeclaredRunners = new List(4); - public IConfigContainerWriter Configs + public Configurator Configs { - get { return _configs; } + get { return _configurator; } } public Injector.Builder Injector { @@ -217,8 +217,8 @@ namespace DCFApixels.DragonECS #if (DEBUG && !DISABLE_DEBUG) || ENABLE_DRAGONECS_ASSERT_CHEKS _buildBarker.Begin(); #endif - if (config == null) { config = ConfigContainer.Empty; } - _configs = config; + if (config == null) { config = new ConfigContainer(); } + _configurator = new Configurator(config, this); _injector = new Injector.Builder(this); _injector.AddNode(); @@ -293,7 +293,7 @@ namespace DCFApixels.DragonECS if (_systems.TryGetValue(item, out var list)) result.AddRange(list); } - EcsPipeline pipeline = new EcsPipeline(_configs.GetContainer(), _injector, result.ToArray()); + EcsPipeline pipeline = new EcsPipeline(_configurator.Instance.GetContainer(), _injector, result.ToArray()); foreach (var item in _initDeclaredRunners) { item.Declare(pipeline); @@ -315,6 +315,25 @@ namespace DCFApixels.DragonECS pipeline.GetRunnerInstance(); } } + public class Configurator + { + private readonly IConfigContainerWriter _configs; + private readonly Builder _builder; + public Configurator(IConfigContainerWriter configs, Builder builder) + { + _configs = configs; + _builder = builder; + } + public IConfigContainerWriter Instance + { + get { return _configs; } + } + public Builder Set(T value) + { + _configs.Set(value); + return _builder; + } + } public class LayerList : IEnumerable { private const string ADD_LAYER = nameof(ADD_LAYER); // автоматический слой нужный только для метода Add