Пример #1
0
CCRect Enemy::getBoundingBox()
{
	CCRect rect=m_sprite->boundingBox();
	CCPoint pos=this->convertToWorldSpace(rect.origin);
	CCRect enemyRect(pos.x,pos.y,rect.size.width,rect.size.height);
	return enemyRect;
}
Пример #2
0
Rect Enemy::getBoundingBox()
{
	auto rect = _sprite->getBoundingBox();
	auto pos = this->convertToWorldSpace(rect.origin);
	Rect enemyRect(pos.x, pos.y, rect.size.width, rect.size.height);
	return enemyRect;
}
Пример #3
0
void GameScene::handleCollisions()
{
    // Acquire player Rectangle
    cocos2d::Rect playerRect(mPlayer->getPosition().x - (mPlayer->getBoundingBox().size.width / 2),
                             mPlayer->getPosition().y - (mPlayer->getBoundingBox().size.height / 2),
                             mPlayer->getBoundingBox().size.width,
                             mPlayer->getBoundingBox().size.height);

    // Player <-> Enemy missile
    if (vecMissiles.size() > 0)
    {
        for (unsigned int i = 0; i < vecMissiles.size() - 1; ++i)
        {
            if (vecMissiles[i]->type != Entities::LASER || vecMissiles[i] == nullptr || vecMissiles[i]->getIsValid() == false)
                continue;

            cocos2d::Rect missileRect(vecMissiles[i]->getPosition().x - (vecMissiles[i]->getBoundingBox().size.width / 2),
                                      vecMissiles[i]->getPosition().y - (vecMissiles[i]->getBoundingBox().size.height / 2),
                                      vecMissiles[i]->getBoundingBox().size.width,
                                      vecMissiles[i]->getBoundingBox().size.height);

            if (missileRect.intersectsRect(playerRect))
            {
                vecMissiles[i]->setInvalid();
                mPlayer->damage(Damage::ENEMY_PROJ_DMG);
            }
        }
    }

    // Player <-> Enemy
    if (vecEnemies.size() > 0)
    {
        for (unsigned int i = 0; i < vecEnemies.size() - 1; ++i)
        {
            if (mPlayer->getIsDead())
                break;

            if (vecEnemies[i] == nullptr || vecEnemies[i]->getIsValid() == false)
                continue;

            cocos2d::Rect enemyRect(vecEnemies[i]->getPosition().x - (vecEnemies[i]->getBoundingBox().size.width / 2),
                                    vecEnemies[i]->getPosition().y - (vecEnemies[i]->getBoundingBox().size.height / 2),
                                    vecEnemies[i]->getBoundingBox().size.width,
                                    vecEnemies[i]->getBoundingBox().size.height);

            if (enemyRect.intersectsRect(playerRect))
            {
                vecEnemies[i]->die();
                mPlayer->damage(Damage::ENEMY_DMG);
                mPlayer->rageIncrease(5);
                points -= 100;
            }
        }
    }
    // Enemy <-> Player missile
    if (vecEnemies.size() > 0)
    {
        for (unsigned int e = 0; e < vecEnemies.size() - 1; ++e)
        {
            if (vecEnemies[e] == nullptr || vecEnemies[e]->getIsValid() == false)
                continue;

            if (vecMissiles.size() > 0)
            {
                for (unsigned int m = 0; m < vecMissiles.size() - 1; ++m)
                {
                    if ((vecMissiles[m]->type != Entities::WATERBALL && vecMissiles[m]->type != Entities::FIREBALL) || vecMissiles[m] == nullptr || vecMissiles[m]->getIsValid() == false)
                        continue;


                    cocos2d::Rect missileRect(vecMissiles[m]->getPosition().x - (vecMissiles[m]->getBoundingBox().size.width / 2),
                                              vecMissiles[m]->getPosition().y - (vecMissiles[m]->getBoundingBox().size.height / 2),
                                              vecMissiles[m]->getBoundingBox().size.width,
                                              vecMissiles[m]->getBoundingBox().size.height);

                    cocos2d::Rect enemyRect(vecEnemies[e]->getPosition().x - (vecEnemies[e]->getBoundingBox().size.width / 2),
                                            vecEnemies[e]->getPosition().y - (vecEnemies[e]->getBoundingBox().size.height / 2),
                                            vecEnemies[e]->getBoundingBox().size.width,
                                            vecEnemies[e]->getBoundingBox().size.height);

                    if (missileRect.intersectsRect(enemyRect))
                    {
                        mPlayer->rageIncrease(1);
                        vecEnemies[e]->damage(vecMissiles[m]->type == Entities::WATERBALL ? Damage::WATERBALL_DMG : Damage::FIREBALL_DMG);
                        vecMissiles[m]->setInvalid();
                        points += 20;
                        if (vecEnemies[e]->getIsDead())
                            points += 100;
                    }
                }
            }
        }
    }
}