#pragma once #include #include #include #include class EntityManager; class Entity; using ComponentsContainer = std::tuple < container::HeapArray, container::HeapArray, container::HeapArray >; class EntityMemoryPool { private: friend class EntityManager; friend class Entity; ComponentsContainer m_components; container::HeapArray m_tags; container::HeapArray m_subTags; container::HeapArray m_aliveStates; container::HeapArray m_visibility; container::HeapArray m_ids; private: EntityMemoryPool(); EntityMemoryPool(const EntityMemoryPool&) = delete; static EntityMemoryPool& instance() { static EntityMemoryPool pool{}; return pool; } template T& getComponent(index_t index) { return std::get>(m_components)[index]; } tag_t getTag(index_t index) const { return m_tags[index]; } auto getAlive(index_t index) { return m_aliveStates[index]; } size_t getId(index_t index) const { return m_ids[index]; } auto getVisiblity(index_t index) { return m_visibility[index]; } };