/// <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) { #region FPSTracking /*//Update FPS elapsedTime += (float)gameTime.ElapsedGameTime.TotalMilliseconds; totalFrames++; //1 Second has passed if (elapsedTime > 1000.0f) { fps = totalFrames; totalFrames = 0; elapsedTime = 0; Window.Title = fps.ToString(); }*/ #endregion #region MenuNavigation int selectedIndex = 0; KeyboardState ks = Keyboard.GetState(); //Handle menu navigation if (baseScene == startScene) { //Return to START scene from all sub-scenes if (ks.IsKeyDown(Keys.Escape)) { hideAllScenes(); startScene.Show(); enabledScene = startScene; } if (enabledScene == startScene) { //Get the selected item index from the menu selectedIndex = startScene.Menu.SelectedIndex; //Display the corresponding sub-scene based on user selection if (selectedIndex == (int)MenuItemTitles.START && ks.IsKeyDown(Keys.Enter) && oldState.IsKeyUp(Keys.Enter)) { //Display the Game scene hideAllScenes(); //Reset game (to selected level) actionScene.Reset(this, spriteBatch, levelList[0]); //actionScene.Reset(this, spriteBatch, "Debug"); currentLevel = 1; actionScene.Show(); baseScene = actionScene; enabledScene = actionScene; } else if (selectedIndex == (int)MenuItemTitles.SELECT && ks.IsKeyDown(Keys.Enter) && oldState.IsKeyUp(Keys.Enter)) { //Remove level selector scene if (levelSelectScene != null) { scenes.Remove(levelSelectScene); this.Components.Remove(levelSelectScene); } //Create a new level selector scene levelSelectScene = new LevelSelectScene(this, spriteBatch, levelSelectBackground, NUMBER_OF_LEVELS, Utilities.Utilities.CheckLevelProgression()); scenes.Add(levelSelectScene); this.Components.Add(levelSelectScene); //Display the LevelSelector scene hideAllScenes(); levelSelectScene.Show(); enabledScene = levelSelectScene; } else if (selectedIndex == (int)MenuItemTitles.HELP && ks.IsKeyDown(Keys.Enter) && oldState.IsKeyUp(Keys.Enter)) { //Display the HELP scene hideAllScenes(); helpScene.Show(); enabledScene = helpScene; } else if (selectedIndex == (int)MenuItemTitles.ABOUT && ks.IsKeyDown(Keys.Enter) && oldState.IsKeyUp(Keys.Enter)) { //Display the ABOUT scene hideAllScenes(); aboutScene.Show(); enabledScene = aboutScene; } else if (selectedIndex == (int)MenuItemTitles.HIGH_SCORE && ks.IsKeyDown(Keys.Enter) && oldState.IsKeyUp(Keys.Enter)) { //Remove old high score scene if (highScoreScene != null) { scenes.Remove(highScoreScene); this.Components.Remove(highScoreScene); } //Create a new high score scene highScoreScene = new HighScoreScene(this, spriteBatch, highScoreSceneBackground); scenes.Add(highScoreScene); this.Components.Add(highScoreScene); //Display the high score screen hideAllScenes(); highScoreScene.Show(); enabledScene = highScoreScene; } else if (selectedIndex == (int)MenuItemTitles.HOW_TO && ks.IsKeyDown(Keys.Enter) && oldState.IsKeyUp(Keys.Enter)) { //Display the HowToPlay scene hideAllScenes(); howToPlayScene.Show(); enabledScene = howToPlayScene; } else if (selectedIndex == (int)MenuItemTitles.QUIT && ks.IsKeyDown(Keys.Enter) && oldState.IsKeyUp(Keys.Enter)) { //Exit Exit(); } } else if (enabledScene == levelSelectScene) { //DEBUG - Reset Level Progression if (ks.IsKeyDown(Keys.OemTilde) && ks.IsKeyDown(Keys.R)) { Utilities.Utilities.ResetLevelProgression(); } if (ks.IsKeyDown(Keys.Enter) && oldState.IsKeyUp(Keys.Enter)) { //Get the selected item index from the level selector menu int selectedLevelIndex = levelSelectScene.SelectedIndex; //Display the Game scene hideAllScenes(); //Load selected level actionScene.Reset(this, spriteBatch, levelList[selectedLevelIndex]); currentLevel = selectedLevelIndex + 1; actionScene.Show(); baseScene = actionScene; enabledScene = actionScene; } } else if (enabledScene == highScoreScene) { //DEBUG - Reset the HighScores if (ks.IsKeyDown(Keys.OemTilde) && ks.IsKeyDown(Keys.R)) { Utilities.Utilities.ResetHighScores(); } if (ks.IsKeyDown(Keys.Enter) && oldState.IsKeyUp(Keys.Enter)) { hideAllScenes(); startScene.Show(); enabledScene = startScene; } } else if ((enabledScene == highScoreScene || enabledScene == helpScene || enabledScene == aboutScene || enabledScene == howToPlayScene) && (ks.IsKeyDown(Keys.Enter) && oldState.IsKeyUp(Keys.Enter))) { hideAllScenes(); startScene.Show(); enabledScene = startScene; } } else if (baseScene == actionScene) { if (enabledScene == actionScene) { //Display pause menu if (ks.IsKeyDown(Keys.Escape) && oldState.IsKeyUp(Keys.Escape)) { //Pause the game actionScene.DisableComponents(); //Show the pause menu pauseMenuScene.Menu.SelectedIndex = 0; pauseMenuScene.Show(); baseScene = pauseMenuScene; enabledScene = pauseMenuScene; } //Display the LevelOver menu when the level ends if (actionScene.Character.LevelComplete == true) { //Display the LevelOver menu if it is not the last level if (currentLevel < NUMBER_OF_LEVELS) { //Pause the game actionScene.DisableComponents(); //Update the Level Progression if necessary if (currentLevel + 1 > Utilities.Utilities.CheckLevelProgression()) { Utilities.Utilities.UpdateLevelProgression(currentLevel + 1); } //Remove the current LevelOver menu scene if one exists if (levelOverScene != null) { scenes.Remove(levelOverScene); this.Components.Remove(levelOverScene); } //Create a new LevelOver menu scene levelOverScene = new LevelOverScene(this, spriteBatch, levelOverSceneBackground, actionScene.Character.Score); scenes.Add(levelOverScene); this.Components.Add(levelOverScene); //Show the LevelOver menu levelOverScene.Show(); baseScene = actionScene; enabledScene = levelOverScene; //Reset the level over tracker actionScene.Character.LevelComplete = false; } //Display the GameOver menu if the last level has been completed else { //Set game over to true actionScene.GameOver = true; actionScene.Character.LevelComplete = false; //Update the Level Progression file Utilities.Utilities.UpdateLevelProgression(NUMBER_OF_LEVELS); //Play the game over sound effect SoundEffect gameOver = Content.Load<SoundEffect>("Sounds/GameOver"); gameOver.Play(); } } //Display the Game Over menu when the game ends (player dies) if (actionScene.GameOver == true) { //Pause the game actionScene.DisableComponents(); //Remove the current GameOver menu scene if one exists if (gameOverMenuScene != null) { scenes.Remove(gameOverMenuScene); this.Components.Remove(gameOverMenuScene); } //Create a new GameOver menu scene gameOverMenuScene = new GameOverMenuScene(this, spriteBatch, gameOverSceneBackground, actionScene.Character.Score); scenes.Add(gameOverMenuScene); this.Components.Add(gameOverMenuScene); //Show the GameOver menu gameOverMenuScene.Show(); baseScene = gameOverMenuScene; enabledScene = gameOverMenuScene; } } else if (enabledScene == levelOverScene) { //Advance to the next level if (ks.IsKeyDown(Keys.Enter) && oldState.IsKeyUp(Keys.Enter)) { //Display the Game scene hideAllScenes(); //Load selected level actionScene.Reset(this, spriteBatch, levelList[++currentLevel - 1], actionScene.Character.Score, actionScene.Character.Lives); actionScene.Show(); baseScene = actionScene; enabledScene = actionScene; } } } else if (baseScene == pauseMenuScene) { if (enabledScene == pauseMenuScene) { //Get the selected menu item index from the Pause menu selectedIndex = pauseMenuScene.Menu.SelectedIndex; //Unpause the game if (selectedIndex == (int)PauseMenuItems.RESUME && ks.IsKeyDown(Keys.Enter)) { actionScene.EnableComponents(); pauseMenuScene.Hide(); baseScene = actionScene; enabledScene = actionScene; } //Return to Main Menu (and reset game) if (selectedIndex == (int)PauseMenuItems.MAIN_MENU && ks.IsKeyDown(Keys.Enter)) { hideAllScenes(); startScene.Show(); baseScene = startScene; enabledScene = startScene; } //Display How To Play menu if (selectedIndex == (int)PauseMenuItems.HOW_TO && (ks.IsKeyDown(Keys.Enter) && oldState.IsKeyUp(Keys.Enter))) { pauseMenuScene.Hide(); howToPlayScene.Show(); enabledScene = howToPlayScene; } //Exit the game if (selectedIndex == (int)PauseMenuItems.QUIT && ks.IsKeyDown(Keys.Enter)) { Exit(); } } else if (enabledScene == howToPlayScene) { //Return to the pause menu if (ks.IsKeyDown(Keys.Escape) || (ks.IsKeyDown(Keys.Enter) && oldState.IsKeyUp(Keys.Enter))) { howToPlayScene.Hide(); pauseMenuScene.Show(); enabledScene = pauseMenuScene; } } } else if (baseScene == gameOverMenuScene) { //Handle game over event if (gameOverMenuScene.Enabled) { //Return to the Main Menu (and reset game) if (gameOverMenuScene.HighScoreComponent.NameEntered == true && ks.IsKeyDown(Keys.Enter)) { hideAllScenes(); startScene.Show(); startScene.Menu.SelectedIndex = 0; baseScene = startScene; enabledScene = startScene; } } } else if (!startScene.Enabled) { //Should never get here!!! if (ks.IsKeyDown(Keys.Escape)) { hideAllScenes(); startScene.Show(); enabledScene = startScene; } } //Set the old keystate to the current keystate oldState = ks; #endregion //Debug Mode if (ks.IsKeyDown(Keys.Space)) { Console.WriteLine("Debug Mode"); } //Background music if (MediaPlayer.State != MediaState.Playing) { if (++backgroundMusicCounter > backgroundMusic.Count - 1) { backgroundMusicCounter = 0; } MediaPlayer.Play(backgroundMusic[backgroundMusicCounter]); } base.Update(gameTime); }
/// <summary> /// LoadContent will be called once per game and is the place to load /// all of your content. /// </summary> protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); #region BackgroundMusic //Reset the background music index counter backgroundMusicCounter = 0; MediaPlayer.Volume = 0.2f; //Instantiate list of songs backgroundMusic = new List<Song>(); //If you could, please credit me as 'Joe Reynolds - Professorlamp' Refer people to my website at - jrtheories.webs.com Thank you! //http://opengameart.org/content/energetic-platformer-music-drop-table-bass backgroundMusic.Add(Content.Load<Song>("Sounds/CinderellasBallgagM")); //If you could, please credit me as 'Joe Reynolds - Professorlamp' Refer people to my website at - jrtheories.webs.com Thank you! //http://opengameart.org/content/cinderellas-ballgag backgroundMusic.Add(Content.Load<Song>("Sounds/DropTableBassFinal")); #endregion #region LevelCreation //Create level list levelList = new List<string>() { "Level1", "Level2", "Level3", "Level4" }; #endregion #region SceneCreation startSceneBackground = Content.Load<Texture2D>("ScreenBackgrounds/MainMenuScreen"); pauseMenuBackground = Content.Load<Texture2D>("ScreenBackgrounds/PauseMenuScreen"); levelSelectBackground = Content.Load<Texture2D>("ScreenBackgrounds/LevelSelectScreen"); helpSceneBackground = Content.Load<Texture2D>("ScreenBackgrounds/HelpScreen"); aboutSceneBackground = Content.Load<Texture2D>("ScreenBackgrounds/AboutScreen"); highScoreSceneBackground = Content.Load<Texture2D>("ScreenBackgrounds/HighScoreScreen"); howToPlaySceneBackground = Content.Load<Texture2D>("ScreenBackgrounds/ControlsScreen"); levelOverSceneBackground = Content.Load<Texture2D>("ScreenBackgrounds/LevelOverScreen"); gameOverSceneBackground = Content.Load<Texture2D>("ScreenBackgrounds/GameOverScreen"); //Create all scenes and add to the Components list startScene = new StartScene(this, spriteBatch, startSceneBackground); scenes.Add(startScene); actionScene = new ActionScene(this, spriteBatch, levelList[0]); currentLevel = 1; scenes.Add(actionScene); pauseMenuScene = new PauseMenuScene(this, spriteBatch, pauseMenuBackground); scenes.Add(pauseMenuScene); levelSelectScene = new LevelSelectScene(this, spriteBatch, levelSelectBackground, NUMBER_OF_LEVELS, Utilities.Utilities.CheckLevelProgression()); scenes.Add(levelSelectScene); helpScene = new HelpScene(this, spriteBatch, helpSceneBackground); scenes.Add(helpScene); aboutScene = new AboutScene(this, spriteBatch, aboutSceneBackground); scenes.Add(aboutScene); howToPlayScene = new HowToPlayScene(this, spriteBatch, howToPlaySceneBackground); scenes.Add(howToPlayScene); levelOverScene = new LevelOverScene(this, spriteBatch, levelOverSceneBackground, 0); scenes.Add(levelOverScene); gameOverMenuScene = new GameOverMenuScene(this, spriteBatch, gameOverSceneBackground, 0); scenes.Add(gameOverMenuScene); highScoreScene = new HighScoreScene(this, spriteBatch, highScoreSceneBackground); scenes.Add(highScoreScene); //Add each GameScene to the game's components foreach (GameScene gameScene in scenes) { this.Components.Add(gameScene); } //Display the home screen startScene.Show(); baseScene = startScene; enabledScene = startScene; #endregion }