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