#pragma once #include #include #include #include class Entity { public: friend class EntityManager; friend class EntityMemoryPool; Entity() = delete; Entity(index_t index_in) : m_index(index_in) { } public: // template // bool hasComponent() const; template T& getComponent() const { return EntityMemoryPool::instance().getComponent(m_index); } template void addComponent(const T& data) { T& component = EntityMemoryPool::instance().getComponent(m_index); component = data; } size_t id() const { return EntityMemoryPool::instance().getId(m_index); } tag_t tag() const { return EntityMemoryPool::instance().getTag(m_index); } bool alive() const { return EntityMemoryPool::instance().getAlive(m_index); } bool visible() const { return EntityMemoryPool::instance().getVisiblity(m_index); } void makeVisible() { EntityMemoryPool::instance().getVisiblity(m_index).setTrue(); } void makeInvisible() { EntityMemoryPool::instance().getVisiblity(m_index).setFalse(); } void flipVisibility() { EntityMemoryPool::instance().getVisiblity(m_index).flip(); } void destroy() { EntityMemoryPool::instance().getAlive(m_index).setFalse(); } private: index_t m_index; };