//--------------------------------------------------------------------------------------------------------------------------------------------------- // // Copyright (C)2007 DarkWynter Studios. All rights reserved. // //--------------------------------------------------------------------------------------------------------------------------------------------------- // {Contact : darkwynter.com for licensing information //--------------------------------------------------------------------------------------------------------------------------------------------------- namespace DarkWynter.Engine.Menus { #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 using Menus; using DarkWynter.Engine.Menus.GameScreens; using NoName.Statics; /// /// Controls all of the menu screen and menu items /// public class MenuSystem { private Color _backColor = Color.TransparentBlack; public Color backColor { get { return _backColor; } set { _backColor = value; } } /// /// List of menu screens /// public List gameScreens = new List(); /// /// Constructor /// public MenuSystem() { //gameScreens.Add(new OpeningCreditScreen(Enums.MenuState.CREDIT_SCREEN)); // gameScreens.Add(new TitleScreen(Enums.MenuState.TITLE_SCREEN)); //menuScreens.Add(new GameSetup(Enums.EngineState.GAME_SETUP)); // gameScreens.Add(new InstructionScreen2(Enums.MenuState.INSTRUCT_1)); // gameScreens.Add(new InstructionScreen3(Enums.MenuState.INSTRUCT_2)); // gameScreens.Add(new InstructionScreen(Enums.MenuState.INSTRUCTION_SCREEN)); //menuScreens.Add(new GameSetup(Enums.EngineState.GAME_SETUP)); // gameScreens.Add(new LoadingScreen(Enums.MenuState.LOAD_LEVEL)); // gameScreens.Add(new PauseScreen(Enums.MenuState.GAME_PAUSE)); // gameScreens.Add(new GameOverScreen(Enums.MenuState.FINALIZE_G2LSTUFF)); LoadScreens(); } private void LoadScreens() { string fileName = "_xml\\MenuScreens.xml"; try { // Load the HUD Images, Text, and Values XmlDocument reader = new XmlDocument(); reader.Load(fileName); GenericGameScreen ggs; XmlNodeList allNodes = reader.ChildNodes; foreach (XmlNode eventNode in allNodes) { if (eventNode.Name == "MenuScreens") { XmlNodeList eventNodes = eventNode.ChildNodes; foreach (XmlNode node in eventNodes) { if (node.Name == "MenuScreen") { gameScreens.Add(ggs = new GenericGameScreen(node)); } } } } } catch (Exception e) { System.Diagnostics.Debug.WriteLine("Error reading xml"); throw e; } } /// /// Updates the controller and then the current active screen /// public virtual void Update() { for (int i = 0; i < gameScreens.Count; i++) { // Update appropriate menu screen if (NoName.Statics.Globals.menuState == gameScreens[i].GetEngineState()) { gameScreens[i].Update(); break; } } } /// /// Draws the appropriate screen /// /// SpriteBatch used to draw /// Current ScreenSaver public virtual void Draw(SpriteBatch spriteBatch) { NoName.Statics.Globals.graphics.GraphicsDevice.Clear(this.backColor); NoName.Statics.Globals.graphics.GraphicsDevice.Viewport = NoName.Statics.Globals.viewport; // Begin Sprite Batching for Menusystem spriteBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.BackToFront, SaveStateMode.None); //// Begin Screen Saver Wrapper //if (Statics_Engine.SystemSettings.screenSaverTimer.ElapsedMilliseconds > Statics_Engine.SystemSettings.ANTI_BURN_TIMER) //{ // screenSaver.AntiBurnScreenSaverBegin(spriteBatch); //} for (int i = 0; i < gameScreens.Count; i++) { // Update appropriate menu screen if (NoName.Statics.Globals.menuState == gameScreens[i].GetEngineState()) { gameScreens[i].Draw(spriteBatch); break; } } // End Screen Saver Wrapper //if (Statics_Engine.SystemSettings.screenSaverTimer.ElapsedMilliseconds > Statics_Engine.SystemSettings.ANTI_BURN_TIMER) //{ // screenSaver.AntiBurnScreenSaverEnd(spriteBatch); //} spriteBatch.End(); } } }