//--------------------------------------------------------------------------------------------------------------------------------------------------- // // 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 Audio; using Globals; using ObjectLib; using Controllers; using Utilities; using Menus; using DarkWynter.Stream; using DarkWynter.Engine.Menus.GameScreens; using DarkWynter.Stream.UIInterfacing; using System.ComponentModel; using System.Windows.Forms; /// /// 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; } } /// /// Screen Saver Shader /// private ScreenSaver screenSaver; /// /// List of menu screens /// public List gameScreens = new List(); public List _gameScreens { get { return gameScreens; } set { gameScreens = value; } } /// /// Holds the menu state string for the menu system /// public static string menuState; /// /// Constructor /// public MenuSystem() { // ScreenSaver for menuSystem screenSaver = new ScreenSaver(); //gameScreens.Add(new SorryScreen(Enums_Engine.EngineState.NOT_SUPPORTED)); //gameScreens.Add(new OpeningCreditScreen(Enums_Engine.EngineState.CREDIT_SCREEN)); //gameScreens.Add(new TitleScreen(Enums_Engine.EngineState.TITLE_SCREEN)); //gameScreens.Add(new GameSetup(Enums_Engine.EngineState.GAME_SETUP)); //gameScreens.Add(new Cera1(Enums_Engine.EngineState.INSTRUCT_1)); //gameScreens.Add(new Cera2(Enums_Engine.EngineState.INSTRUCT_2)); //gameScreens.Add(new Cera3(Enums_Engine.EngineState.INSTRUCT_3)); //gameScreens.Add(new Cera4(Enums_Engine.EngineState.INSTRUCT_4)); //gameScreens.Add(new Cera5(Enums_Engine.EngineState.INSTRUCT_5)); //gameScreens.Add(new InstructionScreen(Enums_Engine.EngineState.INSTRUCTION_SCREEN)); //gameScreens.Add(new GameSetup(Enums_Engine.EngineState.GAME_SETUP)); //gameScreens.Add(new LoadingScreen(Enums_Engine.EngineState.LOAD_LEVEL)); //gameScreens.Add(new PauseScreen(Enums_Engine.EngineState.GAME_PAUSE)); //gameScreens.Add(new GameOverScreen(Enums_Engine.EngineState.FINALIZE_G2LSTUFF)); } /// /// /// /// XML Node for loading public virtual void Load(XmlNode node) { try { for (int x = 0; x < node.ChildNodes.Count; x++) { if (node.ChildNodes[x].Name == "menu") { gameScreens.Add(CreateGameScreen(node.ChildNodes[x].Attributes["name"].Value, new object[]{ Enum.Parse(typeof(Enums_Engine.EngineState), node.ChildNodes[x].Attributes["menuState"].Value) } )); } } } catch (Exception e) { MessageBox.Show(e.Message); DarkWynterEngine.ContentInstall_WarningMessage(); } } /// /// Creates an instance of a GameObject using GameObject constructor parameters. /// /// The string-literal class name of the GameObject. EG- "Terrain" /// Constructor parameters, usually empty or using the Load object. /// public static GameScreen CreateGameScreen(string objectName, object[] parameters) { GameScreen gameScreen = new GameScreen(); for (int i = 0; i < ObjectLibrary.types.Count; i++) { if (ObjectLibrary.types[i].Name == objectName) { try { gameScreen = (GameScreen)Activator.CreateInstance(ObjectLibrary.types[i], parameters); } catch (Exception e) { MessageBox.Show(e.Message); DarkWynterEngine.ContentInstall_WarningMessage(); throw new Exception("Error Loading GameScreen"); } } } return gameScreen; } /// /// Updates the controller and then the current active screen /// public virtual void Update(ObjectLibrary objectLibrary) { for (int i = 0; i < gameScreens.Count; i++) { // Update appropriate menu screen if (Statics_Engine.SystemSettings.gameState == gameScreens[i].GetEngineState()) { gameScreens[i].Update(objectLibrary); break; } } } /// /// Draws the appropriate screen /// /// SpriteBatch used to draw /// Current ScreenSaver public virtual void Draw(SpriteBatch spriteBatch) { Statics_Stream.RenderSettings.graphics.GraphicsDevice.Clear(this.backColor); Statics_Stream.RenderSettings.graphics.GraphicsDevice.Viewport = Statics_Stream.RenderSettings.defaultViewport; //if (spriteBatch.GraphicsDevice.IsDisposed) //{ // spriteBatch.Dispose(); // spriteBatch = new SpriteBatch(Statics_Stream.RenderSettings.graphics.GraphicsDevice); //} // Begin Sprite Batching for Menusystem spriteBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.BackToFront, SaveStateMode.None); for (int i = 0; i < gameScreens.Count; i++) { // Update appropriate menu screen if (Statics_Engine.SystemSettings.gameState == gameScreens[i].GetEngineState()) { gameScreens[i].Draw(spriteBatch); break; } } spriteBatch.End(); } } }