void EnemySystem::resetEnemies(SDL_Renderer* renderer, Player &player, ParticleSystem &pas) { pas.CreateBurst(player.getX(), player.getY(), 60, renderer); player.getActive() = false; player.resetSpeed(); shakeIntensity += 250; spawnReset += (300 - spawnReset) / 4; for (int x = 0; x < fEnemyList.size(); x++) { pas.CreateBurst(fEnemyList[x].getX(), fEnemyList[x].getY(), 25, renderer); fEnemyList.erase(fEnemyList.begin() + x); shakeIntensity += 10; } for (int x = 0; x < bEnemyList.size(); x++) { pas.CreateBurst(bEnemyList[x].getX(), bEnemyList[x].getY(), 25, renderer); bEnemyList.erase(bEnemyList.begin() + x); shakeIntensity += 10; } }
//moves every enemy in the enemy lists; //if the enemy is "inactive" (usually zero health) //the enemy is taken out of the list //and particles are created; //touching players will destroy the player. void EnemySystem::moveEnemies(ProjectileSystem &ps, Player &player, ParticleSystem &pas, SDL_Renderer *renderer) { for (int x = 0; x < fEnemyList.size(); x++) { if (fEnemyList[x].getStatus() == true) { fEnemyList[x].getDirection(player); fEnemyList[x].move(player); } else { pas.CreateBurst(fEnemyList[x].getX(), fEnemyList[x].getY(), 25, renderer); fEnemyList.erase(fEnemyList.begin() + x); shakeIntensity += 25; } } for (int x = 0; x < bEnemyList.size(); x++) { if (bEnemyList[x].getStatus() == true) { bEnemyList[x].move(); } else { pas.CreateBurst(bEnemyList[x].getX(), bEnemyList[x].getY(), 25, renderer); bEnemyList.erase(bEnemyList.begin() + x); shakeIntensity += 25; } } for (int x = 0; x < fEnemyList.size(); x++) { for (int y = 0; y < ps.getList().size(); y++) { //SDL built-in rectangle collision detection if (SDL_HasIntersection(&fEnemyList[x].getCollisionBox(), &ps.getList()[y].getCollisionBox()) == SDL_TRUE) { fEnemyList[x].loseHealth(ps.getList()[y].getDamage()); ps.getList()[y].active = 0; shakeIntensity += 5; pas.CreateBurst(ps.getList()[y].getX(), ps.getList()[y].getY(), 3, renderer); } } if (SDL_HasIntersection(&fEnemyList[x].getCollisionBox(), &player.getCollision()) == SDL_TRUE && player.getActive() == true) { //destroy player, destroy all enemies and increase enemy spawn timer resetEnemies(renderer, player, pas); } } for (int x = 0; x < bEnemyList.size(); x++) { for (int y = 0; y < ps.getList().size(); y++) { if (SDL_HasIntersection(&bEnemyList[x].getCollisionBox(), &ps.getList()[y].getCollisionBox()) == SDL_TRUE) { bEnemyList[x].loseHealth(ps.getList()[y].getDamage()); ps.getList()[y].active = 0; shakeIntensity += 5; pas.CreateBurst(ps.getList()[y].getX(), ps.getList()[y].getY(), 3, renderer); } } if (SDL_HasIntersection(&bEnemyList[x].getCollisionBox(), &player.getCollision()) == SDL_TRUE && player.getActive() == true) { resetEnemies(renderer, player, pas); } } reduceDelay--; if (spawnReset > 40 && reduceDelay <= 0) { spawnReset -= 4; reduceDelay = 150; std::cout << spawnReset << std::endl; } }