|
JustAnotherDnDGame 0.1.0
Jeu de rôle tactique au d20, vue de dessus, en C++/Qt
|
Stockage dense des composants d'un type T, indexé par entité (sparse set). More...
#include <ComponentPool.h>
Public Member Functions | |
| void | add (Entity entity, const T &component) |
| Attache un composant à une entité. | |
| void | remove (Entity entity) |
| Retire le composant d'une entité (swap-and-pop). | |
| bool | removeIfPresent (Entity entity) override |
| Retire le composant d'une entité s'il existe (sans précondition). | |
| bool | has (Entity entity) const |
| Indique si une entité possède un composant de ce type. | |
| T & | get (Entity entity) |
| Accède au composant d'une entité (lecture-écriture). | |
| const T & | get (Entity entity) const |
| Accède au composant d'une entité (lecture seule). | |
| std::size_t | size () const |
| bool | empty () const |
| const std::vector< Entity > & | entities () const |
| Entités possédant un composant, dans l'ordre du tableau dense. | |
| const std::vector< T > & | components () const |
| Composants stockés, dans l'ordre du tableau dense. | |
| Public Member Functions inherited from core::IComponentPool | |
| virtual | ~IComponentPool ()=default |
Static Public Attributes | |
| static constexpr std::size_t | INVALID_POSITION = ~std::size_t{0} |
| Position dense réservée signifiant « aucun composant pour cette entité ». | |
Private Member Functions | |
| void | ensureSparseSize (Entity::Index index) |
| Agrandit le tableau creux pour qu'il couvre un index d'entité donné. | |
Private Attributes | |
| std::vector< T > | _components |
| Tableau dense des composants (contigu, cache-friendly). | |
| std::vector< Entity > | _entities |
| Entités propriétaires, parallèle à _components. | |
| std::vector< std::size_t > | _sparse |
| Position dense de chaque entité, indexé par Entity::index (INVALID_POSITION si absente). | |
Stockage dense des composants d'un type T, indexé par entité (sparse set).
Combine deux structures pour concilier itération rapide et accès direct :
La suppression se fait par swap-and-pop : le composant retiré est échangé avec le dernier avant d'être retranché, ce qui maintient la densité sans décaler tout le tableau.
| T | Type de composant stocké. Doit être une donnée pure (EX-ARCH-011). |
|
inline |
Attache un composant à une entité.
| entity | Entité destinataire ; ne doit pas déjà posséder ce composant. |
| component | Valeur du composant à copier dans le tableau dense. |
|
inlinenodiscard |
Composants stockés, dans l'ordre du tableau dense.
|
inlinenodiscard |
|
inlineprivate |
Agrandit le tableau creux pour qu'il couvre un index d'entité donné.
| index | Index d'entité à rendre adressable dans le tableau creux. |
|
inlinenodiscard |
Entités possédant un composant, dans l'ordre du tableau dense.
|
inlinenodiscard |
Accède au composant d'une entité (lecture-écriture).
| entity | Entité porteuse du composant. |
|
inlinenodiscard |
Accède au composant d'une entité (lecture seule).
| entity | Entité porteuse du composant. |
|
inlinenodiscard |
Indique si une entité possède un composant de ce type.
| entity | Entité testée. |
|
inline |
Retire le composant d'une entité (swap-and-pop).
| entity | Entité dont le composant est retiré. |
|
inlineoverridevirtual |
Retire le composant d'une entité s'il existe (sans précondition).
| entity | Entité éventuellement porteuse du composant. |
Implements core::IComponentPool.
|
inlinenodiscard |
|
private |
Tableau dense des composants (contigu, cache-friendly).
|
private |
Entités propriétaires, parallèle à _components.
|
private |
Position dense de chaque entité, indexé par Entity::index (INVALID_POSITION si absente).
|
staticconstexpr |
Position dense réservée signifiant « aucun composant pour cette entité ».