/// <summary> /// LoadContent will be called once per game and is the place to load /// all of your content. /// </summary> protected override void LoadContent() { CurrentState = GameState.StartingSplashScreen; this.IsMouseVisible = true; onScreenText = ""; enableXYPosition = false; // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); // TODO: use this.Content to load your game content here startScreen.LoadContent(Content); pauseScreen.LoadContent(Content); storyScreen.LoadContent(Content); helpScreen.LoadContent(Content); Global.player = new Player(); Global.player.LoadContent(Content); // get number of map exist in the directory numberOfMaps = getNumberOfMapFiles(); currentMap = 1; //initialise score variables Global.highscore.LoadContent(numberOfMaps); currentTotalScore = 0; oldTotalScore = Global.highscore.getTotalScore(); //loading of sound effects if (!dontLoadMusicAgain) { graphicsDevice = this.GraphicsDevice; backgroundMusic = Content.Load <SoundEffect>("Sounds/BackgroundMusic"); bgMusicInstance = backgroundMusic.CreateInstance(); bgMusicInstance.IsLooped = true; deathMusic = Content.Load <SoundEffect>("Sounds/DeathScreams"); deathMusicInstance = deathMusic.CreateInstance(); deathMusicInstance.IsLooped = false; jumpSound = Content.Load <SoundEffect>("Sounds/Jump"); jumpSoundInstance = jumpSound.CreateInstance(); jumpSoundInstance.IsLooped = false; zombieSound = Content.Load <SoundEffect>("Sounds/Zombie"); zombieSoundInstance = zombieSound.CreateInstance(); dontLoadMusicAgain = true; } }
/// <summary> /// Allows the game to run logic such as updating the world, /// checking for collisions, gathering input, and playing audio. /// </summary> /// <param name="gameTime">Provides a snapshot of timing values.</param> protected override void Update(GameTime gameTime) { if (this.IsActive) { // TODO: Add your update logic here playerRootedInterval += (float)gameTime.ElapsedGameTime.TotalSeconds; fogTime += (float)gameTime.ElapsedGameTime.TotalSeconds; interval += (float)gameTime.ElapsedGameTime.TotalSeconds; fogOfWarPowerUpDuration += (float)gameTime.ElapsedGameTime.TotalSeconds; //update keystates oldkeys = keystate; keystate = Keyboard.GetState(); //save the hassle, just exit once this is detected if (startScreen.Exit.clicked || pauseScreen.quitGame.clicked) { this.Exit(); } #region play background music forever playSounds(); //zombie sound if (zombieSoundInstance.State != SoundState.Playing) { zombieSoundInstance.Volume = 0f; } #endregion #region On screen text for debuggin. activate this by pressing ctrl-X if (interval > 2f) { onScreenText = ""; } if ((keystate.IsKeyDown(Keys.LeftControl) && keystate.IsKeyDown(Keys.X)) && !(oldkeys.IsKeyDown(Keys.LeftControl) && oldkeys.IsKeyDown(Keys.X))) { if (enableXYPosition) { enableXYPosition = false; } else { enableXYPosition = true; } } #endregion // check if the player is at the last map. if (currentMap == numberOfMaps) { lastMap = true; } #region switchcase switch (CurrentState) { #region GameState.StartingSplashScreen -> Starting SplashScreen case GameState.StartingSplashScreen: if (storyScreen.Update(gameTime)) { CurrentState = GameState.StartMenu; } interval = 0f; break; #endregion #region GameState.StartMenu -> Start Menu Updates case GameState.StartMenu: startScreen.Update(); //if control button is click if (startScreen.Controls.clicked) { startScreen.Controls.clicked = false; CurrentState = GameState.ControlsScreen; } //if play button is clicked or spacebar button if (((startScreen.Play.clicked) || (keystate.IsKeyDown(Keys.Space) && interval > 0.4f))) { startScreen.Play.clicked = true; this.IsMouseVisible = false; LoadLevel(); interval = 0f; CurrentState = GameState.Playing; } //credit screen if (startScreen.Credits.clicked) { startScreen.Credits.clicked = false; this.IsMouseVisible = false; interval = 0f; loadCreditScreen(); currentMap = 999; CurrentState = GameState.CreditScreen; } break; #endregion #region GameState.ControlsScreen -> Control Screen Methods case GameState.ControlsScreen: //check if user exit controls screen if (helpScreen.buto) { helpScreen = new HelpScreen(); helpScreen.LoadContent(Content); CurrentState = GameState.StartMenu; } else { helpScreen.Update(); } break; #endregion #region GameState.CreditScreen -> run the credit screen case GameState.CreditScreen: //same as playing #endregion #region GameState.Playing -> This contain all the updates once it starts playing case GameState.Playing: //if game has started, press esc to pause if (keystate.IsKeyDown(Keys.Escape) && !(oldkeys.IsKeyDown(Keys.Escape))) { CurrentState = GameState.Pause; } //check for player health reaches zero, he die if (Global.player.isHeDead() && CurrentState != GameState.CreditScreen) { interval = 0; CurrentState = GameState.PlayerDied; } /// if score reaches 0 if (Global.highscore.getCurrentScore() < 0 && CurrentState != GameState.CreditScreen) { CurrentState = GameState.OutOfTime; } if (Global.player.rooted = true && playerRootedInterval > 3f) { Global.player.rooted = false; } this.IsMouseVisible = false; map.Update(gameTime, Content); Camera(gameTime); Collision(); Global.player.Update(gameTime); ZombieCollision(); PlayerCollisionWithZombie(); chaserCollidePlayer(); #region Power Ups if (fogOfWarPowerUpDuration > 5f && !fog_cheat) { fogOn = true; } #endregion #region GodMode, FogOfWar and SkipLevel Cheats //turn off Fog Of war if ((keystate.IsKeyDown(Keys.F) && keystate.IsKeyDown(Keys.LeftControl)) && !(oldkeys.IsKeyDown(Keys.F) && oldkeys.IsKeyDown(Keys.LeftControl))) { if (fogOn) { fogOn = false; fog_cheat = true; } else { fogOn = true; fog_cheat = false; } } //godmode, unlimited health if ((keystate.IsKeyDown(Keys.G) && keystate.IsKeyDown(Keys.LeftControl)) && !(oldkeys.IsKeyDown(Keys.G) && oldkeys.IsKeyDown(Keys.LeftControl))) { if (godMode) { godMode = false; } else { godMode = true; } } //if godMode, player health will never move if (godMode) { Global.player.playerHealth = 0; } //bypass the current level by pressing ctrl-C if ((keystate.IsKeyDown(Keys.LeftControl) && keystate.IsKeyDown(Keys.C)) && !(oldkeys.IsKeyDown(Keys.LeftControl) && oldkeys.IsKeyDown(Keys.C))) { if (currentMap < numberOfMaps) { ++currentMap; enableXYPosition = false; LoadLevel(); } else { //onScreenText = "NO MORE MAPS TO LOAD!"; interval = 0; } } //fog update scale if (fogTime > fogInterval) { if (fogIncreaseSize) { if (fogScale > 3.5f) { fogIncreaseSize = false; } fogScale += 0.01f; } if (!fogIncreaseSize) { if (fogScale < 1.5f) { fogIncreaseSize = true; } fogScale -= 0.01f; } fogTime = 0f; } #endregion break; #endregion #region GameState.Pause -> pause update case GameState.Pause: this.IsMouseVisible = true; pauseScreen.Update(); //resume validation if (pauseScreen.resume.clicked || (((keystate.IsKeyDown(Keys.Escape) || keystate.IsKeyDown(Keys.Enter)) && interval > 0.3f) && (!(oldkeys.IsKeyDown(Keys.Escape) || oldkeys.IsKeyDown(Keys.Enter))))) { pauseScreen = new PauseScreen(); pauseScreen.LoadContent(Content); CurrentState = GameState.Playing; } //exit level if (pauseScreen.exitLevel.clicked) { pauseScreen = new PauseScreen(); pauseScreen.LoadContent(Content); storyScreen.buto = false; if (currentMap == 999) { map.player.Stop(); } this.LoadContent(); } break; #endregion #region GameState.PlayerWin -> Player win, reach the goal case GameState.PlayerWin: //this will add up the totalcurrentscore to show on the screen when finish if (runOnce) { Global.highscore.CalculateScore(); currentTotalScore += Global.highscore.currentScore; runOnce = false; } // press escape, enter, space to exit screen if (((keystate.IsKeyDown(Keys.Escape) || keystate.IsKeyDown(Keys.Space) || keystate.IsKeyDown(Keys.Enter)) && interval > 0.3f) && (!(oldkeys.IsKeyDown(Keys.Escape) || oldkeys.IsKeyDown(Keys.Space) || oldkeys.IsKeyDown(Keys.Enter)))) { if (lastMap) { currentMap = 999; loadCreditScreen(); CurrentState = GameState.CreditScreen; } else { CurrentState = GameState.LevelSplashScreen; } } break; #endregion #region GameState.LevelSplashScreen -> show story screen case GameState.LevelSplashScreen: // press escape, enter, space to exit screen if ((((keystate.IsKeyDown(Keys.Escape) || keystate.IsKeyDown(Keys.Space) || keystate.IsKeyDown(Keys.Enter)) && interval > 0.3f) && (!(oldkeys.IsKeyDown(Keys.Escape) || oldkeys.IsKeyDown(Keys.Space) || oldkeys.IsKeyDown(Keys.Enter)))) || !splashScreenForLevelExist) { runOnce = true; interval = 0f; if (!lastMap) //if not lastmap { ++currentMap; enableXYPosition = false; LoadLevel(); CurrentState = GameState.Playing; } else { //comparing old totalScore to current regradless of level if (currentTotalScore > oldTotalScore) { Global.highscore.addTotalScore(currentTotalScore); } currentMap = 1; pauseScreen = new PauseScreen(); pauseScreen.LoadContent(Content); storyScreen.buto = false; lastMap = false; this.LoadLevel(); } } break; #endregion #region GameState.PlayerDied -> player Died from zombie, chaser or falling into blackhole case GameState.PlayerDied: ///Combined with OutOfTime case #endregion #region GameState.OutOfTime -> out of time!! case GameState.OutOfTime: //Zombie eat you, you die! //Exit to main menu // press escape, enter, space to exit screen if (((keystate.IsKeyDown(Keys.Escape) || keystate.IsKeyDown(Keys.Enter)) && interval > 0.3f) && (!(oldkeys.IsKeyDown(Keys.Escape) || oldkeys.IsKeyDown(Keys.Enter)))) { pauseScreen = new PauseScreen(); pauseScreen.LoadContent(Content); storyScreen.buto = false; this.LoadContent(); } //restart level, press R if (keystate.IsKeyDown(Keys.R) && !oldkeys.IsKeyDown(Keys.R)) { startScreen.Play.clicked = true; this.IsMouseVisible = false; LoadLevel(); interval = 0f; CurrentState = GameState.Playing; } break; #endregion } #endregion } base.Update(gameTime); }