void Enemy::EnemyShootAt(const double &dt, const float &startShooting, const float &endShooting, const float &bulletSpeed, Player *p, vector<Turret> *Turrets) { if (fireDelay < startShooting) { if (Shooting == true) { if (armRotate > 0) armRotate -= (float)(90 * dt); projectile.moveBullet(dt, 60.f); checkBulletCollision(p,Turrets); } else { Shooting = true; projectile.updatePosition(Vector3(position)); Vector3 bulletTarget = target + Vector3((rand() % 2) - 0.5f, (rand() % 2) / 2.f - 0.5f, (rand() % 2) / 2.f - 0.5f); projectile.setView((bulletTarget - position).Normalized()); } } else if (fireDelay >= endShooting) { fireDelay = 0; } else { if (armRotate < 90) { armRotate += (float)(90 * dt); } Shooting = false; } }
void World::checkCollision() { // collision bullets for (int i = 0; i < Const::BULLET_COUNT; i++) { if (m_bullets[i].isAlive()){ checkBulletCollision(m_bullets[i]); } } // collision ships int count = Const::ENEMY_SHIP_AMOUNT; for (int i = 0; i <= count; i++){ if (m_ships[i].isAlive()){ checkShipCollision(m_ships[i]); } } }
void render() { // Clears the buffer with this colour attribute clearBuffer(0x00); // Set up sample colours, and output shadings const WORD colors[] = { 0x1A, 0x2B, 0x3C, 0x4D, 0x5E, 0x6F, 0xA1, 0xB2, 0xC3, 0xD4, 0xE5, 0xF6 }; COORD c; // displays the framerate std::ostringstream ss; ss << std::fixed << std::setprecision(3); ss << 1.0 / deltaTime << "fps"; c.X = ConsoleSize.X-9; c.Y = 0; writeToBuffer(c, ss.str()); // displays the elapsed time ss.str(""); ss << elapsedTime << "secs"; c.X = 0; c.Y = ConsoleSize.Y - 1; writeToBuffer(c, ss.str(), 0x59); if (!levelStart) levelStart = initLevel(); renderShip(); moveBullets(); checkBulletCollision(enemyArr, levelInfo.number); renderBullets(); if (!spawnBufferCount && enemiesSpawned < levelInfo.number) { if (spawnEnemy(enemyArr, levelInfo.number)) { spawnBufferCount += levelInfo.spawnBuffer; enemiesSpawned++; } } else if (spawnBufferCount) spawnBufferCount--; moveEnemy(enemyArr, levelInfo.number); checkBulletCollision(enemyArr, levelInfo.number); checkEnemyCollision(enemyArr, levelInfo.number); renderEnemy(enemyArr, levelInfo.number); if (levelInfo.bullets) { if (spawnEnemyBullet(enemyArr)) { spawnBufferCount += bulletInfo.spawnBuffer; } moveEnemy(enemyBulletArr, bulletInfo.number); checkEnemyCollision(enemyBulletArr, bulletInfo.number); renderEnemy(enemyBulletArr, bulletInfo.number); } // Writes the buffer to the console, hence you will see what you have written flushBufferToConsole(); if (enemiesSpawned == levelInfo.number) { if (checkClear(enemyArr, levelInfo.number)) { levelStart = false; enemiesSpawned = 0; spawnBufferCount = 0; delete[] enemyArr; delete[] enemyBulletArr; levelInfo.level = levelInfo.nextLevel; } } }
void Enemy::EnemyMove(double dt, Player *p, vector<Turret> *Turrets) { fireDelay += (float)dt; Vector3 view = Vector3(0, 0, 0); if (target != position) view = (target - position).Normalized(); if (!isBoss) { if (GetDistance() > range + KiteTimer) { position += Vector3(view.x,0.f,view.z)*(float)MoveSpeed*(float)dt; if (Shooting == true) { if (armRotate > 0) armRotate -= (float)(90 * dt); projectile.moveBullet(dt, 70.f); checkBulletCollision(p,Turrets); } } else if (KiteTimer < 7) { EnemyKite(dt); EnemyShootAt(dt,2.f,4.f, 10.f,p,Turrets); } else if (KiteTimer >= 7) { EnemyShootAt(dt,2.f,4.f, 10.f,p,Turrets); KiteTimer = 0; if (rand() % 2 == 0) { moveRight = true; } else { moveRight = false; } } else { EnemyShootAt(dt, 2.f, 4.f, 10.f, p,Turrets); } } else { for (int i = 0; i < sizeof(projectiles) / sizeof(projectiles[0]); ++i) { projectiles[i].moveBullet(dt, 60.f); } checkBulletsCollision(p,Turrets); if (spawnerCounter < 50) { BossShootAt(dt, 0.1f, 0.2f); } else { if (armRotate > 0) armRotate -= (float)(90 * dt); BossSpawnMinions(dt); } } }