void initialize() { hasSavePoint = false; if (currLevel == 0){ //glutSetCursor(GLUT_CURSOR_NONE); setMouse(win1.width / 2, win1.height / 2); updateProjection(win1); } glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); glCullFace(GL_BACK); glClearColor(0.0, 0.0, 0.0, 1.0); // specify clear values for the color buffers loadImages(); levels[currLevel] = new Level(currLevel + 1); Stamina = 100; makeEntites(); levelEdges = levels[currLevel]->getEdges(); camera1 = new Camera(Vector3(levels[currLevel]->startPoint->x, 2, levels[currLevel]->startPoint->y), findPosition(levels[currLevel]), Vector3(0, 1, 0)); if (levels[currLevel]->startNode->left || levels[currLevel]->startNode->right){ cylinder1.yaw(90); } startPlayer = cylinder1; resetEnemies(); sound = new Sound(); sound->Load(); sound->Play(SOUND_MUSIC1); }
void reset() { playerLevel = 1; playerScore = 0; currentWave = 0; waveCount = 0; inWave = false; resetEnemies(); levelUpTimer = 0; mainMessageTimer = 0; }
//detects player - enemy collision void checkEnemyCollision(){ for (int i = 0; i < 30; i++){ if (enemies[i]->getAlive()){ if (dist2(v2(enemies[i]->getPosition().x, enemies[i]->getPosition().z), v2(camera1->getPosition().x, camera1->getPosition().z)) < 14){ if (camera1->getPosition().y > 5){ enemies[i]->setAlive(false); camera1->gravity = 0.25; jumping = true; PlaySound(TEXT("splat.wav"), NULL, SND_FILENAME | SND_ASYNC); } else{ resetEnemies(); PlaySound(TEXT("death.wav"), NULL, SND_FILENAME | SND_ASYNC); Stamina = 100; camera1 = new Camera(Vector3(levels[currLevel]->startPoint->x, 2, levels[currLevel]->startPoint->y), findPosition(levels[currLevel]), Vector3(0, 1, 0)); cylinder1 = startPlayer; State = "Loading"; } } } } }
//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; } }