using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Ninject;
using V3.Input;
using V3.Widgets;
namespace V3.Screens
{
///
/// The screen for the pause menu.
///
// ReSharper disable once ClassNeverInstantiated.Global
public sealed class PauseScreen : AbstractScreen, IInitializable
{
private readonly ContentManager mContentManager;
private readonly GraphicsDeviceManager mGraphicsDeviceManager;
private readonly IMenu mMenu;
private readonly MenuActions mMenuActions;
private readonly WidgetFactory mWidgetFactory;
private Texture2D mRectangle;
private Button mButtonBack;
private Button mButtonSave;
private Button mButtonLoad;
private Button mButtonOptions;
private Button mButtonStatistics;
private Button mButtonAchievements;
private Button mButtonMain;
private Button mButtonExit;
///
/// Creates a new pause screen.
///
public PauseScreen(ContentManager contentManager,
GraphicsDeviceManager graphicsDeviceManager, VerticalMenu menu,
MenuActions menuActions, WidgetFactory widgetFactory)
: base(false, true)
{
mContentManager = contentManager;
mGraphicsDeviceManager = graphicsDeviceManager;
mMenu = menu;
mMenuActions = menuActions;
mWidgetFactory = widgetFactory;
}
public void Initialize()
{
mRectangle = mContentManager.Load("Sprites/WhiteRectangle");
mButtonBack = mWidgetFactory.CreateButton("Zurück zum Spiel");
mButtonSave = mWidgetFactory.CreateButton("Spiel speichern");
mButtonLoad = mWidgetFactory.CreateButton("Spiel laden");
mButtonLoad.IsEnabled = mMenuActions.CanLoadGame();
mButtonStatistics = mWidgetFactory.CreateButton("Statistiken");
mButtonAchievements = mWidgetFactory.CreateButton("Erfolge");
mButtonOptions = mWidgetFactory.CreateButton("Optionen");
mButtonMain = mWidgetFactory.CreateButton("Hauptmenü");
mButtonExit = mWidgetFactory.CreateButton("Spiel schließen");
mMenu.Widgets.Add(mButtonBack);
mMenu.Widgets.Add(mButtonSave);
mMenu.Widgets.Add(mButtonLoad);
mMenu.Widgets.Add(mButtonOptions);
mMenu.Widgets.Add(mButtonStatistics);
mMenu.Widgets.Add(mButtonAchievements);
mMenu.Widgets.Add(mButtonMain);
mMenu.Widgets.Add(mButtonExit);
}
public override bool HandleKeyEvent(IKeyEvent keyEvent)
{
if (keyEvent.KeyState == KeyState.Down && keyEvent.Key == Keys.Escape)
mMenuActions.Close(this);
return true;
}
public override bool HandleMouseEvent(IMouseEvent mouseEvent)
{
mMenu.HandleMouseEvent(mouseEvent);
return true;
}
///
/// Draws this object using the given sprite batch.
///
/// a snapshot of the game time
/// the sprite batch to use for drawing
/// this object
public override void Draw(GameTime gameTime, SpriteBatch spriteBatch)
{
spriteBatch.Begin();
spriteBatch.Draw(mRectangle, mGraphicsDeviceManager.GraphicsDevice.Viewport.Bounds, Color.Black * 0.7f);
spriteBatch.End();
mMenu.Draw(spriteBatch);
}
public override void Update(GameTime gameTime)
{
if (mButtonBack.IsClicked)
{
mMenuActions.Close(this);
}
else if (mButtonSave.IsClicked)
{
mMenuActions.SaveGame();
mMenuActions.Close(this);
}
else if (mButtonLoad.IsClicked)
{
mMenuActions.OpenLoadScreen();
}
else if (mButtonOptions.IsClicked)
{
mMenuActions.OpenOptionsScreen();
}
else if (mButtonStatistics.IsClicked)
{
mMenuActions.OpenStatisticsScreen();
}
else if (mButtonAchievements.IsClicked)
{
mMenuActions.OpenAchievementsScreen();
}
else if (mButtonMain.IsClicked)
{
mMenuActions.OpenMainScreen();
}
else if (mButtonExit.IsClicked)
{
mMenuActions.Exit();
}
mMenu.Update();
}
}
}