21#include <unordered_map>
25#include <unordered_map>
83 template <
typename Component>
91 template <
class ... Components>
99 template <IsTuple Tuple>
108 template <
class Component>
117 template <
class Component>
128 template <
typename...
Component,
typename = std::enable_if_t<(
sizeof...(Component) != 0)>>
140 template <
typename Component,
typename ... Params>
149 template <
typename...
Component,
typename = std::enable_if<(
sizeof...(Component) != 0)>>
159 template<SystemImplementation System>
168 template<SystemImplementation System>
209 size_t _entitiesCount = 0;
210 std::vector<Entity> killedEntities;
212 std::unordered_map<std::type_index, std::any> componentsArrays;
213 std::unordered_map<std::type_index, std::any> systemsArrays;
215 std::vector<std::function<void(
Registry &,
Entity const &)>> componentsRemoves;
217 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:29
define the Registry class
Definition Registry.hpp:47
void addComponent(Entity const &to, Component &&...c)
Definition Registry_impl.hpp:53
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:96
void removeSystem()
remove a system from the registry
Definition Registry_impl.hpp:91
void registerComponents()
register a list of components
Definition Registry_impl.hpp:31
SparseArray< Component > & registerComponent()
handling components (define in Registry_impl.hpp)
Definition Registry_impl.hpp:24
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:43
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:71
void registerComponentsByExtraction()
register every components by extraction from a tuple
Definition Registry_impl.hpp:36
void emplaceComponent(Entity const &to, Params &&... p)
emplace a component to the given entity
Definition Registry_impl.hpp:58
void removeComponent(Entity const &from)
remove a component from the given entity
Definition Registry_impl.hpp:64
SparseArray class.
Definition SparseArray.hpp:48
Concept that ensures a type derives from System.
Definition System.hpp:58