//--------------------------------------------------------------------------------------------------------------------------------------------------- // // Copyright (C)2007 DarkWynter Studios. All rights reserved. // //--------------------------------------------------------------------------------------------------------------------------------------------------- // {Contact : darkwynter.com for licensing information //--------------------------------------------------------------------------------------------------------------------------------------------------- namespace ElementalGame.Menus { #region Using Statements using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Audio; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Storage; #endregion using DarkWynterEngine; using DarkWynterEngine.Audio; using DarkWynterEngine.GameObjects; using DarkWynterEngine.Globals; using DarkWynterEngine.UserInterface; using DarkWynterEngine.ObjectLib; using DarkWynterEngine.Controllers; using DarkWynterEngine.Menus; /// /// The Pause Screen /// public class PauseScreen : GameScreen { private Texture2D hintsTexture; private GameMenu playerPauseMenu; /// /// Pause Screen constructor /// public PauseScreen(Enums.EngineState GameEngineState) :base(GameEngineState) { //Instantiate the GameMenu menu = new GameMenu("", 0, 0); playerPauseMenu = new GameMenu("Paused", 150, 30);//Statics.GAME_WINDOW_WIDTH / 2, Statics.GAME_WINDOW_HEIGHT / 2); playerPauseMenu.SetDrawMenuTitle(false); playerPauseMenu.AddMenuOption("Invert rotation", "No", "Yes"); playerPauseMenu.AddMenuOption("Rumble", "Yes", "No"); playerPauseMenu.AddMenuOption("ShadowMap1", "Yes", "No"); playerPauseMenu.AddMenuOption("ShadowMap2", "Yes", "No"); playerPauseMenu.AddMenuOption("Terrain Bump Mapping", "Yes", "No"); playerPauseMenu.AddMenuOption("Terrain Multi-Texturing", "Yes", "No"); //playerPauseMenu.AddMenuOption("Number Of Terrain Textures", "4", "3", "2"); playerPauseMenu.AddMenuOption("Light Sources", "2", "1"); playerPauseMenu.AddMenuOption("Music", "On", "Off"); playerPauseMenu.AddMenuOption("Sound Effects", "On", "Off"); SetBackground(Statics.SystemSettings.content.Load("Content/_textures/black"), 0.3f); //pauseScreen.SetHintsTexture(Statics.SystemSettings.content.Load("_textures/black")); SetDefaults(); } /// /// Set pause options for current player. /// /// Player that paused. public void SetPlayerOptions(Human player) { if (player.controlsInverted) { ((GameMenuOption)playerPauseMenu.GetMenuElement("Invert rotation")).SetCurrentIndex(1); } else { ((GameMenuOption)playerPauseMenu.GetMenuElement("Invert rotation")).SetCurrentIndex(0); } if (player.rumbleEnabled) { ((GameMenuOption)playerPauseMenu.GetMenuElement("Rumble")).SetCurrentIndex(0); } else { ((GameMenuOption)playerPauseMenu.GetMenuElement("Rumble")).SetCurrentIndex(1); } } /// /// Reset default values. /// public void SetDefaults() { // ShadowMap1 if (Statics.SystemSettings.enableShadowMap1) { ((GameMenuOption)playerPauseMenu.GetMenuElement("ShadowMap1")).SetCurrentIndex(0); } else { ((GameMenuOption)playerPauseMenu.GetMenuElement("ShadowMap1")).SetCurrentIndex(1); } if (Statics.SystemSettings.enableShadowMap2) { ((GameMenuOption)playerPauseMenu.GetMenuElement("ShadowMap2")).SetCurrentIndex(0); } else { ((GameMenuOption)playerPauseMenu.GetMenuElement("ShadowMap2")).SetCurrentIndex(1); } if (Statics.SystemSettings.enableTerrainBumpMapping) { ((GameMenuOption)playerPauseMenu.GetMenuElement("Terrain Bump Mapping")).SetCurrentIndex(0); } else { ((GameMenuOption)playerPauseMenu.GetMenuElement("Terrain Bump Mapping")).SetCurrentIndex(1); } if (Statics.SystemSettings.enableTerrainMultiTexturing) { ((GameMenuOption)playerPauseMenu.GetMenuElement("Terrain Multi-Texturing")).SetCurrentIndex(0); } else { ((GameMenuOption)playerPauseMenu.GetMenuElement("Terrain Multi-Texturing")).SetCurrentIndex(1); } if (Statics.SystemSettings.singleLightSource) { ((GameMenuOption)playerPauseMenu.GetMenuElement("Light Sources")).SetCurrentIndex(0); } else { ((GameMenuOption)playerPauseMenu.GetMenuElement("Light Sources")).SetCurrentIndex(1); } if (Statics.SystemSettings.music) { ((GameMenuOption)playerPauseMenu.GetMenuElement("Music")).SetCurrentIndex(0); } else { ((GameMenuOption)playerPauseMenu.GetMenuElement("Music")).SetCurrentIndex(1); } if (Statics.SystemSettings.soundFX) { ((GameMenuOption)playerPauseMenu.GetMenuElement("Sound Effects")).SetCurrentIndex(0); } else { ((GameMenuOption)playerPauseMenu.GetMenuElement("Sound Effects")).SetCurrentIndex(1); } } /// /// Check for updates to pause menu. /// /// Current ObjectLibrary. /// Menu controller used to update input. public override void Update(ObjectLibrary objectLibrary) { // GAME PAUSE ----------------------------------- Controller controller = DarkWynterGame.playerController; controller.Update(Enums.AttackType.NONE); if (controller.menuInput.GetStartPressed) { Audio.MenuStart(); //Commit menu changes Commit(objectLibrary); //Resume the game Statics.SystemSettings.gameState = Enums.EngineState.GAME_MODE; Statics.PlayerSettings.playerThatPaused = -1; //reset mouse cursor controller.ResetMouse(); Statics.SystemSettings.screenSaverTimer.Reset(); Statics.SystemSettings.screenSaverTimer.Start(); } // If they pressed Up then get the previous element else if (DarkWynterGame.menuController.menuInput.GetMenuUp) { Audio.MenuUp(); playerPauseMenu.PreviousMenuElement(); } // Or if they pressed down, get the next one else if (DarkWynterGame.menuController.menuInput.GetMenuDown) { Audio.MenuDown(); playerPauseMenu.NextMenuElement(); } else if (DarkWynterGame.menuController.menuInput.GetMenuLeft) { UpdateMenuController(playerPauseMenu.GetActiveMenuElement()); } else if (DarkWynterGame.menuController.menuInput.GetMenuRight) { UpdateMenuController(playerPauseMenu.GetActiveMenuElement()); } } /// /// Commit changes to the pause menu. /// /// ObjectLibrary containing player that paused. public void Commit(ObjectLibrary objectLibrary) { GameMenuOption option; // Text Option // Player controller setup option = (GameMenuOption)playerPauseMenu.GetMenuElement("Invert rotation"); if (option.GetActiveOption() == "Yes") { objectLibrary.humans[Statics.PlayerSettings.playerThatPaused].controlsInverted = true; } else { objectLibrary.humans[Statics.PlayerSettings.playerThatPaused].controlsInverted = false; } // Player rumble option = (GameMenuOption)playerPauseMenu.GetMenuElement("Rumble"); if (option.GetActiveOption() == "Yes") { objectLibrary.humans[Statics.PlayerSettings.playerThatPaused].rumbleEnabled = true; } else { objectLibrary.humans[Statics.PlayerSettings.playerThatPaused].rumbleEnabled = false; } option = (GameMenuOption)playerPauseMenu.GetMenuElement("ShadowMap1"); if (option.GetActiveOption() == "Yes") { Statics.SystemSettings.enableShadowMap1 = true; } else { Statics.SystemSettings.enableShadowMap1 = false; } option = (GameMenuOption)playerPauseMenu.GetMenuElement("ShadowMap2"); if (option.GetActiveOption() == "Yes") { Statics.SystemSettings.enableShadowMap2 = true; } else { Statics.SystemSettings.enableShadowMap2 = false; } option = (GameMenuOption)playerPauseMenu.GetMenuElement("Terrain Bump Mapping"); if (option.GetActiveOption() == "Yes") { Statics.SystemSettings.enableTerrainBumpMapping = true; } else { Statics.SystemSettings.enableTerrainBumpMapping = false; } option = (GameMenuOption)playerPauseMenu.GetMenuElement("Terrain Multi-Texturing"); if (option.GetActiveOption() == "Yes") { Statics.SystemSettings.enableTerrainMultiTexturing = true; } else { Statics.SystemSettings.enableTerrainMultiTexturing = false; } option = (GameMenuOption)playerPauseMenu.GetMenuElement("Light Sources"); if (option.GetActiveOption() == "1") { Statics.SystemSettings.singleLightSource = true; option = (GameMenuOption)playerPauseMenu.GetMenuElement("ShadowMap2"); option.NextOption(); //Statics.enableShadowMap2 = false; } else { Statics.SystemSettings.singleLightSource = false; } option = (GameMenuOption)playerPauseMenu.GetMenuElement("Music"); if (option.GetActiveOption() == "On") { Statics.SystemSettings.music = true; } else { Statics.SystemSettings.music = false; } option = (GameMenuOption)playerPauseMenu.GetMenuElement("Sound Effects"); if (option.GetActiveOption() == "On") { Statics.SystemSettings.soundFX = true; } else { Statics.SystemSettings.soundFX = false; } } /// /// Draw the pause menu. /// /// Spritebatch used to draw. /// Graphics device to draw. public void Draw(SpriteBatch spriteBatch, GraphicsDevice graphicsDevice) { graphicsDevice.Viewport = Statics.RenderSettings.defaultViewport; base.Draw(spriteBatch); // Now draw the menu for THIS player if (Statics.PlayerSettings.playerThatPaused != -1) { //Figure out how many players there are and if we need to shrink the font if (Statics.SystemSettings.TOTAL_PLAYERS > 2) { //use smaller font playerPauseMenu.SetFont(FontWriter.ComicSansSmall); } else { //use bigger font playerPauseMenu.SetFont(FontWriter.ComicSans); } spriteBatch.End(); graphicsDevice.Viewport = Statics.RenderSettings.cameraList[Statics.PlayerSettings.playerThatPaused].viewport; spriteBatch.Begin(SpriteBlendMode.AlphaBlend); //draw hints background if (hintsTexture != null) { spriteBatch.Draw(hintsTexture, new Rectangle(0,0,graphicsDevice.Viewport.Width, graphicsDevice.Viewport.Height), Color.White); } playerPauseMenu.Draw(spriteBatch); spriteBatch.End(); //restart spritebatch for later spriteBatch.Begin(SpriteBlendMode.AlphaBlend); } } } }