This repository has been archived by the owner on Nov 15, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
CheckCollision
Antek Bizon edited this page Mar 5, 2022
·
1 revision
Funkcja odpowiada za sprawdzenie czy wystąpiła kolizja między obiektami odpowiednich typów. Jest to zrobione za pomocą kilku pętli sprawdzających mapy konkretnych typów Spritów i wywołujących funkcję IsCollision dla par nich. W momencie otrzymania True (czyli wystąpienia kolizji) uruchamiane są odpowiednie funkcje dla tych obiektów.
void Game::CheckCollision() {
// Collision Player<->Block
for (auto& block : GetSprites(Sprite::Type::BLOCK)) {
if (IsCollision(player, block)) {
player->Collision(block);
}
}
// Collision Player<->Enemy
for (auto& enemy : GetSprites(Sprite::Type::ENEMY)) {
if (IsCollision(player, enemy)) {
if (!player->frameCounter)
player->Collision(enemy);
}
}
// Collision Player<->Ladder
for (auto& ladder : GetSprites(Sprite::Type::LADDER)) {
if (IsCollision(player, ladder)) {
player->Collision(ladder);
}
}
// Collision Player<->Powerup
for (auto& powerup : GetSprites(Sprite::Type::POWERUP)) {
if (IsCollision(player, powerup)) {
player->Collision(powerup);
powerup->Collision(player);
}
}
// Collision Player<->Ice
for (auto& ice : GetSprites(Sprite::Type::ICE)) {
if (IsCollision(player, ice)) {
player->Collision(ice);
}
}
// Collision Player<->Crab
for (auto& crab : GetSprites(Sprite::Type::CRAB)) {
if (IsCollision(player, crab)) {
if (!player->frameCounter)
player->Collision(crab);
}
}
// Collision Weapon<->Enemy
for (auto& weapon : GetSprites(Sprite::Type::WEAPON)) {
for (auto& enemy : GetSprites(Sprite::Type::ENEMY)) {
if (IsCollision(weapon, enemy)) {
std::cout << "WEAPON collided with ENEMY:" << std::endl;
weapon->Collision(enemy);
enemy->Collision(weapon);
auto& v = spriteMap[Sprite::Type::ENEMY];
size_t numEnemies = 0;
for_each(v.begin(), v.end(), [&](Sprite* sprite) { if (sprite->type == Sprite::Type::ENEMY && sprite->state == Sprite::State::ACTIVE) numEnemies += 1; });
if (numEnemies <= 0) {
ChangeState(State::LEVEL_FINISHED);
}
}
}
}
// Collision Weapon<->Block
for (auto& weapon : GetSprites(Sprite::Type::WEAPON)) {
for (auto& block : GetSprites(Sprite::Type::BLOCK)) {
if (IsCollision(weapon, block)) {
block->Collision(weapon);
weapon->Collision(block);
break;
}
}
}
// Collision Weapon<->Crab
for (auto& weapon : GetSprites(Sprite::Type::WEAPON)) {
for (auto& crab : GetSprites(Sprite::Type::CRAB)) {
if (IsCollision(weapon, crab)) {
crab->Collision(weapon);
weapon->Collision(crab);
break;
}
}
}
// Collision Enemy<->Block
for (auto& enemy : GetSprites(Sprite::Type::ENEMY)) {
for (auto& block : GetSprites(Sprite::Type::BLOCK)) {
if (IsCollision(enemy, block)) {
enemy->Collision(block);
}
}
}
// Collision Powerup<->Block
for (auto& powerup : GetSprites(Sprite::Type::POWERUP)) {
for (auto& block : GetSprites(Sprite::Type::BLOCK)) {
if (IsCollision(powerup, block)) {
powerup->Collision(block);
}
}
}
// Collision Crab<->Block
for (auto& crab : GetSprites(Sprite::Type::CRAB)) {
for (auto& block : GetSprites(Sprite::Type::BLOCK)) {
if (IsCollision(crab, block)) {
crab->Collision(block);
}
}
}
}