Si una Entidad no tiene un 'tipo' explícito (por ejemplo, jugador) y es simplemente una colección de componentes, ¿cómo identifico las entidades en las que mis sistemas deberían y no deberían estar trabajando? Por ejemplo, en un juego de Pong, la paleta y la pelota chocan con los límites de la ventana. Sin embargo, los sistemas de manejo de colisiones para cada uno serán diferentes, por lo tanto, un sistema no debe manejar entidades del tipo incorrecto.
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.
}
}
Tanto el jugador como la pelota comparten los mismos tipos de componentes relevantes para el manejo de colisiones, pero sus implementaciones del sistema serán diferentes.
Si tengo un contenedor de todas las entidades del juego, ¿cómo identifico tipos específicos de entidad sin heredar Entity
o incluir una variable miembro como std::string type
, en cuyo caso, una entidad ya no es simplemente una colección de componentes?