Jika Entitas tidak memiliki 'tipe' eksplisit (misalnya pemain) dan hanya kumpulan komponen, bagaimana cara mengidentifikasi entitas yang harus dan tidak seharusnya dikerjakan oleh sistem saya? Misalnya, dalam permainan Pong, dayung dan bola keduanya bertabrakan dengan batas jendela. Namun, sistem penanganan tabrakan untuk masing-masing akan berbeda, oleh karena itu sistem seharusnya tidak menangani entitas dengan tipe yang salah.
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.
}
}
Baik pemain dan bola berbagi jenis komponen yang relevan untuk penanganan tabrakan namun implementasi sistem mereka akan berbeda.
Jika saya memiliki wadah semua entitas game, bagaimana cara mengidentifikasi tipe entitas tertentu tanpa mewarisi Entity
atau menyertakan variabel anggota seperti std::string type
, dalam hal mana entitas tidak lagi sekadar kumpulan komponen?