Se uma Entidade não possui um 'tipo' explícito (por exemplo, player) e é simplesmente uma coleção de componentes, como identifico as entidades nas quais meus sistemas devem ou não estar trabalhando? Por exemplo, em um jogo de Pong, a raquete e a bola colidem com os limites da janela. No entanto, os sistemas de tratamento de colisões para cada um serão diferentes, portanto, um sistema não deve manipular entidades do tipo errado.
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 o jogador quanto a bola compartilham os mesmos tipos de componentes relevantes para o manuseio de colisões, mas as implementações do sistema serão diferentes.
Se eu tenho um contêiner de todas as entidades do jogo, como identifico tipos específicos de entidade sem herdar Entity
ou incluir uma variável membro, como std::string type
, nesse caso, uma entidade não é mais apenas uma coleção de componentes?