From e422e83d511383e9b6a740a24a58db4e0d67d2a0 Mon Sep 17 00:00:00 2001 From: Mikhail <99481254+DCFApixels@users.noreply.github.com> Date: Wed, 29 Mar 2023 15:09:00 +0800 Subject: [PATCH] add Source property for EcsRunner --- src/EcsRunner.cs | 23 +++++++++++++---------- src/EcsSystems.cs | 2 +- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/EcsRunner.cs b/src/EcsRunner.cs index daef3b5..46c8719 100644 --- a/src/EcsRunner.cs +++ b/src/EcsRunner.cs @@ -191,35 +191,38 @@ namespace DCFApixels.DragonECS #endregion #region Instantiate - private static TInterface Instantiate(TInterface[] targets, bool isHasFilter, object filter) + private static TInterface Instantiate(EcsSystems source, TInterface[] targets, bool isHasFilter, object filter) { if (_subclass == null) EcsRunnerActivator.InitFor(); var instance = (EcsRunner)Activator.CreateInstance(_subclass); - return (TInterface)(IEcsSystem)instance.Set(targets, isHasFilter, filter); + return (TInterface)(IEcsSystem)instance.Set(source, targets, isHasFilter, filter); } - public static TInterface Instantiate(IEnumerable targets) + public static TInterface Instantiate(EcsSystems source) { - return Instantiate(FilterSystems(targets), false, null); + return Instantiate(source, FilterSystems(source.AllSystems), false, null); } - public static TInterface Instantiate(IEnumerable targets, object filter) + public static TInterface Instantiate(EcsSystems source, object filter) { - return Instantiate(FilterSystems(targets, filter), true, filter); + return Instantiate(source, FilterSystems(source.AllSystems, filter), true, filter); } #endregion + private EcsSystems _source; protected TInterface[] targets; private ReadOnlyCollection _targetsSealed; private object _filter; private bool _isHasFilter; + public EcsSystems Source => _source; public IList Targets => _targetsSealed; public object Filter => _filter; public bool IsHasFilter => _isHasFilter; - private EcsRunner Set(TInterface[] targets, bool isHasFilter, object filter) + private EcsRunner Set(EcsSystems source, TInterface[] targets, bool isHasFilter, object filter) { + _source = source; this.targets = targets; _targetsSealed = new ReadOnlyCollection(targets); _filter = filter; @@ -230,12 +233,12 @@ namespace DCFApixels.DragonECS protected virtual void OnSetup() { } - internal void Rebuild(IEnumerable targets) + internal void Rebuild() { if(_isHasFilter) - Set(FilterSystems(targets), _isHasFilter, _filter); + Set(_source, FilterSystems(_source.AllSystems), _isHasFilter, _filter); else - Set(FilterSystems(targets, _filter), _isHasFilter, _filter); + Set(_source, FilterSystems(_source.AllSystems, _filter), _isHasFilter, _filter); } } } diff --git a/src/EcsSystems.cs b/src/EcsSystems.cs index 93fc52c..73bb6af 100644 --- a/src/EcsSystems.cs +++ b/src/EcsSystems.cs @@ -43,7 +43,7 @@ namespace DCFApixels.DragonECS Type type = typeof(T); if (_runners.TryGetValue(type, out IEcsRunner result)) return (T)result; - result = (IEcsRunner)EcsRunner.Instantiate(_allSystems); + result = (IEcsRunner)EcsRunner.Instantiate(this); _runners.Add(type, result); return (T)result; }