Если у сущности нет явного «типа» (например, плеера) и это просто набор компонентов, как мне определить сущности, над которыми мои системы должны и не должны работать? Например, в игре в понг весло и мяч сталкиваются с границами окна. Однако системы обработки столкновений для каждого из них будут разными, поэтому система не должна обрабатывать объекты неправильного типа.
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.
}
}
И игрок, и мяч используют одни и те же соответствующие типы компонентов для обработки столкновений, но их системные реализации будут отличаться.
Если у меня есть контейнер со всеми игровыми сущностями, как мне определить конкретные типы сущностей без наследования Entity
или включения переменной-члена, например std::string type
, в таком случае сущность больше не является просто набором компонентов?