12#include <unordered_map>
63 T &comp = pool.add(e, std::forward<Args>(args)...);
77 template <
typename T> std::unordered_map<Entity, T> &
getAll() {
return getPool<T>().data; }
107 std::unordered_map<Entity, T>
data;
109 template <
typename... Args> T &
add(
Entity e, Args &&...args)
111 return data.emplace(e, T{std::forward<Args>(args)...}).first->second;
116 auto it =
data.find(e);
117 if (it !=
data.end())
131 const std::type_index ti(
typeid(T));
140 std::unordered_map<std::type_index, std::unique_ptr<IPool>>
m_components;
This file contains the entity definitions.
EntityBuilder(Registry ®, Entity e)
EntityBuilder & with(Args &&...args)
virtual void remove(Entity e)=0
std::unordered_map< Entity, T > data
void remove(Entity e) override
T & add(Entity e, Args &&...args)
Class for managing entities and their components.
EntityBuilder createEntity()
Registry & operator=(Registry &&)=delete
Registry & operator=(const Registry &)=delete
std::vector< Entity > m_entities
Registry(Registry &&)=delete
std::unordered_map< std::type_index, std::unique_ptr< IPool > > m_components
bool hasComponent(Entity e)
std::vector< std::function< void(Entity, const std::type_info &)> > m_onComponentAddedCallbacks
void onComponentAdded(std::function< void(Entity, const std::type_info &)> cb)
T & addComponent(Entity e, Args &&...args)
Registry(const Registry &)=delete
std::unordered_map< Entity, T > & getAll()
T * getComponent(Entity e)
void removeComponent(Entity e)
constexpr Entity INVALID_ENTITY