JustAnotherDnDGame 0.1.0
Jeu de rôle tactique au d20, vue de dessus, en C++/Qt
Loading...
Searching...
No Matches
core::View< Components > Class Template Reference

Sélection en lecture-écriture des entités possédant tous les composants demandés. More...

#include <View.h>

Classes

class  Iterator
 Itérateur avant sur les entités retenues par la vue. More...

Public Member Functions

 View (ComponentPool< Components > &... pools)
 Construit une vue joignant les pools des composants demandés.
template<typename Function>
void each (Function &&function) const
 Applique une fonction à chaque entité possédant tous les composants.
Iterator begin () const
Iterator end () const

Private Member Functions

bool matches (Entity entity) const
 Indique si une entité possède tous les composants requis.
template<typename Component>
Component & componentOf (Entity entity) const
 Accède au composant d'un type donné pour une entité retenue.
const std::vector< Entity > & smallestEntities () const
 Sélectionne le tableau dense d'entités de la plus petite pool.

Private Attributes

std::tuple< ComponentPool< Components > *... > _pools
 Pointeurs sur les pools jointes, un par type de Components.

Detailed Description

template<typename... Components>
class core::View< Components >

Sélection en lecture-écriture des entités possédant tous les composants demandés.

Une vue joint plusieurs core::ComponentPool et n'expose que les entités présentes dans toutes les pools (Transform et Velocity, par exemple). Pour chaque entité retenue, elle donne accès au handle et à une référence sur chacun de ses composants.

L'itération est pilotée par la plus petite pool parmi les types demandés : on parcourt son tableau dense et l'on filtre chaque entité sur la présence dans les autres pools, ce qui borne le coût par la plus petite population.

Deux formes d'usage équivalentes :

for (auto [entity, transform, velocity] : view) { ... }
view.each([](Entity entity, Transform& transform, Velocity& velocity) { ... });
Handle générationnel identifiant une entité de l'ECS.
Definition Entity.h:24
Position, échelle et rotation d'une entité, en unités monde (EX-ARCH-020).
Definition Transform.h:22
Vitesse linéaire d'une entité, en unités monde par seconde.
Definition Velocity.h:21
Warning
Contrat d'itération : ne modifier que la valeur des composants pendant le parcours. Ajouter ou retirer un composant, ou détruire une entité, invalide la vue (les pools sous-jacentes peuvent réallouer ou déplacer leurs éléments).
Template Parameters
ComponentsTypes de composants requis, supposés distincts.

Constructor & Destructor Documentation

◆ View()

template<typename... Components>
core::View< Components >::View ( ComponentPool< Components > &... pools)
inlineexplicit

Construit une vue joignant les pools des composants demandés.

Parameters
poolsRéférences sur les pools, une par type de Components.

Member Function Documentation

◆ begin()

template<typename... Components>
Iterator core::View< Components >::begin ( ) const
inlinenodiscard
Returns
Un itérateur sur la première entité retenue par la vue.

◆ componentOf()

template<typename... Components>
template<typename Component>
Component & core::View< Components >::componentOf ( Entity entity) const
inlinenodiscardprivate

Accède au composant d'un type donné pour une entité retenue.

Template Parameters
ComponentType de composant voulu.
Parameters
entityEntité (supposée présente dans la pool correspondante).
Returns
Une référence sur le composant.

◆ each()

template<typename... Components>
template<typename Function>
void core::View< Components >::each ( Function && function) const
inline

Applique une fonction à chaque entité possédant tous les composants.

Parameters
functionAppelable void(Entity, Components&...) invoqué par entité retenue.
Template Parameters
FunctionType de l'appelable.

◆ end()

template<typename... Components>
Iterator core::View< Components >::end ( ) const
inlinenodiscard
Returns
L'itérateur de fin (position au-delà du dernier élément du pilote).

◆ matches()

template<typename... Components>
bool core::View< Components >::matches ( Entity entity) const
inlinenodiscardprivate

Indique si une entité possède tous les composants requis.

Parameters
entityEntité testée.
Returns
true si chaque pool contient l'entité.

◆ smallestEntities()

template<typename... Components>
const std::vector< Entity > & core::View< Components >::smallestEntities ( ) const
inlinenodiscardprivate

Sélectionne le tableau dense d'entités de la plus petite pool.

Returns
Une référence sur le tableau dense pilotant l'itération.

Member Data Documentation

◆ _pools

template<typename... Components>
std::tuple<ComponentPool<Components>*...> core::View< Components >::_pools
private

Pointeurs sur les pools jointes, un par type de Components.


The documentation for this class was generated from the following file:
  • /home/runner/work/JustAnotherDnDGame/JustAnotherDnDGame/Source/Core/Ecs/View.h