2d-platformer/Engine-Core/include/Entities/Entity.h

58 lines
1.3 KiB
C++

#pragma once
#include <utility.h>
#include <Entities/Components.h>
#include <Entities/EntityMemoryPool.h>
class Entity
{
public:
friend class EntityManager;
friend class EntityMemoryPool;
Entity() = delete;
Entity(index_t index_in)
: m_index(index_in)
{ }
public:
// template<typename T>
// bool hasComponent() const;
template<typename T>
T& getComponent() const
{ return EntityMemoryPool::instance().getComponent<T>(m_index); }
template<typename T>
void addComponent(const T& data)
{
T& component = EntityMemoryPool::instance().getComponent<T>(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;
};