From ced3d03bdb3ce866d832e03fb212865140905a9a Mon Sep 17 00:00:00 2001 From: Thomas Leyh Date: Sun, 24 Jul 2016 08:14:18 +0200 Subject: Add project files. --- V3/Screens/PauseScreen.cs | 140 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 V3/Screens/PauseScreen.cs (limited to 'V3/Screens/PauseScreen.cs') diff --git a/V3/Screens/PauseScreen.cs b/V3/Screens/PauseScreen.cs new file mode 100644 index 0000000..e7b679f --- /dev/null +++ b/V3/Screens/PauseScreen.cs @@ -0,0 +1,140 @@ +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(); + } + } +} -- cgit v1.2.1