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; }
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; }
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; } } } } } }