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