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