18#include <unordered_map>
22#include <unordered_map>
80 template <
typename Component>
88 template <
class ... Components>
96 template <IsTuple Tuple>
105 template <
class Component>
114 template <
class Component>
125 template <
typename...
Component,
typename = std::enable_if_t<(
sizeof...(Component) != 0)>>
137 template <
typename Component,
typename ... Params>
146 template <
typename...
Component,
typename = std::enable_if<(
sizeof...(Component) != 0)>>
156 template<SystemImplementation System>
165 template<SystemImplementation System>
206 size_t _entitiesCount = 0;
207 std::vector<Entity> killedEntities;
209 std::unordered_map<std::type_index, std::any> componentsArrays;
210 std::unordered_map<std::type_index, std::any> systemsArrays;
212 std::vector<std::function<void(
Registry &,
Entity const &)>> componentsRemoves;
214 std::unordered_map<std::type_index, std::shared_ptr<ISystem>> systems;
Component is a template define in Registry. (not a class)
Abstract base class representing a system in the ECS architecture.
Entity class from ECS.
Definition Entity.hpp:26
define the Registry class
Definition Registry.hpp:44
void addComponent(Entity const &to, Component &&...c)
Definition Registry_impl.hpp:50
Entity createEntity()
handling entities (define in Registry.cpp)
Definition Registry.cpp:14
void emplaceSystem(Params &&... params)
add a system to the registry
void callSystem()
call a system
Definition Registry_impl.hpp:93
void removeSystem()
remove a system from the registry
Definition Registry_impl.hpp:88
void registerComponents()
register a list of components
Definition Registry_impl.hpp:28
SparseArray< Component > & registerComponent()
handling components (define in Registry_impl.hpp)
Definition Registry_impl.hpp:21
void killEntity(Entity const &e)
Kill the given entity.
Definition Registry.cpp:29
SparseArray< Component > & getComponents()
get components of a given type
Definition Registry_impl.hpp:40
Entity entityFromIndex(std::size_t idx)
Create a Entity object from an index.
Definition Registry.cpp:25
void addSystem(System &s)
handling systems
Definition Registry_impl.hpp:68
void registerComponentsByExtraction()
register every components by extraction from a tuple
Definition Registry_impl.hpp:33
void emplaceComponent(Entity const &to, Params &&... p)
emplace a component to the given entity
Definition Registry_impl.hpp:55
void removeComponent(Entity const &from)
remove a component from the given entity
Definition Registry_impl.hpp:61
SparseArray class.
Definition SparseArray.hpp:45
Concept that ensures a type derives from System.
Definition System.hpp:55