Пример #1
0
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;
	}
}
Пример #2
0
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]);
		}
	}
}
Пример #3
0
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;
		}
	}
}
Пример #4
0
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);
		}
	}
}