fix runtime injections

This commit is contained in:
Mikhail 2023-06-18 18:47:07 +08:00
parent fae94c020a
commit 4781dd323f

View File

@ -156,15 +156,20 @@ namespace DCFApixels.DragonECS
private EcsPipeline _pipeline; private EcsPipeline _pipeline;
private List<object> _delayedInjects = new List<object>(); private List<object> _delayedInjects = new List<object>();
private AutoInjectionMap _autoInjectionMap; private AutoInjectionMap _autoInjectionMap;
private bool _preInitInjectCompleted = false;
public void Inject(EcsPipeline obj) => _pipeline = obj; public void Inject(EcsPipeline obj) => _pipeline = obj;
public void PreInject(object obj) public void PreInject(object obj)
{ {
_delayedInjects.Add(obj); if(!_preInitInjectCompleted)
_delayedInjects.Add(obj);
else
_autoInjectionMap.Inject(obj.GetType(), obj);
} }
public void OnPreInitInjectionBefore() { } public void OnPreInitInjectionBefore() { }
public void OnPreInitInjectionAfter() public void OnPreInitInjectionAfter()
{ {
_autoInjectionMap = new AutoInjectionMap(_pipeline); _autoInjectionMap = new AutoInjectionMap(_pipeline);
_preInitInjectCompleted = true;
foreach (var obj in _delayedInjects) foreach (var obj in _delayedInjects)
_autoInjectionMap.Inject(obj.GetType(), obj); _autoInjectionMap.Inject(obj.GetType(), obj);