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

Point d'entrée unique de la simulation : possède les entités, les composants et les systèmes. More...

#include <World.h>

Public Member Functions

Entity createEntity ()
 Crée une nouvelle entité vivante.
void destroyEntity (Entity entity)
 Détruit une entité et retire ses composants de toutes les pools.
bool isAlive (Entity entity) const
 Indique si une entité est vivante.
template<typename T>
void addComponent (Entity entity, const T &component)
 Attache un composant à une entité.
template<typename T>
bool hasComponent (Entity entity) const
 Indique si une entité possède un composant d'un type donné.
template<typename T>
T & getComponent (Entity entity)
 Accède au composant d'une entité (lecture-écriture).
template<typename T>
void removeComponent (Entity entity)
 Retire le composant d'un type donné d'une entité.
template<typename... Components>
View< Components... > view ()
 Construit une vue sur les entités possédant tous les composants demandés.
void addSystem (std::unique_ptr< ISystem > system)
 Enregistre un système ; l'ordre d'enregistrement fixe l'ordre d'exécution.
void update (float fixedDelta)
 Exécute tous les systèmes enregistrés, dans l'ordre, pour un pas fixe.
std::size_t systemCount () const

Private Member Functions

template<typename T>
ComponentPool< T > & poolFor ()
 Récupère la pool du type T, en la créant à la première demande.
template<typename T>
const ComponentPool< T > * findPool () const
 Récupère la pool du type T sans la créer.

Private Attributes

EntityManager _entities
 Cycle de vie des entités.
std::unordered_map< std::type_index, std::unique_ptr< IComponentPool > > _pools
 Pools de composants, une par type (clé = type du composant).
std::vector< std::unique_ptr< ISystem > > _systems
 Systèmes enregistrés, exécutés dans l'ordre d'insertion.

Detailed Description

Point d'entrée unique de la simulation : possède les entités, les composants et les systèmes.

Le World délègue le cycle de vie des entités à un core::EntityManager, détient une core::ComponentPool par type de composant (créée à la demande) et exécute les systèmes enregistrés dans l'ordre, à chaque pas de temps fixe (EX-ARCH-030). Il possède toutes ses ressources (RAII) : aucun état global, aucune connaissance du rendu (dépendance HMI → Core respectée).

Member Function Documentation

◆ addComponent()

template<typename T>
void core::World::addComponent ( Entity entity,
const T & component )
inline

Attache un composant à une entité.

Template Parameters
TType de composant (donnée pure).
Parameters
entityEntité destinataire (supposée vivante, sans ce composant).
componentValeur du composant.

◆ addSystem()

void core::World::addSystem ( std::unique_ptr< ISystem > system)

Enregistre un système ; l'ordre d'enregistrement fixe l'ordre d'exécution.

Parameters
systemSystème à ajouter (le World en prend possession).

◆ createEntity()

Entity core::World::createEntity ( )
nodiscard

Crée une nouvelle entité vivante.

Returns
Un handle valide.

◆ destroyEntity()

void core::World::destroyEntity ( Entity entity)

Détruit une entité et retire ses composants de toutes les pools.

Parameters
entityEntité à détruire ; sans effet si elle n'est pas vivante.

◆ findPool()

template<typename T>
const ComponentPool< T > * core::World::findPool ( ) const
inlineprivate

Récupère la pool du type T sans la créer.

Template Parameters
TType de composant.
Returns
Un pointeur sur la pool, ou nullptr si aucune pool de ce type n'existe.

◆ getComponent()

template<typename T>
T & core::World::getComponent ( Entity entity)
inlinenodiscard

Accède au composant d'une entité (lecture-écriture).

Template Parameters
TType de composant.
Parameters
entityEntité porteuse du composant.
Returns
Une référence sur le composant.
Precondition
L'entité possède ce composant (hasComponent<T>() == true).

◆ hasComponent()

template<typename T>
bool core::World::hasComponent ( Entity entity) const
inlinenodiscard

Indique si une entité possède un composant d'un type donné.

Template Parameters
TType de composant.
Parameters
entityEntité testée.
Returns
true si le composant est présent.

◆ isAlive()

bool core::World::isAlive ( Entity entity) const
nodiscard

Indique si une entité est vivante.

Parameters
entityHandle à tester.
Returns
true si l'entité est vivante.

◆ poolFor()

template<typename T>
ComponentPool< T > & core::World::poolFor ( )
inlineprivate

Récupère la pool du type T, en la créant à la première demande.

Template Parameters
TType de composant.
Returns
Une référence sur la pool typée.

◆ removeComponent()

template<typename T>
void core::World::removeComponent ( Entity entity)
inline

Retire le composant d'un type donné d'une entité.

Template Parameters
TType de composant.
Parameters
entityEntité dont le composant est retiré.
Precondition
L'entité possède ce composant (hasComponent<T>() == true).

◆ systemCount()

std::size_t core::World::systemCount ( ) const
nodiscard
Returns
Nombre de systèmes enregistrés.

◆ update()

void core::World::update ( float fixedDelta)

Exécute tous les systèmes enregistrés, dans l'ordre, pour un pas fixe.

Parameters
fixedDeltaDurée du pas de simulation, en secondes.

◆ view()

template<typename... Components>
View< Components... > core::World::view ( )
inlinenodiscard

Construit une vue sur les entités possédant tous les composants demandés.

Template Parameters
ComponentsTypes de composants requis (distincts).
Returns
Une core::View joignant les pools correspondantes.

Member Data Documentation

◆ _entities

EntityManager core::World::_entities
private

Cycle de vie des entités.

◆ _pools

std::unordered_map<std::type_index, std::unique_ptr<IComponentPool> > core::World::_pools
private

Pools de composants, une par type (clé = type du composant).

◆ _systems

std::vector<std::unique_ptr<ISystem> > core::World::_systems
private

Systèmes enregistrés, exécutés dans l'ordre d'insertion.


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