#pragma once #include #include #include #include class EntityManager; class Entity; using ComponentsContainer = std::tuple < container::Array, container::Array, container::Array //container::Array >; class EntityMemoryPool { private: friend class EntityManager; friend class Entity; ComponentsContainer m_components; container::Array m_tags; container::Array m_subTags; container::Array m_aliveStates; container::Array m_visibility; container::Array 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]; } };