Exemplo n.º 1
0
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();
            }
        }
    }
}
Exemplo n.º 5
0
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));
				}
			}
		}
	}
}