//---------------------------------------------------------------------------------------------------------------------------------------------------
//
// Copyright (C)2007 DarkWynter Studios. All rights reserved.
//
//---------------------------------------------------------------------------------------------------------------------------------------------------
// {Contact : darkwynter.com for licensing information
//---------------------------------------------------------------------------------------------------------------------------------------------------
namespace DarkWynterEngine.Menus
{
#region Using Statements
using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
#endregion
using DarkWynterEngine.Audio;
using DarkWynterEngine.Globals;
using DarkWynterEngine.Controllers;
using DarkWynterEngine.ObjectLib;
///
/// Generic Game Screen.
///
public class GameScreen
{
///
/// Menu Object used by this screen.
///
protected GameMenu menu;
///
/// Stores the EngineState associated with this screen
///
protected Enums.EngineState engineState;
///
/// Background texture used by this screen.
///
protected Texture2D backgroundTexture;
///
/// Alpha value to draw this screen with.
///
protected float backgroundAlpha = 1.0f;
///
/// Game Screen constructor.
///
/// Tells this screen what EngineState it will run under.
public GameScreen(Enums.EngineState GameEngineState)
{
engineState = GameEngineState;
}
///
/// Returns the Engine State associated with this screen.
///
///
public Enums.EngineState GetEngineState()
{
return engineState;
}
///
/// Returns the game menu.
///
/// This screen's game menu.
public GameMenu GetMenu()
{
return menu;
}
///
/// Set the background texture
///
/// Texture used in background.
public void SetBackground(Texture2D backgroundTexture)
{
this.backgroundTexture = backgroundTexture;
backgroundAlpha = 1.0f;
}
///
/// Set the background texture with a specific alpha value.
///
/// Texture used in background.
/// Alpha value used to draw.
public void SetBackground(Texture2D backgroundTexture, float alpha)
{
this.backgroundTexture = backgroundTexture;
backgroundAlpha = alpha;
}
///
/// Draw this game screen.
///
/// SpriteBatch used to draw used to draw.
public virtual void Draw(SpriteBatch spriteBatch)
{
// First draw the background texture if it is not null
if (backgroundTexture != null)
{
spriteBatch.Draw(backgroundTexture,
new Rectangle(0, 0, Statics.RenderSettings.GAME_WINDOW_WIDTH, Statics.RenderSettings.GAME_WINDOW_HEIGHT),
new Color(255, 255, 255, (byte)(255 * backgroundAlpha)));
}
//now draw the menu elements
menu.Draw(spriteBatch);
}
///
/// Check to see if menu has been updated by user.
///
/// Current ObjectLibrary.
/// Menu controller used to update input.
public virtual void Update(ObjectLibrary objectLibrary)
{
bool nextGameState = false;
// Block double input
if (DarkWynterGame.menuController.menuInput.IsStartBackInputBlocked)
{
if (DarkWynterGame.menuController.menuInput.GetMenuStartBackReleased == true)
{
DarkWynterGame.menuController.SetBlockStartBackInput(false);
}
}
// Exit
if (DarkWynterGame.menuController.menuInput.GetMenuBackPressed)
{
Audio.MenuBack(); // Play a sound
if (Statics.SystemSettings.gameState != Enums.EngineState.EXIT)
{
Statics.SystemSettings.gameState--; // Exit
}
Statics.SystemSettings.screenSaverTimer.Reset();
Statics.SystemSettings.screenSaverTimer.Start();
}
// Start
else if (DarkWynterGame.menuController.menuInput.GetMenuStartPressed)
{
if (Statics.SystemSettings.gameState != Enums.EngineState.GAME_PAUSE)
{
nextGameState = true;
Statics.SystemSettings.gameState++;
}
Statics.SystemSettings.screenSaverTimer.Reset();
Statics.SystemSettings.screenSaverTimer.Start();
}
// Up
else if (DarkWynterGame.menuController.menuInput.GetMenuUp)
{
Audio.MenuUp();
GetMenu().PreviousMenuElement();
}
// Down
else if (DarkWynterGame.menuController.menuInput.GetMenuDown)
{
Audio.MenuDown();
GetMenu().NextMenuElement();
}
// Left
else if (DarkWynterGame.menuController.menuInput.GetMenuLeft)
{
UpdateMenuController(GetMenu().GetActiveMenuElement());
}
// Right
else if (DarkWynterGame.menuController.menuInput.GetMenuRight)
{
UpdateMenuController(GetMenu().GetActiveMenuElement());
}
// Commit Game and Player
if (Statics.SystemSettings.gameState == Enums.EngineState.LOAD_LEVEL && nextGameState)
{
XML.LoadLevelIndex();
}
}
///
/// Update the active element based on user input
///
/// Active menu element
/// Controller attached to this GameScreen
public void UpdateMenuController(GameMenuElement activeElement)
{
// OptionBox
if (activeElement.GetElementType() == Enums.MenuElementType.OPTION)
{
// Cast as option and change value
GameMenuOption option = (GameMenuOption)activeElement;
// If they pressed left, get previous option
if (DarkWynterGame.menuController.menuInput.GetMenuLeft)
{
Audio.MenuLeft();
option.PreviousOption();
}
// Or if they pressed right, get next option
else if (DarkWynterGame.menuController.menuInput.GetMenuRight)
{
Audio.MenuRight();
option.NextOption();
}
}
// ValueSlider
else if (activeElement.GetElementType() == Enums.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 (DarkWynterGame.menuController.menuInput.GetMenuLeft)
{
Audio.MenuLeft();
valueInput.Decrement();
}
// Or if they pressed right, increase it
else if (DarkWynterGame.menuController.menuInput.GetMenuRight)
{
Audio.MenuRight();
valueInput.Increment();
}
}
else if (activeElement.GetElementType() == Enums.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 (DarkWynterGame.menuController.menuInput.GetMenuLeft)
{
Audio.MenuLeft();
scroller.PreviousItem();
}
// Or if they pressed right, increase it
else if (DarkWynterGame.menuController.menuInput.GetMenuRight)
{
Audio.MenuRight();
scroller.NextItem();
}
}
}
}
}