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/MenuActions.cs | 208 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 208 insertions(+) create mode 100644 V3/Screens/MenuActions.cs (limited to 'V3/Screens/MenuActions.cs') diff --git a/V3/Screens/MenuActions.cs b/V3/Screens/MenuActions.cs new file mode 100644 index 0000000..6de9e15 --- /dev/null +++ b/V3/Screens/MenuActions.cs @@ -0,0 +1,208 @@ +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Media; +using V3.Camera; +using V3.Data; + +namespace V3.Screens +{ + /// + /// Provides common actions for the main and pause menu, like saving and + /// loading the game or removing and adding a screen to the screen stack. + /// + // ReSharper disable once ClassNeverInstantiated.Global + public sealed class MenuActions + { + private readonly Game mGame; + private readonly GraphicsDeviceManager mGraphicsDeviceManager; + private readonly IGameStateManager mGameStateManager; + private readonly IOptionsManager mOptionsManager; + private readonly ISaveGameManager mSaveGameManager; + private readonly IScreenManager mScreenManager; + private readonly IScreenFactory mScreenFactory; + private readonly CameraManager mCameraManager; + + /// + /// Creates a new menu actions instance. + /// + public MenuActions(Game game, GraphicsDeviceManager graphicsDeviceManager, + IGameStateManager gameStateManager, IOptionsManager optionsManager, + ISaveGameManager saveGameManager, IScreenManager screenManager, + IScreenFactory screenFactory, CameraManager cameraManager) + { + mGame = game; + mGraphicsDeviceManager = graphicsDeviceManager; + mGameStateManager = gameStateManager; + mOptionsManager = optionsManager; + mSaveGameManager = saveGameManager; + mScreenManager = screenManager; + mScreenFactory = screenFactory; + mCameraManager = cameraManager; + } + + /// + /// Checks whether it is possible to load a game, i. e. whether there + /// are save games. + /// + /// true if there are save games to load, false otherwise + /// + public bool CanLoadGame() + { + return mSaveGameManager.GetSaveGames().Count > 0; + } + + /// + /// Removes the given screen from the screen manager. + /// + /// the screen to remove + public void Close(IScreen screen) + { + // TODO: something like RemoveUntil + mScreenManager.RemoveScreen(screen); + } + + /// + /// Quits the game. + /// + public void Exit() + { + mGame.Exit(); + } + + public void LoadGame(ISaveGame saveGame) + { + mScreenManager.Clear(); + var gameScreen = mScreenFactory.CreateGameScreen(); + var gameState = saveGame.GameState; + mGameStateManager.LoadGameState(gameState); + gameScreen.SetFog(gameState.mFog); + gameScreen.SetAiState(gameState.mAiState); + mScreenManager.AddScreen(gameScreen); + mScreenManager.AddScreen(mScreenFactory.CreateHudScreen()); + } + + /// + /// Opens the main screen and removes all other screens. + /// + public void OpenMainScreen() + { + mScreenManager.Clear(); + mScreenManager.AddScreen(mScreenFactory.CreateMainScreen()); + } + + /// + /// Opens the options screen in the front. + /// + public void OpenOptionsScreen() + { + mScreenManager.AddScreen(mScreenFactory.CreateOptionsScreen()); + } + + public void OpenLoadScreen() + { + mScreenManager.AddScreen(mScreenFactory.CreateLoadScreen()); + } + + /// + /// Opens the pause screen in the front. + /// + public void OpenPauseScreen() + { + mScreenManager.AddScreen(mScreenFactory.CreatePauseScreen()); + } + + /// + /// Opens the death screen in the front. + /// + public void OpenDeathScreen() + { + mScreenManager.AddScreen(mScreenFactory.CreateDeathScreen()); + } + + /// + /// Opens the victory screen in the front. + /// + public void OpenVictoryScreen() + { + mScreenManager.AddScreen(mScreenFactory.CreateVictoryScreen()); + } + + /// + /// Opens the statistics screen in the front. + /// + public void OpenStatisticsScreen() + { + mScreenManager.AddScreen(mScreenFactory.CreateStatisticsScreen()); + } + + /// + /// Opens the achievements screen in the front. + /// + public void OpenAchievementsScreen() + { + mScreenManager.AddScreen(mScreenFactory.CreateAchievementsScreen()); + } + + /// + /// Opens the tech demo. + /// + public void OpenTechDemo() + { + mScreenManager.Clear(); + mScreenManager.AddScreen(mScreenFactory.CreaTechdemoScreen()); + mScreenManager.AddScreen(mScreenFactory.CreateHudScreen()); + } + + /// + /// Creates a new save game from the current game state. + /// + public void SaveGame() + { + var gameState = mGameStateManager.GetGameState(); + var gameScreen = mScreenManager.GetGameScreen(); + if (gameScreen != null) + { + gameState.mFog = gameScreen.GetFog(); + gameState.mAiState = gameScreen.GetAiState(); + } + mSaveGameManager.CreateSaveGame(gameState); + } + + /// + /// Apply the current graphics options. + /// + public void ApplyOptions() + { + mGraphicsDeviceManager.PreferredBackBufferWidth = mOptionsManager.Options.Resolution.X; + mGraphicsDeviceManager.PreferredBackBufferHeight = mOptionsManager.Options.Resolution.Y; + mGraphicsDeviceManager.IsFullScreen = mOptionsManager.Options.IsFullScreen; + mGraphicsDeviceManager.ApplyChanges(); + +#if NO_AUDIO +#else + MediaPlayer.Volume = mOptionsManager.Options.GetEffectiveVolume(); +#endif + } + + /// + /// Save the current graphics options. + /// + public void SaveOptions() + { + mOptionsManager.SaveOptions(); + } + + /// + /// Opens the game screen with a new game. + /// + public void StartNewGame() + { + mScreenManager.Clear(); + var gameScreen = mScreenFactory.CreateGameScreen(); + gameScreen.CreateInitialPopulation(); + mScreenManager.AddScreen(gameScreen); + mScreenManager.AddScreen(mScreenFactory.CreateHudScreen()); + if (mCameraManager.GetCamera() is CameraScrolling) + mCameraManager.GetCamera().Location = Vector2.Zero; + } + } +} -- cgit v1.2.1