Jeśli jednostka nie ma wyraźnego „typu” (np. Odtwarzacz) i jest po prostu zbiorem komponentów, w jaki sposób mogę zidentyfikować jednostki, nad którymi moje systemy powinny i nie powinny pracować? Na przykład w grze Pong wiosło i piłka zderzają się z granicami okna. Jednak systemy obsługi kolizji dla każdego będą inne, dlatego system nie powinien obsługiwać jednostek niewłaściwego typu.
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.
}
}
Zarówno zawodnik, jak i piłka mają te same istotne typy elementów do obsługi kolizji, ale ich implementacje systemu będą się różnić.
Jeśli mam kontener wszystkich encji w grze, w jaki sposób mogę zidentyfikować określone typy encji bez dziedziczenia Entity
lub uwzględnienia zmiennej członka, takiej jak std::string type
, w którym to przypadku encja nie jest już tylko zbiorem komponentów?