10#include "Registry.hpp"
12namespace uranus::ecs {
13 template<
typename... Components>
16 using Tuple = std::tuple<size_t, Components &...>;
25 skipInvalidEntities<Components...>();
31 skipInvalidEntities<Components...>();
35 Tuple operator->() {
return Tuple(idx, (_registry.
getComponent<Components>(idx).get()->value())...); }
37 Tuple operator*() {
return Tuple(idx, (_registry.
getComponent<Components>(idx).get()->value())...); }
39 bool operator==(
const Iterator &other)
const {
return idx == other.idx; }
41 bool operator!=(
const Iterator &other)
const {
return !(other == *
this); }
48 template<
typename Component,
typename... Others>
49 void skipInvalidEntities()
52 bool hasAllComponents =
true;
53 auto &component = _registry.
getComponent<Component>(idx);
54 if (component ==
nullptr || !component->has_value()) {
55 hasAllComponents =
false;
57 if (hasAllComponents) {
58 if constexpr (
sizeof...(Others) > 0) {
59 skipInvalidEntities<Others...>();
62 if (hasAllComponents) {
75 Iterator it(_registry);
Registry class, used to store and manage entities and their components.
Definition: Registry.hpp:24
size_t getEntityCounter() const
Get the counter used to generate new entity ids.
Definition: Registry.hpp:329
SparseArray< Component >::ReferenceType getComponent(const Entity &e)
Get a component from an entity.
Definition: Registry.hpp:210