Exemple #1
0
void PlayState::updateEnemies()
{
	EnemyIterator itr = enemies.begin();
	Enemy* curEnemy;
	while ((curEnemy = itr.next()) != 0)
	{
		curEnemy->update();

		if (curEnemy->X() < (-1*curEnemy->width()) || curEnemy->X() > MAX_ENEMY_X || curEnemy->Y() < MIN_ENEMY_Y || curEnemy->Y() > MAX_ENEMY_Y)
		{
			curEnemy->setVisible(false);
			itr.dealloc();
		}

		else 
		{
			if(player.hitBox.checkCollision(curEnemy->hitBox))
			{
				//assert2(false, "The player crashed into an enemy.  If found, comment this out on line 854 in PlayState.cpp");
				if (!player.isInvincible())
				{
					if(!player.getIsShielded())
					{
						player.setPos(PLAYER_ORIGIN);
						player.setInvincibility(90);
					}
					player.killPlayer();
					int lifeCount = player.getLifeCount();
					lives[lifeCount-1].setVisible(false);

					// If you're out of lives, the game is over.
					if(lifeCount == 0)
					{
						gameStateMan->changeState(g_gameOverState);
						return;
					}
				}
				g_playerScore += 200;
				curEnemy->setVisible(false);
				g_audioMan->playOneShot(enemyDiedNoise, enemyDiedNoiseSize, 32);
				itr.dealloc();
			}
		}
	} 
}
Exemple #2
0
void PlayState::updateBullets()
{	
	PlayerBulletIterator playerBulletItr = playerBullets.begin();

	// Update each player bullet
	Bullet* toUpdate;
	bool bulletDestroyed;
	while ((toUpdate = playerBulletItr.next()) != 0)
	{
		bulletDestroyed = false;
		toUpdate->update();

		// Check if the bullet has gone off-screen. If it is, we hide it and dealloc.
		// Otherwise, we check for enemy collisions
		if(toUpdate->X() > (SCREEN_WIDTH + toUpdate->width()) || toUpdate->X() < (-1*toUpdate->width()) || toUpdate->Y() < (-1*toUpdate->height()) || toUpdate->Y() > SCREEN_HEIGHT)
		{
			toUpdate->setVisible(false);
			playerBulletItr.dealloc();
		}
		else
		{
			// Check if a bullet has collided with an enemy.
			EnemyIterator enemyItr = enemies.begin();
			Enemy* curEnemy;
			while ((curEnemy = enemyItr.next()) != 0)
			{
				if(toUpdate->hitBox.checkCollision(curEnemy->hitBox))
				{
					if(!bulletDestroyed)
					{
						g_playerStageBulletsHit++;
						toUpdate->setVisible(false);
						playerBulletItr.dealloc();
						bulletDestroyed = true;
					}
					if (curEnemy->damage(toUpdate->getDamage()))
					{
						curEnemy->setVisible(false);
						g_audioMan->playOneShot(enemyDiedNoise, enemyDiedNoiseSize, 32);
						enemyItr.dealloc();
						g_playerScore += 200;
					}
				}
			}
		}
	}

	EnemyBulletIterator enemyBulletItr = enemyBullets.begin();

	// Update each enemy bullet
	while ((toUpdate = enemyBulletItr.next()) != 0)
	{
		bulletDestroyed = false;
		toUpdate->update();

		// Check if a bullet has collided with the player.
		if(player.hitBox.checkCollision(toUpdate->hitBox))
		{
			if (!player.isInvincible())
			{
				// Decrement life count
				if(!player.getIsShielded())
				{
					player.setPos(PLAYER_ORIGIN);
					// Give temporary immunity to damage
					player.setInvincibility(90);
				}
				player.killPlayer();
				int lifeCount = player.getLifeCount();
				lives[lifeCount - 1].setVisible(false);

				// If you're out of lives, the game is over
				if(lifeCount == 0)
				{
					gameStateMan->changeState(g_gameOverState);
					return;
				}

			}

			toUpdate->setVisible(false);
			if (!bulletDestroyed)
			{
				enemyBulletItr.dealloc();
				bulletDestroyed = true;
			}
		}

		// Check if the bullet has gone off-screen. If it is, we hide it and dealloc,
		// which effectively steps to the next iterator value. Otherwise, we'll step 
		// forward ourselves..
		if (toUpdate->X() > (SCREEN_WIDTH + toUpdate->width()) || toUpdate->X() < (-1*toUpdate->width()) ||
			toUpdate->Y() < (-1*toUpdate->height()) || toUpdate->Y() > SCREEN_HEIGHT)
		{
			toUpdate->setVisible(false);
			if (!bulletDestroyed)
			{
				enemyBulletItr.dealloc();
				bulletDestroyed = true;
			}
		}
	}
}
Exemple #3
0
void PlayState::checkInput()
{
	// Start = pause game
	if (key_hit(KEY_START))
	{
		gameStateMan->pushState(g_pauseState);
	}

	// R-Button = swap weapon modes
	if (key_hit(KEY_R))
	{
		R_triggered = !R_triggered;
		R_triggered_indicator.setTileIndex(R_triggered ? g_bullet_selection2TilesPos : g_bullet_selection1TilesPos);
	}

	// Check for A button press
	//	First block checks for an immediate button press.
	//	Second block allows constant fire by holding a button. This is forced to a specific frequency.
	if (key_is_down(KEY_A))
	{
		if (R_triggered)
		{
			player.shootLightWide();
		}
		else
		{
			player.shootLightFocus();
		}
	}
	else
	{
		player.idleLight();
	}

	// secondary fire
	if (key_is_down(KEY_B))
	{
		player.shootHeavy();
	}
	else
	{
		player.idleHeavy();
	}

	// L-Button = bomb the screen, destroying all enemies and bullets
	if (key_hit(KEY_L) && player.hasBomb())
	{
		player.subtractBomb();

		// play the bomb sound
		g_audioMan->playOneShot(bombNoise, bombNoiseSize);

		// Destroy enemies
		EnemyIterator itr = enemies.begin();
		Enemy* curEnemy;
		while ((curEnemy = itr.next()) != 0)
		{
			curEnemy->setVisible(false);
			itr.dealloc();
			g_playerScore = g_playerScore + 200;
		}

		bombAnimation = true;

		// Destroy enemy bullets
		EnemyBulletIterator enemyBulletItr = enemyBullets.begin();
		Bullet* toUpdate;
		while ((toUpdate = enemyBulletItr.next()) != 0)
		{
			toUpdate->setVisible(false);
			enemyBulletItr.dealloc();
		}

		// Destroy player bullets
		PlayerBulletIterator bulletItr = playerBullets.begin();
		Bullet* playerToUpdate;
		while ((playerToUpdate = bulletItr.next()) != 0)
		{
			playerToUpdate->setVisible(false);
			bulletItr.dealloc();
		}

		powerUp.setVisible(false);
		powerUpExists = false;
	}
}
Exemple #4
0
void PlayState::destroy()
{
	// deinit display sprites at bottom
	lifeIndic.setVisible(false);
	lifeIndic.unuseImg();
	
	bombIndic.setVisible(false);
	bombIndic.unuseImg();

	starsBG_Pos = Vec2(0, 0);
	REG_BG0VOFS = starsBG_Pos.y;
	REG_BG0HOFS = starsBG_Pos.x;

	player.setVisible(false);
	player.unuseImg();

	PlayerBulletIterator playerBulletItr = playerBullets.begin();
	Bullet* curBullet;
	while((curBullet = playerBulletItr.next()) != 0)
	{
		curBullet->setVisible(false);
		playerBulletItr.dealloc();
	}

	EnemyBulletIterator enemyBulletItr = enemyBullets.begin();
	while((curBullet = enemyBulletItr.next()) != 0)
	{
		curBullet->setVisible(false);
		enemyBulletItr.dealloc();
	}

	EnemyIterator enemyItr = enemies.begin();
	Enemy* curEnemy;
	while((curEnemy = enemyItr.next()) != 0)
	{
		curEnemy->setVisible(false);
		enemyItr.dealloc();
	}

	playerBullets.spriteDestroy();
	enemyBullets.spriteDestroy();
	enemies.spriteDestroy();

	R_triggered_indicator.setVisible(false);
	R_triggered_indicator.unuseImg();
	
	int lifeCount = player.getLifeCount();
	for(int i = 0; i < lifeCount - 1; ++i)
	{
		lives[i].setVisible(false);
		lives[i].unuseImg();
	}

	powerUp.setVisible(false);
	powerUp.unuseImg();
	if (poweredUp)
	{
		powerUp.powerDown(&player);
	}

	clearText();

	g_oamMan->deallocSprites(sprites, NUM_SPRITES);
}