Якщо суб'єкт господарювання не має явного "типу" (наприклад, програвач) і є просто колекцією компонентів, то як я можу визначити об'єкти, над якими мої системи повинні і не повинні працювати? Наприклад, в грі в понг весло і м'яч стикаються з межами вікна. Однак системи керування зіткненнями для кожної з них будуть різними, тому система не повинна обробляти об'єкти неправильного типу.
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
, у такому випадку суб'єкт господарювання вже не є просто колекцією компонентів?