Exemple #1
0
void D_DoomMain(void)
{
	BigNumFont = LoadAResource(rBIGNUMB);	/* Cache the large numeric font (Needed always) */
	R_Init();			/* Init refresh system */
	P_Init();			/* Init main code */
	O_Init();			/* Init controls */
	for (;;) {
		RunTitle();			/* Show the title page */
		RunDemo(rDEMO1);	/* Run the first demo */
		RunCredits();		/* Show the credits page */
		RunDemo(rDEMO2);	/* Run the second demo */
	}
}
void Game::HandleGameState()
{
	switch (gameState)
	{
	case GameState::Title:
		RunTitle();
		break;
	
	case GameState::Intro:
		RunIntro();		
		break;

	case GameState::Fade:

		fadeTimer--;
		if (fadeTimer <= 0)
			fadeDone = true;

		if (fadeDone)
		{		
			levels[10];
			levelN++;	

			switch (levelN)
			{
			//First main level
			case 0:
				stage = 1;
				gameTime = 300;
				break;
			case 1:
				stage = 1;
				break;
			case 2:
				stage = 2;
				break;
			case 3:
				stage = 2;
				break;
			case 4:
				stage = 3;
				break;

			//Second main level
			case 5:
				stage = 4;
				gameTime = 400;
				break;
			case 6:
				stage = 4;
				break;
			case 7:
				stage = 5;				
				break;
			case 8:
				stage = 5;
				break;
			case 9:
				stage = 6;
				break;
			case 10:
				stage = 6;
				break;

			//Third main level
			case 11:
				stage = 7;
				break;
			default:
				break;
			}

			if (levelN == 0 || levelN == 1)
			{
				stage = 1;
			}

			if (levelN == 0 || levelN == 1)
				gameTime = 300;

			if (levelN == 5)
				gameTime = 400;

			if (levelN == 11)
				gameTime = 500;

			std::string levelID = "level";
			levelID.append(std::to_string(levelN));

			if (previousLevel)
			{
				levels[levelN].SetPreviousLevelSpawn(true, false);				
			}	
			else if (previousLevel2)
			{
				levels[levelN].SetPreviousLevelSpawn(false, true);
			}
			else
				levels[levelN].SetPreviousLevelSpawn(false, false);

			if (secondExit)
				levels[levelN].SetNextLevelSpawn(true);

			previousLevel = false;
			previousLevel2 = false;
			secondExit = false;
			
			levels[levelN].LoadLevel(levelID, levelN, tm, renderer, sm);	
			levels[levelN].SetScore(0);
			prevScore = totalScore;	
			levels[levelN].player.SetWhipLevel(whipLevel);
			levels[levelN].player.SetHealth(health);
			levels[levelN].player.SetLives(lives);
			levels[levelN].player.SetAmmo(ammo);
			levels[levelN].player.SetMaxProjectiles(maxProjectiles);
			levels[levelN].player.SetSubWeapon(subWeaponType);
			levels[levelN].player.SetAlive();				
			deathTimer = 180;		
			changeMusic = true;

			if (levelN == 1 || levelN == 2 || levelN == 4 || levelN == 5 || levelN == 8)
				camera.x = 0;

			if (levelN == 6)
				camera.x = 512;

			if (levelN == 7 || levelN == 9 || levelN == 10 || levelN == 11)
				camera.x = 1024;

			

			gameState = GameState::Running;
		}
		break;			
	
	case GameState::Running:		
		Update();		
		break;

	case GameState::Door:
		RunDoor();		
		break;

	case GameState::LevelComplete:
		RunLevelComplete();
		break;

	case GameState::Map:
		RunMap();
		break;

	case GameState::GameOver:
		RunGameOver();
		break;
	
	default:
		break;
	}		
	
}