void PlayerBullet::checkBulletsObjectsCollision() { if (m_bDying) { return; } SDL_Rect rect1; rect1.x = m_position.getX(); rect1.y = m_position.getY(); rect1.w = m_width; rect1.h = m_height; for (int j = 0; j<pLevel->getShooterObjects()->size(); ++j) { ShooterObject* pObject = (*pLevel->getShooterObjects())[j]; if (pObject->type() == std::string("Player") || pObject->dying() || pObject->appearing()) { continue; } SDL_Rect rect2; rect2.x = pObject->getPosition().getX(); rect2.y = pObject->getPosition().getY(); rect2.w = pObject->getWidth(); rect2.h = pObject->getHeight(); // check collision with enemy bullet if (!pObject->getBullets()->empty()) { for (int k = 0; k<pObject->getBullets()->size(); ++k) { Bullet* pBullet = (*pObject->getBullets())[k]; // bug here if (pBullet->dying()) { continue; } SDL_Rect rectBullet; rectBullet.x = pBullet->getPosition().getX(); rectBullet.y = pBullet->getPosition().getY(); rectBullet.w = pBullet->getWidth(); rectBullet.h = pBullet->getHeight(); if (RectRect(&rect1, &rectBullet)) { collision(); pBullet->collision(); break; } } } // check collision with object if (!m_bDying) { if (RectRect(&rect1, &rect2)) { collision(); pObject->collision(); break; } } } }
void CollisionManager::checkEnemyPlayerBulletCollision( const std::vector<GameObject *> &objects) { for(unsigned int i = 0; i < objects.size(); i++) { auto pObject = objects[i]; for(unsigned int j = 0; j < TheBulletHandler::Instance()->getPlayerBullets().size(); j++) { if(pObject->type() != std::string("Enemy") || !pObject->updating()) { continue; } auto pRect1 = std::make_shared<SDL_Rect>(); pRect1->x = pObject->getPosition().getX(); pRect1->y = pObject->getPosition().getY(); pRect1->w = pObject->getWidth(); pRect1->h = pObject->getHeight(); auto pPlayerBullet = TheBulletHandler::Instance()-> getPlayerBullets()[j]; auto pRect2 = std::make_shared<SDL_Rect>(); pRect2->x = pPlayerBullet->getPosition().getX(); pRect2->y = pPlayerBullet->getPosition().getY(); pRect2->w = pPlayerBullet->getWidth(); pRect2->h = pPlayerBullet->getHeight(); if(RectRect(pRect1, pRect2)) { if(!pObject->dying() && !pPlayerBullet->dying()) { pPlayerBullet->collision(); pObject->collision(); } } } } }
void CollisionManager::checkPlayerEnemyCollision(Player* pPlayer, const std::vector<GameObject*> &objects) { auto pRect1 = std::make_shared<SDL_Rect>(); pRect1->x = pPlayer->getPosition().getX(); pRect1->y = pPlayer->getPosition().getY(); pRect1->w = pPlayer->getWidth(); pRect1->h = pPlayer->getHeight(); for(unsigned int i = 0; i < objects.size(); i++) { if(objects[i]->type() != std::string("Enemy") || !objects[i]->updating()) { continue; } auto pRect2 = std::make_shared<SDL_Rect>(); pRect2->x = objects[i]->getPosition().getX(); pRect2->y = objects[i]->getPosition().getY(); pRect2->w = objects[i]->getWidth(); pRect2->h = objects[i]->getHeight(); if(RectRect(pRect1, pRect2)) { if(!objects[i]->dead() && !objects[i]->dying()) { pPlayer->collision(); } } } }
void CollisionManager::checkPlayerEnemyBulletCollision(Player* pPlayer) { auto pRect1 = std::make_shared<SDL_Rect>(); pRect1->x = pPlayer->getPosition().getX(); pRect1->y = pPlayer->getPosition().getY(); pRect1->w = pPlayer->getWidth(); pRect1->h = pPlayer->getHeight(); for(unsigned int i = 0; i < TheBulletHandler::Instance()->getEnemyBullets().size(); i++) { auto pEnemyBullet = TheBulletHandler::Instance()->getEnemyBullets()[i]; auto pRect2 = std::make_shared<SDL_Rect>(); pRect2->x = pEnemyBullet->getPosition().getX(); pRect2->y = pEnemyBullet->getPosition().getY(); pRect2->w = pEnemyBullet->getWidth(); pRect2->h = pEnemyBullet->getHeight(); if(RectRect(pRect1, pRect2)) { if(!pPlayer->dying() && !pEnemyBullet->dying()) { pEnemyBullet->collision(); pPlayer->collision(); } } } }
void CollisionManager::checkCollision(GameObject * pPlayer, const std::vector<ObjectLayer*>* objectLayers) { for (int i = 0; i < objectLayers->size(); i++) { std::vector<GameObject*>* GameObjects = objectLayers->at(i)->getGameObjects(); for (int e = 0; e < GameObjects->size(); e++) { if (pPlayer != GameObjects->at(e)) { if (RectRect(pPlayer->getBoundingBox(), GameObjects->at(e)->getBoundingBox())) { pPlayer->onCollision(GameObjects->at(e)); } } } } }