Se un'entità non ha un "tipo" esplicito (ad esempio un giocatore) ed è semplicemente una raccolta di componenti, come posso identificare le entità su cui i miei sistemi dovrebbero e non dovrebbero lavorare? Ad esempio, in una partita a Pong la paletta e la palla si scontrano entrambe con i confini della finestra. Tuttavia, i sistemi di gestione delle collisioni per ciascuno saranno diversi, pertanto un sistema non dovrebbe gestire entità di tipo errato.
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.
}
}
Sia il giocatore che la palla condividono gli stessi tipi di componenti rilevanti per la gestione delle collisioni, ma le implementazioni del sistema saranno diverse.
Se ho un contenitore di tutte le entità di gioco, come posso identificare specifici tipi di entità senza ereditare Entity
o includere una variabile membro come std::string type
, nel qual caso un'entità non è più semplicemente una raccolta di componenti?