Si une entité n'a pas de «type» explicite (par exemple, un joueur) et est simplement une collection de composants, comment puis-je identifier les entités sur lesquelles mes systèmes devraient et ne devraient pas travailler? Par exemple, dans un jeu de Pong, la pagaie et la balle entrent en collision avec les limites de la fenêtre. Cependant, les systèmes de gestion des collisions pour chacun seront différents, donc un système ne devrait pas gérer des entités de mauvais type.
void PlayerCollisionSystem::update(std::vector<Entity *> entities) {
typedef std::vector<Entity *>::iterator EIter;
for (EIter i = entities.begin(); i != entities.end(); ++i) {
Entity *player = *i; // How do I verify that the entity is a player?
// Get relevant components.
PositionComponent *position = player->getComponent<PositionComponent>();
VelocityComponent *velocity = player->getComponent<VelocityComponent>();
SpriteComponent *sprite = player->getComponent<SpriteComponent>();
// Detect and handle player collisions using the components.
}
}
Le joueur et le ballon partagent les mêmes types de composants pertinents pour la gestion des collisions, mais leurs implémentations de système seront différentes.
Si j'ai un conteneur de toutes les entités de jeu, comment puis-je identifier des types spécifiques d'entité sans hériter Entity
ou inclure une variable membre telle que std::string type
, auquel cas une entité n'est plus simplement une collection de composants?