//---------------------------------------------------------------------------------------------------------------------------------------------------
//
// 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);
}
}
}
}