//---------------------------------------------------------------------------------------------------------------------------------------------------
//
// Copyright (C)2007 DarkWynter Studios. All rights reserved.
//
//---------------------------------------------------------------------------------------------------------------------------------------------------
// {License Information: Creative Commons}
//---------------------------------------------------------------------------------------------------------------------------------------------------
namespace ElementalGame
{
#region Using Statements
using System;
using System.Collections.Generic;
using System.Diagnostics;
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 System.Threading;
using System.Xml;
#endregion
public class MenuSystem
{
public TitleScreen titleScreen; // Idle Screen
public ControlsScreen controlsScreen;
public GameSetup gameSetup;
public LevelSetup levelSetup;
public PlayerSetup playerSetup;
public GameOverScreen gameOverScreen;
public PauseScreen pauseScreen;
public LoadingScreen loadScreen;
public SorryScreen sorryScreen;
public ConfirmExitScreen confirmExitScreen;
public CreditsScreen creditsScreen;
public Scene1 scene1;
public Scene2 scene2;
public Scene3 scene3;
public Scene4 scene4;
public Scene5 scene5;
public Texture2D storyModeTexture;
public Texture2D deathMatchTexture;
public Texture2D survivalTexture;
public Texture2D lastmanTexture;
public int playerNumber = 0;
private int currentLevelIter = 0;
private int currentPlayerIter = -1;
private struct DirectionInput
{
public bool menuUp;
public bool menuDown;
public bool menuLeft;
public bool menuRight;
}
public static volatile bool TERRAIN_DEMO_DONE = true;
private Effect effect;
private Texture2D whiteTexture;
public MenuSystem()
{
titleScreen = new TitleScreen(); // Idle Screen
controlsScreen = new ControlsScreen();
gameSetup = new GameSetup();
levelSetup = new LevelSetup();
playerSetup = new PlayerSetup();
gameOverScreen = new GameOverScreen();
pauseScreen = new PauseScreen();
loadScreen = new LoadingScreen();
sorryScreen = new SorryScreen();
confirmExitScreen = new ConfirmExitScreen();
creditsScreen = new CreditsScreen();
scene1 = new Scene1();
scene2 = new Scene2();
scene3 = new Scene3();
scene4 = new Scene4();
scene5 = new Scene5();
effect = ElementalGame.content.Load("Shaders/ElementalGPU");
whiteTexture = ElementalGame.content.Load("_textures/whitesquare");
}
public void CheckMenuChange(GraphicsDeviceManager graphics,
ContentManager content,
GameController Player1Controller,
GameFlow gameFlow)
{
// This was for threading the terrain load but its fast enough now
// If thread is null
//if (loadTerrainThread == null)
//{
// //loadTerrainThread = new Thread(new ParameterizedThreadStart(gameFlow.LoadTerrainDemo));
// TERRAIN_DEMO_DONE = true;
//}
// Update Controller Input
Player1Controller.UpdateControllers();
DirectionInput input = new DirectionInput();
input.menuUp = Player1Controller.GetMenuUp();
input.menuDown = Player1Controller.GetMenuDown();
input.menuLeft = Player1Controller.GetMenuLeft();
input.menuRight = Player1Controller.GetMenuRight();
// Check if the FPS counter was toggled
if (Player1Controller.GetFPSToggleButton())
{
ElementalGame.enableFPSDisplay = !ElementalGame.enableFPSDisplay;
}
if (ElementalGame.gameState == ElementalGame.GameState.NOT_SUPPORTED)
{
//just check for quit
if (Player1Controller.GetBackPressed())
{
// Exit
Audio.MenuBack(); // Play a sound
ElementalGame.gameState = ElementalGame.GameState.EXIT; // Exit
}
}
else if (ElementalGame.gameState == ElementalGame.GameState.CONTROL_SCREEN)
{
CheckControlsScreen(graphics, content, Player1Controller, gameFlow, input);
}
else if (ElementalGame.gameState == ElementalGame.GameState.GAME_OVER)
{
CheckEndGameScreen(graphics, content, Player1Controller, gameFlow, input);
}
else if (ElementalGame.gameState == ElementalGame.GameState.GAME_PAUSE)
{
CheckPauseScreen(graphics, content, Player1Controller, gameFlow, input);
}
else if (ElementalGame.gameState == ElementalGame.GameState.GAME_SETUP)
{
CheckGameSetupScreen(graphics, content, Player1Controller, gameFlow, input);
}
else if (ElementalGame.gameState == ElementalGame.GameState.PLAYER_SETUP)
{
CheckPlayerSetupScreen(graphics, content, Player1Controller, gameFlow, input);
}
else if (ElementalGame.gameState == ElementalGame.GameState.LEVEL_SETUP)
{
CheckLevelSetupScreen(graphics, content, Player1Controller, gameFlow, input);
}
else if (ElementalGame.gameState == ElementalGame.GameState.TITLE_SCREEN)
{
CheckTitleScreen(graphics, content, Player1Controller, gameFlow, input);
}
else if (ElementalGame.gameState == ElementalGame.GameState.CONFIRM_EXIT)
{
CheckConfirmExitScreen(graphics, content, Player1Controller, gameFlow, input);
}
else if (ElementalGame.gameState == ElementalGame.GameState.CREDITS)
{
CheckCreditsScreen(graphics, content, Player1Controller, gameFlow, input);
}
else if (ElementalGame.gameState == ElementalGame.GameState.GAME_MODE)
{
CheckGameModeScreen(graphics, content, Player1Controller, gameFlow, input);
}
}
private void CheckControlsScreen(GraphicsDeviceManager graphics,
ContentManager content,
GameController Player1Controller,
GameFlow gameFlow,
DirectionInput input)
{
// Exit
if (Player1Controller.GetMenuBackPressed())
{
Audio.MenuBack(); // Play a sound
ElementalGame.gameState = ElementalGame.GameState.TITLE_SCREEN; // Exit
ElementalGame.jiggler.Reset();
ElementalGame.jiggler.Start();
}
// Start
if (Player1Controller.GetMenuStartPressed())
{
// Play a sound
//Audio.PlayTitleSong();
// Load Player Demo
//gameFlow.objectLibrary = new ObjectLibrary(XML.SystemSettings.MAX_HUMANS);
gameFlow.objectLibrary.LoadDarkMatter();
gameFlow.objectLibrary.LoadMatter();
// Switch Menus
ElementalGame.gameState = ElementalGame.GameState.GAME_SETUP;
Logging.addEventString("Starting game past intro");
ElementalGame.jiggler.Reset();
ElementalGame.jiggler.Start();
}
Player1Controller.AnyButtonPressed();
}
private void CheckConfirmExitScreen(GraphicsDeviceManager graphics,
ContentManager content,
GameController Player1Controller,
GameFlow gameFlow,
DirectionInput input)
{
// CONFIRM EXIT SCREEN ------------------------------------
// Exit
if (Player1Controller.GetMenuBackPressed())
{
Audio.MenuBack(); // Play a sound
ElementalGame.gameState = ElementalGame.GameState.CREDITS;
}
// Start
else if (Player1Controller.GetMenuStartPressed())
{
// Play a sound
Audio.MenuStart();
ElementalGame.gameState = ElementalGame.GameState.TITLE_SCREEN;
ElementalGame.jiggler.Reset();
ElementalGame.jiggler.Start();
}
}
private void CheckCreditsScreen(GraphicsDeviceManager graphics,
ContentManager content,
GameController Player1Controller,
GameFlow gameFlow,
DirectionInput input)
{
// CREDITS SCREEN ------------------------------------
// Exit
if (Player1Controller.GetMenuBackPressed())
{
Audio.MenuBack(); // Play a sound
ElementalGame.gameState = ElementalGame.GameState.EXIT;
}
}
private void CheckTitleScreen(GraphicsDeviceManager graphics,
ContentManager content,
GameController Player1Controller,
GameFlow gameFlow,
DirectionInput input)
{
// TITLE SCREEN ------------------------------------
// Exit
if (Player1Controller.GetMenuBackPressed())
{
Audio.MenuBack(); // Play a sound
ElementalGame.gameState = ElementalGame.GameState.CONFIRM_EXIT; // Exit
ElementalGame.jiggler.Reset();
ElementalGame.jiggler.Start();
}
// Start
else if (Player1Controller.GetMenuStartPressed())
{
// Show controls
ElementalGame.gameState = ElementalGame.GameState.CONTROL_SCREEN;
ElementalGame.jiggler.Reset();
ElementalGame.jiggler.Start();
}
Player1Controller.AnyButtonPressed();
}
private void CheckGameSetupScreen(GraphicsDeviceManager graphics,
ContentManager content,
GameController Player1Controller,
GameFlow gameFlow,
DirectionInput input)
{
if (Player1Controller.IsStartBackInputBlocked())
{
if (Player1Controller.GetMenuStartBackReleased() == true)
{
Player1Controller.SetBlockStartBackInput(false);
}
}
int numControllersBefore = XML.SystemSettings.TOTAL_PLAYERS;
//reset the controllers for all players.. start over
gameFlow.objectLibrary.DeinitializeHumans();
//load the number of gamepads connected to set default # players
ElementalGame.CheckForControllers(4, gameFlow);
if (XML.SystemSettings.TOTAL_PLAYERS != numControllersBefore)
{
((GameMenuValueInput)gameSetup.GetMenu().GetMenuElement("# Players:")).SetRange(1, XML.SystemSettings.TOTAL_PLAYERS);
((GameMenuValueInput)gameSetup.GetMenu().GetMenuElement("# Players:")).SetValue(XML.SystemSettings.TOTAL_PLAYERS);
}
// Load Game ------------------------------------
if (Player1Controller.GetMenuBackPressed())
{
Audio.MenuBack(); // Play a sound
ElementalGame.gameState = ElementalGame.GameState.TITLE_SCREEN; // Switch Modes
ElementalGame.jiggler.Reset();
ElementalGame.jiggler.Start();
}
else if (Player1Controller.GetMenuStartPressed())
{
// Play a sound
Audio.MenuStart();
ElementalGame.jiggler.Reset();
ElementalGame.jiggler.Start();
// Load Game Data
GameSetupCommit(gameFlow.objectLibrary);
gameFlow.LoadGame();
XML.LoadLevelIndex();
//If story mode we don't need Level select
if (GameFlow.gameType == GameFlow.GameType.STORY_MODE)
{
// Load next CutScene
GameRules.storyElement = GameRules.StoryElement.CUTSCENE;
// Clear keys
gameFlow.objectLibrary.humans[0].numberOfKeysFound = 0;
// -------------------- START CUTSCENES HERE -------------------------
scene1 = new Scene1();
scene2 = new Scene2();
scene3 = new Scene3();
scene4 = new Scene4();
scene5 = new Scene5();
Audio.PlayLevelSong("Scene1");
scene1.StartCutScene();
ElementalGame.gameState = ElementalGame.GameState.GAME_MODE;
}
else
{
// Load Terrain Demo
levelSetup.GetMapNameLabel().SetTitle("Map: " + XML.levelInfo[currentLevelIter].name);
levelSetup.GetDescriptionLabel().SetTitle(XML.levelInfo[currentLevelIter].description);
gameFlow.LoadTerrainDemo(XML.levelInfo[currentLevelIter].filepath);//graphics, levelInfo[currentLevelIter].filepath, content);
// Switch modes
ElementalGame.gameState = ElementalGame.GameState.LEVEL_SETUP;
}
}
// If they pressed Up then get the previous element
else if (input.menuUp)
{
Audio.MenuUp();
gameSetup.GetMenu().PreviousMenuElement();
}
// Or if they pressed down, get the next one
else if (input.menuDown)
{
Audio.MenuDown();
gameSetup.GetMenu().NextMenuElement();
}
else if (input.menuLeft)
{
CheckMenuDirectionals(gameSetup.GetMenu().GetActiveMenuElement(), gameFlow, input);
}
else if (input.menuRight)
{
CheckMenuDirectionals(gameSetup.GetMenu().GetActiveMenuElement(), gameFlow, input);
}
if (gameSetup.GetMenu().GetActiveMenuElement().GetTitle() == "Game type:")
{
GameMenuOption option = (GameMenuOption)gameSetup.GetMenu().GetActiveMenuElement();
//need to change the settings depending on what is available here
if (option.GetActiveOption() == "Story Mode")
{
gameSetup.GetMenu().GetMenuElement("# Players:").Hide();
gameSetup.GetMenu().GetMenuElement("Max kills:").Hide();
gameSetup.GetMenu().GetMenuElement("Difficulty:").Show();
gameSetup.GetMenu().GetMenuElement("Bots:").Hide();
gameSetup.GetMenu().GetMenuElement("Bot intelligence:").Show();
gameSetup.SetBackground(storyModeTexture);
}
else if (option.GetActiveOption() == "Last man standing")
{
gameSetup.GetMenu().GetMenuElement("# Players:").Show();
gameSetup.GetMenu().GetMenuElement("Max kills:").Hide();
gameSetup.GetMenu().GetMenuElement("Difficulty:").Hide();
gameSetup.GetMenu().GetMenuElement("Bots:").Show();
gameSetup.GetMenu().GetMenuElement("Bot intelligence:").Show();
gameSetup.SetBackground(lastmanTexture);
}
else if (option.GetActiveOption() == "Deathmatch")
{
gameSetup.GetMenu().GetMenuElement("# Players:").Show();
gameSetup.GetMenu().GetMenuElement("Max kills:").Show();
gameSetup.GetMenu().GetMenuElement("Difficulty:").Hide();
gameSetup.GetMenu().GetMenuElement("Bots:").Show();
gameSetup.GetMenu().GetMenuElement("Bot intelligence:").Show();
gameSetup.SetBackground(deathMatchTexture);
}
else if (option.GetActiveOption() == "Survival")
{
gameSetup.GetMenu().GetMenuElement("# Players:").Show();
gameSetup.GetMenu().GetMenuElement("Max kills:").Hide();
gameSetup.GetMenu().GetMenuElement("Difficulty:").Show();
gameSetup.GetMenu().GetMenuElement("Bots:").Hide();
gameSetup.GetMenu().GetMenuElement("Bot intelligence:").Show();
gameSetup.SetBackground(survivalTexture);
}
}
Player1Controller.AnyButtonPressed();
}
private void CheckLevelSetupScreen(GraphicsDeviceManager graphics,
ContentManager content,
GameController Player1Controller,
GameFlow gameFlow,
DirectionInput input)
{
if (Player1Controller.IsStartBackInputBlocked())
{
if (Player1Controller.GetMenuStartBackReleased() == true)
{
Player1Controller.SetBlockStartBackInput(false);
}
}
// Load Level ------------------------------------
if (Player1Controller.GetMenuBackPressed())
{
Audio.MenuBack();
ElementalGame.gameState = ElementalGame.GameState.GAME_SETUP;
ElementalGame.loadDarkMatter = true;
}
else if (Player1Controller.GetMenuStartPressed())
{
Audio.MenuStart();
//Set it to load mode
ElementalGame.gameState = ElementalGame.GameState.LOAD_LEVEL;
ElementalGame.drewLoadScreen = false;
}
// If they pressed Up then get the previous element
else if (input.menuUp)
{
Audio.MenuUp();
currentLevelIter--;
if (currentLevelIter < 0)
{
currentLevelIter = XML.levelInfo.Count - 1;
}
levelSetup.GetMapNameLabel().SetTitle("Map: " + XML.levelInfo[currentLevelIter].name);
levelSetup.GetDescriptionLabel().SetTitle(XML.levelInfo[currentLevelIter].description);
//Highlight the right glyph
((GameMenuImageScroller)levelSetup.GetDisplayMenu().GetMenuElement(0)).PreviousItem();
if (TERRAIN_DEMO_DONE == false)
{
//must first stop thread..
//loadTerrainThread.Abort();
//while (loadTerrainThread.IsAlive) ;
}
gameFlow.LoadTerrainDemo(XML.levelInfo[currentLevelIter].filepath);//graphics, levelInfo[currentLevelIter].filepath, content);
}
// Or if they pressed down, get the next one
else if (input.menuDown)
{
Audio.MenuDown();
currentLevelIter++;
if (currentLevelIter > XML.levelInfo.Count - 1)
{
currentLevelIter = 0;
}
levelSetup.GetMapNameLabel().SetTitle("Map: " + XML.levelInfo[currentLevelIter].name);
levelSetup.GetDescriptionLabel().SetTitle(XML.levelInfo[currentLevelIter].description);
((GameMenuImageScroller)levelSetup.GetDisplayMenu().GetMenuElement(0)).NextItem();
gameFlow.LoadTerrainDemo(XML.levelInfo[currentLevelIter].filepath);//raphics, levelInfo[currentLevelIter].filepath, content);
}
}
private void CheckPlayerSetupScreen(GraphicsDeviceManager graphics,
ContentManager content,
GameController Player1Controller,
GameFlow gameFlow,
DirectionInput input)
{
// Load Player ------------------------------------
if (playerNumber < XML.SystemSettings.TOTAL_PLAYERS)
{
GameController controller = gameFlow.objectLibrary.humans[playerNumber].playerController;
controller.UpdateControllers();
if (controller.IsStartBackInputBlocked())
{
if (controller.GetMenuStartPressed() == false && controller.GetMenuBackPressed() == false)
{
if (controller.GetMenuStartBackReleased() == true)
{
controller.SetBlockStartBackInput(false);
}
}
}
input.menuUp = controller.GetMenuUp();
input.menuDown = controller.GetMenuDown();
input.menuLeft = controller.GetMenuLeft();
input.menuRight = controller.GetMenuRight();
if (controller.GetMenuBackPressed())
{
Audio.MenuBack(); // Play a sound
ElementalGame.gameState = ElementalGame.GameState.GAME_SETUP; // Switch Modes
}
else if (controller.GetMenuStartPressed() && !controller.IsStartBackInputBlocked())
{
// Play a sound
Audio.MenuUp();
controller.SetBlockStartBackInput(true);
// Load Player Data
PlayerSetupCommit(gameFlow.objectLibrary, playerNumber);
}
else if (input.menuLeft)
{
Audio.MenuPlayerShuffleLeft();
CheckMenuDirectionals(playerSetup.GetMenu().GetActiveMenuElement(), gameFlow, input);
GameMenuImageScroller scroller = (GameMenuImageScroller)playerSetup.GetMenu().GetMenuElement(0);
currentPlayerIter = scroller.GetActiveIndex();
if (currentPlayerIter >= 0)
{
gameFlow.objectLibrary.humans[playerNumber].LoadPlayer(XML.playerInfo[currentPlayerIter]);
}
playerSetup.GetDiagnosisDisplay().RandomIndex();
}
else if (input.menuRight)
{
Audio.MenuPlayerShuffleRight();
CheckMenuDirectionals(playerSetup.GetMenu().GetActiveMenuElement(), gameFlow, input);
GameMenuImageScroller scroller = (GameMenuImageScroller)playerSetup.GetMenu().GetMenuElement(0);
currentPlayerIter = scroller.GetActiveIndex();
if (currentPlayerIter < XML.playerInfo.Count)
{
gameFlow.objectLibrary.humans[playerNumber].LoadPlayer(XML.playerInfo[currentPlayerIter]);
}
playerSetup.GetDiagnosisDisplay().RandomIndex();
}
}
}
private void CheckGameModeScreen(GraphicsDeviceManager graphics,
ContentManager content,
GameController Player1Controller,
GameFlow gameFlow,
DirectionInput input)
{
// if NOT in a cutscene
if (GameFlow.gameType == GameFlow.GameType.STORY_MODE)
{
if (GameRules.storyElement == GameRules.StoryElement.CUTSCENE)
{
if (Player1Controller.GetSkipButton())
{
//skip it
if (GameRules.cutSceneIndex == 0)
{
scene1.Skip();
}
if (GameRules.cutSceneIndex == 1)
{
scene2.Skip();
}
if (GameRules.cutSceneIndex == 2)
{
scene3.Skip();
}
if (GameRules.cutSceneIndex == 3)
{
scene4.Skip();
}
if (GameRules.cutSceneIndex == 4)
{
scene5.Skip();
}
}
//don't run the rest
return;
}
}
// GAME MODE ------------------------------------
if (Player1Controller.IsStartBackInputBlocked())
{
if (Player1Controller.GetMenuStartBackReleased() == true)
{
Player1Controller.SetBlockStartBackInput(false);
}
}
for (int i = 0; i < gameFlow.objectLibrary.humans.Count; i++)
{
GameController controller = gameFlow.objectLibrary.humans[i].playerController;
controller.UpdateControllers();
if (controller.IsStartBackInputBlocked())
{
if (controller.GetMenuStartPressed() == false && controller.GetMenuBackPressed() == false)
{
if (controller.GetMenuStartBackReleased() == true)
{
controller.SetBlockStartBackInput(false);
}
}
}
// If in game and user presses back
if (controller.GetBackPressed())
{
gameFlow.StopAllSoundsAndRumble();
Player1Controller.SetBlockStartBackInput(true);
Audio.MenuBack();
Audio.PlayTitleSong();
ElementalGame.gameState = ElementalGame.GameState.GAME_SETUP;
ElementalGame.jiggler.Reset();
ElementalGame.jiggler.Start();
}
else if (controller.GetStartPressed() && !controller.IsStartBackInputBlocked())
{
Audio.MenuStart();
//Pause the game
ElementalGame.gameState = ElementalGame.GameState.GAME_PAUSE;
ElementalGame.playerThatPaused = i;
pauseScreen.SetPlayerOptions(gameFlow.objectLibrary.humans[i]);
ElementalGame.jiggler.Reset();
ElementalGame.jiggler.Start();
}
}
}
private void CheckPauseScreen(GraphicsDeviceManager graphics,
ContentManager content,
GameController Player1Controller,
GameFlow gameFlow,
DirectionInput input)
{
// GAME PAUSE -----------------------------------
GameController controller = gameFlow.objectLibrary.humans[ElementalGame.playerThatPaused].playerController;
controller.UpdateControllers();
input.menuUp = controller.GetMenuUp();
input.menuDown = controller.GetMenuDown();
input.menuLeft = controller.GetMenuLeft();
input.menuRight = controller.GetMenuRight();
if (controller.GetStartPressed())
{
Audio.MenuStart();
//Commit menu changes
PauseMenuCommit(gameFlow.objectLibrary, ElementalGame.playerThatPaused);
//Resume the game
ElementalGame.gameState = ElementalGame.GameState.GAME_MODE;
ElementalGame.playerThatPaused = -1;
//reset mouse cursor
controller.JustUnPaused();
ElementalGame.jiggler.Reset();
ElementalGame.jiggler.Start();
}
// If they pressed Up then get the previous element
else if (input.menuUp)
{
Audio.MenuUp();
pauseScreen.GetPlayerPauseMenu().PreviousMenuElement();
}
// Or if they pressed down, get the next one
else if (input.menuDown)
{
Audio.MenuDown();
pauseScreen.GetPlayerPauseMenu().NextMenuElement();
}
else if (input.menuLeft)
{
CheckMenuDirectionals(pauseScreen.GetPlayerPauseMenu().GetActiveMenuElement(), gameFlow, input);
}
else if (input.menuRight)
{
CheckMenuDirectionals(pauseScreen.GetPlayerPauseMenu().GetActiveMenuElement(), gameFlow, input);
}
controller.AnyButtonPressed();
}
private void CheckEndGameScreen(GraphicsDeviceManager graphics,
ContentManager content,
GameController Player1Controller,
GameFlow gameFlow,
DirectionInput input)
{
// GAME OVER ------------------------------------
// Wait for input and go back to title
if (Player1Controller.GetMenuStartPressed())
{
Audio.PlayTitleSong();
ElementalGame.gameState = ElementalGame.GameState.GAME_SETUP;
ElementalGame.jiggler.Reset();
ElementalGame.jiggler.Start();
}
// If the player presses back they can quit here
if (Player1Controller.GetMenuBackPressed())
{
Audio.MenuBack();
ElementalGame.gameState = ElementalGame.GameState.TITLE_SCREEN;
ElementalGame.jiggler.Reset();
ElementalGame.jiggler.Start();
}
else if (input.menuUp)
{
}
else if (input.menuDown)
{
}
else if (input.menuLeft)
{
}
else if (input.menuRight)
{
}
}
private void CheckMenuDirectionals(GameMenuElement activeElement, GameFlow gameFlow, DirectionInput input)
{
// OptionBox
if (activeElement.GetElementType() == MenuElementType.OPTION)
{
// Cast as option and change value
GameMenuOption option = (GameMenuOption)activeElement;
// If they pressed left, get previous option
if (input.menuLeft)
{
Audio.MenuLeft();
option.PreviousOption();
}
// Or if they pressed right, get next option
else if (input.menuRight)
{
Audio.MenuRight();
option.NextOption();
}
}
// ValueSlider
else if (activeElement.GetElementType() == MenuElementType.VALUE)
{
// Cast as ValueInput type and change value
GameMenuValueInput valueInput = (GameMenuValueInput)activeElement;
//int activeIndex = playerSetup.GetMenu().GetActiveIndex();
// If they pressed left, decrease the value
if (input.menuLeft)
{
Audio.MenuLeft();
valueInput.Decrement();
}
// Or if they pressed right, increase it
else if(input.menuRight)
{
Audio.MenuRight();
valueInput.Increment();
}
}
else if (activeElement.GetElementType() == MenuElementType.IMAGE_SCROLL)
{
// Cast as ValueInput type and change value
GameMenuImageScroller scroller = (GameMenuImageScroller)activeElement;
//int activeIndex = playerSetup.GetMenu().GetActiveIndex();
// If they pressed left, decrease the value
if (input.menuLeft)
{
Audio.MenuLeft();
scroller.PreviousItem();
}
// Or if they pressed right, increase it
else if (input.menuRight)
{
Audio.MenuRight();
scroller.NextItem();
}
}
}
private void GameSetupCommit(ObjectLibrary objectLibrary)
{
GameMenuOption option; // Text Option
GameMenuValueInput value; // Numeric Option
// Number of players that will play
value = (GameMenuValueInput)gameSetup.GetMenu().GetMenuElement("# Players:");
GameFlow.numberOfHumansActive = value.GetValue();
// Game type selection
option = (GameMenuOption)gameSetup.GetMenu().GetMenuElement("Game type:");
if (option.GetActiveOption() == "Story Mode")
{
GameFlow.gameType = GameFlow.GameType.STORY_MODE;
}
else if (option.GetActiveOption() == "Last man standing")
{
GameFlow.gameType = GameFlow.GameType.LAST_MAN_STANDING;
}
else if (option.GetActiveOption() == "Deathmatch")
{
GameFlow.gameType = GameFlow.GameType.POINT_DEATHMATCH;
}
else if (option.GetActiveOption() == "Survival")
{
GameFlow.gameType = GameFlow.GameType.SURVIVAL;
}
// Max number of kills to win
value = (GameMenuValueInput)gameSetup.GetMenu().GetMenuElement("Max kills:");
GameFlow.maxNumberOfKills = value.GetValue();
// Number of AI Bots
if (option.GetActiveOption() != "Survival" && option.GetActiveOption() != "Story Mode")
{
value = (GameMenuValueInput)gameSetup.GetMenu().GetMenuElement("Bots:");
GameFlow.numberOfBots = value.GetValue();
}
else
{
string difficultyLevel = ((GameMenuOption)gameSetup.GetMenu().GetMenuElement("Difficulty:")).GetActiveOption();
if (difficultyLevel == "Lamer")
{
GameFlow.numberOfBots = 3;
}
else if (difficultyLevel == "Average Joe")
{
GameFlow.numberOfBots = 6;
}
else if (difficultyLevel == "Uber Mental")
{
GameFlow.numberOfBots = 10;
}
}
// Bot intelligence (1= dumb, 10= super smart)
value = (GameMenuValueInput)gameSetup.GetMenu().GetMenuElement("Bot intelligence:");
GameFlow.botIntelligence = value.GetValue();
}
public void LevelSetupCommit(ObjectLibrary objectLibrary)
{
objectLibrary.currentLevelXmlFile = XML.levelInfo[currentLevelIter].filepath;
}
private void PauseMenuCommit(ObjectLibrary objectLibrary, int playerIndex)
{
GameMenuOption option; // Text Option
// Player controller setup
option = (GameMenuOption)pauseScreen.GetPlayerPauseMenu().GetMenuElement("Invert rotation");
if (option.GetActiveOption() == "Yes")
{
objectLibrary.humans[playerIndex].controlsInverted = true;
}
else
{
objectLibrary.humans[playerIndex].controlsInverted = false;
}
// Player rumble
option = (GameMenuOption)pauseScreen.GetPlayerPauseMenu().GetMenuElement("Rumble");
if (option.GetActiveOption() == "Yes")
{
objectLibrary.humans[playerIndex].rumbleEnabled = true;
}
else
{
objectLibrary.humans[playerIndex].rumbleEnabled = false;
}
option = (GameMenuOption)pauseScreen.GetPlayerPauseMenu().GetMenuElement("ShadowMap1");
if (option.GetActiveOption() == "Yes")
{
XML.SystemSettings.enableShadowMap1 = true;
}
else
{
XML.SystemSettings.enableShadowMap1 = false;
ShaderParameters.shadowTexture1.SetValue(whiteTexture);
}
option = (GameMenuOption)pauseScreen.GetPlayerPauseMenu().GetMenuElement("ShadowMap2");
if (option.GetActiveOption() == "Yes")
{
XML.SystemSettings.enableShadowMap2 = true;
}
else
{
XML.SystemSettings.enableShadowMap2 = false;
ShaderParameters.shadowTexture2.SetValue(whiteTexture);
}
option = (GameMenuOption)pauseScreen.GetPlayerPauseMenu().GetMenuElement("Terrain Bump Mapping");
if (option.GetActiveOption() == "Yes")
{
XML.SystemSettings.enableTerrainBumpMapping = true;
}
else
{
XML.SystemSettings.enableTerrainBumpMapping = false;
}
option = (GameMenuOption)pauseScreen.GetPlayerPauseMenu().GetMenuElement("Terrain Multi-Texturing");
if (option.GetActiveOption() == "Yes")
{
XML.SystemSettings.enableTerrainMultiTexturing = true;
}
else
{
XML.SystemSettings.enableTerrainMultiTexturing = false;
}
//option = (GameMenuOption)pauseScreen.GetPlayerPauseMenu().GetMenuElement("Number Of Terrain Textures");
//if (option.GetActiveOption() == "4")
//{
// ElementalGame.numberOfTerrainTextures = 4;
//}
//else if (option.GetActiveOption() == "3")
//{
// ElementalGame.numberOfTerrainTextures = 3;
//}
//else
//{
// ElementalGame.numberOfTerrainTextures = 2;
//}
option = (GameMenuOption)pauseScreen.GetPlayerPauseMenu().GetMenuElement("Light Sources");
if (option.GetActiveOption() == "1")
{
XML.SystemSettings.singleLightSource = true;
option = (GameMenuOption)pauseScreen.GetPlayerPauseMenu().GetMenuElement("ShadowMap2");
option.NextOption();
//ElementalGame.enableShadowMap2 = false;
}
else
{
XML.SystemSettings.singleLightSource = false;
}
option = (GameMenuOption)pauseScreen.GetPlayerPauseMenu().GetMenuElement("Music");
if (option.GetActiveOption() == "On")
{
XML.SystemSettings.music = true;
}
else
{
XML.SystemSettings.music = false;
}
option = (GameMenuOption)pauseScreen.GetPlayerPauseMenu().GetMenuElement("Sound Effects");
if (option.GetActiveOption() == "On")
{
XML.SystemSettings.soundFX = true;
}
else
{
XML.SystemSettings.soundFX = false;
}
}
private void PlayerSetupCommit(ObjectLibrary objectLibrary, int playerIndex)
{
switch (playerIndex)
{
case 0:
{
// Player 1 Color Select
objectLibrary.humans[0].SetDiffuseRed(255);
objectLibrary.humans[0].SetDiffuseGreen(255);
objectLibrary.humans[0].SetDiffuseBlue(255);
objectLibrary.humans[0].SetDiffuseAlpha(255);
playerSetup.GetMenu().SetTitle("Player 2");
break;
}
case 1:
{
// Player 2 Color Select
objectLibrary.humans[1].SetDiffuseRed(255);
objectLibrary.humans[1].SetDiffuseGreen(255);
objectLibrary.humans[1].SetDiffuseBlue(255);
objectLibrary.humans[1].SetDiffuseAlpha(255);
playerSetup.GetMenu().SetTitle("Player 3");
break;
}
case 2:
{
// Player 3 Color Select
objectLibrary.humans[2].SetDiffuseRed(255);
objectLibrary.humans[2].SetDiffuseGreen(255);
objectLibrary.humans[2].SetDiffuseBlue(255);
objectLibrary.humans[2].SetDiffuseAlpha(255);
playerSetup.GetMenu().SetTitle("Player 4");
break;
}
case 3:
{
// Player 4 Color Select
objectLibrary.humans[3].SetDiffuseRed(255);
objectLibrary.humans[3].SetDiffuseGreen(255);
objectLibrary.humans[3].SetDiffuseBlue(255);
objectLibrary.humans[3].SetDiffuseAlpha(255);
break;
}
}
// Player Character Select
if (playerNumber < XML.SystemSettings.TOTAL_PLAYERS - 1)
{
playerNumber++;
ElementalGame.currentPlayerIndex = playerNumber;
playerSetup.GetPlayerSelection().SetCurrentIndex(0);
}
else
{
ElementalGame.gameState = ElementalGame.GameState.GAME_MODE;
playerNumber = 0;
ElementalGame.currentPlayerIndex = playerNumber;
playerSetup.GetMenu().SetTitle("Player 1");
}
}
}
}