diff --git a/src/EcsWorld.cs b/src/EcsWorld.cs index 0f89937..74b6abb 100644 --- a/src/EcsWorld.cs +++ b/src/EcsWorld.cs @@ -31,18 +31,18 @@ namespace DCFApixels.DragonECS private int _delEntBufferCount; internal IEcsPoolImplementation[] _pools; - private EcsNullPool _nullPool; + private EcsNullPool _nullPool = EcsNullPool.instance; private EcsSubject[] _subjects; private EcsQueryExecutor[] _executors; - private List> _groups; + private List> _groups = new List>(); private Stack _groupsPool = new Stack(64); - private List _listeners; - private List _entityListeners; + private List _listeners = new List(); + private List _entityListeners = new List(); - private object[] _components; + private object[] _components = new object[2]; #region Properties public abstract Type Archetype { get; } @@ -60,9 +60,6 @@ namespace DCFApixels.DragonECS { _entitesCapacity = 512; - _listeners = new List(); - _entityListeners = new List(); - if (isIndexable) { uniqueID = (short)_worldIdDispenser.GetFree(); @@ -74,7 +71,6 @@ namespace DCFApixels.DragonECS _worldTypeID = WorldMetaStorage.GetWorldID(Archetype); _entityDispenser = new IntDispenser(0); - _nullPool = EcsNullPool.instance; _pools = new IEcsPoolImplementation[512]; ArrayUtility.Fill(_pools, _nullPool); @@ -85,13 +81,10 @@ namespace DCFApixels.DragonECS _delEntBufferCount = 0; _delEntBuffer = new int[_entitesCapacity >> DEL_ENT_BUFFER_SIZE_OFFSET]; - _groups = new List>(); _allEntites = GetFreeGroup(); _subjects = new EcsSubject[128]; _executors = new EcsQueryExecutor[128]; - - _components = new object[2]; } public void Destroy() { @@ -161,7 +154,7 @@ namespace DCFApixels.DragonECS #endregion #region WorldComponents - public void Set(T component) where T : class + public void SetComponent(T component) where T : class { int index = WorldMetaStorage.GetWorldComponentID(_worldTypeID); if (index >= _components.Length) @@ -173,7 +166,7 @@ namespace DCFApixels.DragonECS intr.Init(this); } } - public T Get() where T : class, new() + public T GetComponent() where T : class, new() { int index = WorldMetaStorage.GetWorldComponentID(_worldTypeID); if (index >= _components.Length) @@ -188,6 +181,13 @@ namespace DCFApixels.DragonECS } return (T)result; } + public bool HasComponent() + { + int index = WorldMetaStorage.GetWorldComponentID(_worldTypeID); + if (index >= _components.Length) + return false; + return _components[index] == null; + } #endregion #region Where Query