Wenn eine Entität keinen expliziten 'Typ' hat (z. B. Player) und lediglich eine Sammlung von Komponenten ist, wie identifiziere ich die Entitäten, an denen meine Systeme arbeiten sollen und nicht? Zum Beispiel kollidieren bei einem Pong-Spiel sowohl das Paddel als auch der Ball mit den Fenstergrenzen. Die Kollisionsbehandlungssysteme sind jedoch für jedes System unterschiedlich, daher sollte ein System keine Entitäten des falschen Typs behandeln.
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.
}
}
Sowohl der Spieler als auch der Ball haben dieselben relevanten Komponententypen für die Kollisionsbehandlung, ihre Systemimplementierungen sind jedoch unterschiedlich.
Wenn ich einen Container mit allen Spielentitäten habe, wie identifiziere ich bestimmte Entitätstypen, ohne Entity
eine Mitgliedsvariable zu erben oder einzuschließen, z. B. std::string type
in welchem Fall eine Entität nicht mehr nur eine Sammlung von Komponenten ist?