//--------------------------------------------------------------------------------------------------------------------------------------------------- // // Copyright (C)2007 DarkWynter Studios. All rights reserved. // //--------------------------------------------------------------------------------------------------------------------------------------------------- // {Contact : darkwynter.com for licensing information //--------------------------------------------------------------------------------------------------------------------------------------------------- namespace DarkWynter.Game.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; using DarkWynter.Engine; using DarkWynter.Engine.Audio; using DarkWynter.Engine.GameObjects; using DarkWynter.Engine.Globals; using DarkWynter.Engine.ObjectLib; using DarkWynter.Engine.Controllers; using DarkWynter.Engine.Menus; using DarkWynter.Stream; using GameObjects; #endregion /// /// The Pause Screen /// public class PauseScreen : GameScreen { private Texture2D hintsTexture; private GameMenu playerPauseMenu; /// /// Pause Screen constructor /// public PauseScreen(Enums_Engine.EngineState GameEngineState) :base(GameEngineState) { //Instantiate the GameMenu menu = new GameMenu("", 0, 0); playerPauseMenu = new GameMenu("Paused", 150, 30);//Statics_Engine.GAME_WINDOW_WIDTH / 2, Statics_Engine.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_Engine.SystemSettings.content.Load("Content/_textures/black"), 0.3f); //pauseScreen.SetHintsTexture(Statics_Engine.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_Engine.SystemSettings.enableShadowMap1) { ((GameMenuOption)playerPauseMenu.GetMenuElement("ShadowMap1")).SetCurrentIndex(0); } else { ((GameMenuOption)playerPauseMenu.GetMenuElement("ShadowMap1")).SetCurrentIndex(1); } if (Statics_Engine.SystemSettings.enableShadowMap2) { ((GameMenuOption)playerPauseMenu.GetMenuElement("ShadowMap2")).SetCurrentIndex(0); } else { ((GameMenuOption)playerPauseMenu.GetMenuElement("ShadowMap2")).SetCurrentIndex(1); } if (Statics_Engine.SystemSettings.enableTerrainBumpMapping) { ((GameMenuOption)playerPauseMenu.GetMenuElement("Terrain Bump Mapping")).SetCurrentIndex(0); } else { ((GameMenuOption)playerPauseMenu.GetMenuElement("Terrain Bump Mapping")).SetCurrentIndex(1); } if (Statics_Engine.SystemSettings.enableTerrainMultiTexturing) { ((GameMenuOption)playerPauseMenu.GetMenuElement("Terrain Multi-Texturing")).SetCurrentIndex(0); } else { ((GameMenuOption)playerPauseMenu.GetMenuElement("Terrain Multi-Texturing")).SetCurrentIndex(1); } if (Statics_Engine.SystemSettings.singleLightSource) { ((GameMenuOption)playerPauseMenu.GetMenuElement("Light Sources")).SetCurrentIndex(0); } else { ((GameMenuOption)playerPauseMenu.GetMenuElement("Light Sources")).SetCurrentIndex(1); } if (Statics_Engine.SystemSettings.music) { ((GameMenuOption)playerPauseMenu.GetMenuElement("Music")).SetCurrentIndex(0); } else { ((GameMenuOption)playerPauseMenu.GetMenuElement("Music")).SetCurrentIndex(1); } if (Statics_Engine.SystemSettings.soundFX) { ((GameMenuOption)playerPauseMenu.GetMenuElement("Sound Effects")).SetCurrentIndex(0); } else { ((GameMenuOption)playerPauseMenu.GetMenuElement("Sound Effects")).SetCurrentIndex(1); } } /// /// Menu start button pressed method /// /// Object Library public override void MenuStart(ObjectLibrary objectLibrary) { Audio.MenuStart(); //Commit menu changes Commit(objectLibrary); //Resume the game Statics_Engine.SystemSettings.gameState = Enums_Engine.EngineState.GAME_MODE; Statics_Engine.PlayerSettings.playerThatPaused = -1; Statics_Engine.SystemSettings.screenSaverTimer.Reset(); Statics_Engine.SystemSettings.screenSaverTimer.Start(); } /// /// Menu back button pressed method /// public override void MenuBack() { // No going back from pause menu } /// /// 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_Engine.PlayerSettings.playerThatPaused].controlsInverted = true; } else { objectLibrary.humans[Statics_Engine.PlayerSettings.playerThatPaused].controlsInverted = false; } // Player rumble option = (GameMenuOption)playerPauseMenu.GetMenuElement("Rumble"); if (option.GetActiveOption() == "Yes") { ((Human)objectLibrary.humans[Statics_Engine.PlayerSettings.playerThatPaused]).rumbleEnabled = true; } else { ((Human)objectLibrary.humans[Statics_Engine.PlayerSettings.playerThatPaused]).rumbleEnabled = false; } option = (GameMenuOption)playerPauseMenu.GetMenuElement("ShadowMap1"); if (option.GetActiveOption() == "Yes") { Statics_Engine.SystemSettings.enableShadowMap1 = true; } else { Statics_Engine.SystemSettings.enableShadowMap1 = false; } option = (GameMenuOption)playerPauseMenu.GetMenuElement("ShadowMap2"); if (option.GetActiveOption() == "Yes") { Statics_Engine.SystemSettings.enableShadowMap2 = true; } else { Statics_Engine.SystemSettings.enableShadowMap2 = false; } option = (GameMenuOption)playerPauseMenu.GetMenuElement("Terrain Bump Mapping"); if (option.GetActiveOption() == "Yes") { Statics_Engine.SystemSettings.enableTerrainBumpMapping = true; } else { Statics_Engine.SystemSettings.enableTerrainBumpMapping = false; } option = (GameMenuOption)playerPauseMenu.GetMenuElement("Terrain Multi-Texturing"); if (option.GetActiveOption() == "Yes") { Statics_Engine.SystemSettings.enableTerrainMultiTexturing = true; } else { Statics_Engine.SystemSettings.enableTerrainMultiTexturing = false; } option = (GameMenuOption)playerPauseMenu.GetMenuElement("Light Sources"); if (option.GetActiveOption() == "1") { Statics_Engine.SystemSettings.singleLightSource = true; option = (GameMenuOption)playerPauseMenu.GetMenuElement("ShadowMap2"); option.NextOption(); //Statics_Engine.enableShadowMap2 = false; } else { Statics_Engine.SystemSettings.singleLightSource = false; } option = (GameMenuOption)playerPauseMenu.GetMenuElement("Music"); if (option.GetActiveOption() == "On") { Statics_Engine.SystemSettings.music = true; } else { Statics_Engine.SystemSettings.music = false; } option = (GameMenuOption)playerPauseMenu.GetMenuElement("Sound Effects"); if (option.GetActiveOption() == "On") { Statics_Engine.SystemSettings.soundFX = true; } else { Statics_Engine.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_Stream.RenderSettings.defaultViewport; base.Draw(spriteBatch); // Now draw the menu for THIS player if (Statics_Engine.PlayerSettings.playerThatPaused != -1) { //Figure out how many players there are and if we need to shrink the font if (Statics_Engine.SystemSettings.TOTAL_PLAYERS > 2) { //use smaller font playerPauseMenu.SetFont(Statics_Stream.Fonts.ComicSansSmall); } else { //use bigger font playerPauseMenu.SetFont(Statics_Stream.Fonts.ComicSans); } spriteBatch.End(); graphicsDevice.Viewport = Statics_Stream.RenderSettings.cameraList[Statics_Engine.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); } } } }