diff --git a/src/EcsWorld.cs b/src/EcsWorld.cs index eb53348..60aa869 100644 --- a/src/EcsWorld.cs +++ b/src/EcsWorld.cs @@ -88,7 +88,7 @@ namespace DCFApixels.DragonECS _subjects = new EcsSubject[128]; _executors = new EcsQueryExecutor[128]; - _components = new object[0]; + _components = new object[2]; } public void Destroy() { @@ -103,19 +103,6 @@ namespace DCFApixels.DragonECS } #endregion - #region WorldComponent - public T Get() where T : class, new() - { - var result = _components[WorldMetaStorage.GetWorldComponentId(_worldTypeID)]; - if(result == null) - { - result = new T(); - _components[WorldMetaStorage.GetWorldComponentId(_worldTypeID)] = result; - } - return (T)result; - } - #endregion - #region ComponentInfo public int GetComponentID() => WorldMetaStorage.GetComponentId(_worldTypeID); public Type GetComponentType(int componentID) => WorldMetaStorage.GetComponentType(_worldTypeID, componentID); @@ -155,16 +142,30 @@ namespace DCFApixels.DragonECS } public TExecutor GetExecutor() where TExecutor : EcsQueryExecutor, new() { - int id = WorldMetaStorage.GetExecutorId(_worldTypeID); - if (id >= _executors.Length) + int index = WorldMetaStorage.GetExecutorId(_worldTypeID); + if (index >= _executors.Length) Array.Resize(ref _executors, _executors.Length << 1); - if (_executors[id] == null) + if (_executors[index] == null) { var executor = new TExecutor(); executor.Initialize(this); - _executors[id] = executor; + _executors[index] = executor; } - return (TExecutor)_executors[id]; + return (TExecutor)_executors[index]; + } + public T Get() where T : class, new() + { + int index = WorldMetaStorage.GetWorldComponentId(_worldTypeID); + if (index >= _components.Length) + Array.Resize(ref _executors, _executors.Length << 1); + + var result = _components[index]; + if (result == null) + { + result = new T(); + _components[index] = result; + } + return (T)result; } #endregion