60 lines
1.3 KiB
C++
60 lines
1.3 KiB
C++
#pragma once
|
|
|
|
#include <utility.h>
|
|
|
|
#include <Entities/Entity.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;
|
|
}; |