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/OptionsScreen.cs | 197 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 197 insertions(+) create mode 100644 V3/Screens/OptionsScreen.cs (limited to 'V3/Screens/OptionsScreen.cs') diff --git a/V3/Screens/OptionsScreen.cs b/V3/Screens/OptionsScreen.cs new file mode 100644 index 0000000..b23e1fe --- /dev/null +++ b/V3/Screens/OptionsScreen.cs @@ -0,0 +1,197 @@ +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Content; +using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework.Input; +using Ninject; +using V3.Camera; +using V3.Data; +using V3.Input; +using V3.Widgets; + +namespace V3.Screens +{ + /// + /// The screen for the options menu. + /// + // ReSharper disable once ClassNeverInstantiated.Global + public sealed class OptionsScreen : AbstractScreen, IInitializable + { + private readonly ContentManager mContentManager; + private readonly IMenu mMenu; + private readonly IOptionsManager mOptionsManager; + private readonly MenuActions mMenuActions; + private readonly WidgetFactory mWidgetFactory; + + private Texture2D mRectangle; + private Button mButtonBack; + private SelectButton mButtonSize; + private SelectButton mButtonFullscreen; + private SelectButton mButtonCamera; + private SelectButton mButtonDebug; + private SelectButton mButtonMute; + private SelectButton mButtonVolume; + private Button mButtonApply; + + /// + /// Creates a new options screen. + /// + public OptionsScreen(ContentManager contentManager, FormMenu menu, + IOptionsManager optionsManager, MenuActions menuActions, + WidgetFactory widgetFactory) + : base(false, true) + { + mContentManager = contentManager; + mMenu = menu; + mOptionsManager = optionsManager; + mMenuActions = menuActions; + mWidgetFactory = widgetFactory; + } + + public void Initialize() + { + mRectangle = mContentManager.Load("Sprites/WhiteRectangle"); + + mButtonBack = mWidgetFactory.CreateButton("Zurück"); + mButtonApply = mWidgetFactory.CreateButton("Bestätigen"); + mButtonSize = mWidgetFactory.CreateSelectButton(); + foreach (var resolution in Options.Resolutions) + { + mButtonSize.Values.Add(GetResolutionString(resolution)); + } + mButtonSize.SelectedIndex = Options.Resolutions.IndexOf(mOptionsManager.Options.Resolution); + mButtonFullscreen = mWidgetFactory.CreateSelectButton(new[] { "aus", "an" }); + mButtonFullscreen.SelectedIndex = mOptionsManager.Options.IsFullScreen ? 1 : 0; + mButtonCamera = mWidgetFactory.CreateSelectButton(); + Options.CameraTypes.ForEach(t => mButtonCamera.Values.Add(GetCameraTypeString(t))); + mButtonCamera.SelectedIndex = Options.CameraTypes.IndexOf(mOptionsManager.Options.CameraType); + mButtonDebug = mWidgetFactory.CreateSelectButton(); + Options.DebugModes.ForEach(m => mButtonDebug.Values.Add(GetDebugModeString(m))); + mButtonDebug.SelectedIndex = Options.DebugModes.IndexOf(mOptionsManager.Options.DebugMode); + mButtonMute = mWidgetFactory.CreateSelectButton(new[] { "aus", "an" }); + mButtonMute.SelectedIndex = mOptionsManager.Options.IsMuted ? 0 : 1; + mButtonVolume = mWidgetFactory.CreateSelectButton(); + foreach (var volume in Options.Volumes) + { + mButtonVolume.Values.Add(GetVolumeString(volume)); + } + mButtonVolume.SelectedIndex = Options.Volumes.IndexOf(mOptionsManager.Options.Volume); + + mMenu.Widgets.Add(mWidgetFactory.CreateEmptyWidget()); + mMenu.Widgets.Add(mButtonBack); + mMenu.Widgets.Add(mWidgetFactory.CreateLabel("Auflösung")); + mMenu.Widgets.Add(mButtonSize); + mMenu.Widgets.Add(mWidgetFactory.CreateLabel("Fullscreen")); + mMenu.Widgets.Add(mButtonFullscreen); + mMenu.Widgets.Add(mWidgetFactory.CreateLabel("Kamera")); + mMenu.Widgets.Add(mButtonCamera); + mMenu.Widgets.Add(mWidgetFactory.CreateLabel("Debug")); + mMenu.Widgets.Add(mButtonDebug); + mMenu.Widgets.Add(mWidgetFactory.CreateLabel("Sound")); + mMenu.Widgets.Add(mButtonMute); + mMenu.Widgets.Add(mWidgetFactory.CreateLabel("Lautstärke")); + mMenu.Widgets.Add(mButtonVolume); + mMenu.Widgets.Add(mWidgetFactory.CreateEmptyWidget()); + mMenu.Widgets.Add(mButtonApply); + } + + 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) + { + var backgroundRectangle = new Rectangle((int)mMenu.Position.X, + (int)mMenu.Position.Y, (int)mMenu.Size.X, (int)mMenu.Size.Y); + backgroundRectangle.X -= 30; + backgroundRectangle.Y -= 30; + backgroundRectangle.Width += 60; + backgroundRectangle.Height += 60; + + spriteBatch.Begin(); + spriteBatch.Draw(mRectangle, backgroundRectangle, Color.LightGray); + spriteBatch.End(); + + mMenu.Draw(spriteBatch); + } + + public override void Update(GameTime gameTime) + { + if (mButtonBack.IsClicked) + { + mMenuActions.Close(this); + } + else if (mButtonApply.IsClicked) + { + UpdateOptions(); + mMenuActions.SaveOptions(); + mMenuActions.ApplyOptions(); + } + + mMenu.Update(); + } + + private void UpdateOptions() + { + mOptionsManager.Options.IsFullScreen = mButtonFullscreen.SelectedIndex != 0; + mOptionsManager.Options.DebugMode = Options.DebugModes[mButtonDebug.SelectedIndex]; + mOptionsManager.Options.Resolution = Options.Resolutions[mButtonSize.SelectedIndex]; + mOptionsManager.Options.CameraType = Options.CameraTypes[mButtonCamera.SelectedIndex]; + mOptionsManager.Options.IsMuted = mButtonMute.SelectedIndex == 0; + mOptionsManager.Options.Volume = Options.Volumes[mButtonVolume.SelectedIndex]; + } + + private static string GetCameraTypeString(CameraType cameraType) + { + switch (cameraType) + { + case CameraType.Centered: + return "Zentriert"; + case CameraType.Scrolling: + return "Schiebend"; + default: + return "Unkown"; + } + } + + private static string GetDebugModeString(DebugMode debugMode) + { + switch (debugMode) + { + case DebugMode.Off: + return "Aus"; + case DebugMode.Fps: + return "FPS Zähler"; + case DebugMode.Full: + return "An"; + default: + return "Unknown"; + } + } + + private static string GetResolutionString(Point resolution) + { + return $"{resolution.X}x{resolution.Y}"; + } + + private static string GetVolumeString(int volume) + { + return $"{volume} %"; + } + } +} -- cgit v1.2.1