PauseScreen.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. //-----------------------------------------------------------------------------
  2. // PauseScreen.cs
  3. //
  4. // Microsoft XNA Community Game Platform
  5. // Copyright (C) Microsoft Corporation. All rights reserved.
  6. //-----------------------------------------------------------------------------
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Linq;
  10. using System.Text;
  11. using GameStateManagement;
  12. using Microsoft.Xna.Framework;
  13. //using Microsoft.Xna.Framework.Net; // Not available in MonoGame 3.8
  14. namespace CatapultGame
  15. {
  16. class PauseScreen : MenuScreen
  17. {
  18. GameScreen backgroundScreen;
  19. Player human;
  20. Player computer;
  21. bool prevHumanIsActive;
  22. bool prevCompuerIsActive;
  23. public PauseScreen(GameScreen backgroundScreen, Player human, Player computer)
  24. : base(String.Empty)
  25. {
  26. IsPopup = true;
  27. this.backgroundScreen = backgroundScreen;
  28. // Create our menu entries.
  29. MenuEntry startGameMenuEntry = new MenuEntry("Return");
  30. MenuEntry exitMenuEntry = new MenuEntry("Quit Game");
  31. // Hook up menu event handlers.
  32. startGameMenuEntry.Selected += StartGameMenuEntrySelected;
  33. exitMenuEntry.Selected += OnCancel;
  34. // Add entries to the menu.
  35. MenuEntries.Add(startGameMenuEntry);
  36. MenuEntries.Add(exitMenuEntry);
  37. this.human = human;
  38. this.computer = computer;
  39. // Preserve the old state of the game
  40. prevHumanIsActive = this.human.Catapult.IsActive;
  41. prevCompuerIsActive = this.computer.Catapult.IsActive;
  42. // Pause the game logic progress
  43. this.human.Catapult.IsActive = false;
  44. this.computer.Catapult.IsActive = false;
  45. AudioManager.PauseResumeSounds(false);
  46. }
  47. protected override void UpdateMenuEntryLocations()
  48. {
  49. base.UpdateMenuEntryLocations();
  50. foreach (var entry in MenuEntries)
  51. {
  52. Vector2 position = entry.Position;
  53. position.Y += 60;
  54. entry.Position = position;
  55. }
  56. }
  57. /// <summary>
  58. /// Handles "Return" menu item selection
  59. /// </summary>
  60. /// <param name="sender"></param>
  61. /// <param name="e"></param>
  62. void StartGameMenuEntrySelected(object sender, EventArgs e)
  63. {
  64. human.Catapult.IsActive = prevHumanIsActive;
  65. computer.Catapult.IsActive = prevCompuerIsActive;
  66. if (!(human as Human).isDragging)
  67. AudioManager.PauseResumeSounds(true);
  68. else
  69. {
  70. (human as Human).ResetDragState();
  71. AudioManager.StopSounds();
  72. }
  73. backgroundScreen.ExitScreen();
  74. ExitScreen();
  75. }
  76. /// <summary>
  77. /// Handles "Exit" menu item selection
  78. /// </summary>
  79. ///
  80. protected override void OnCancel(PlayerIndex playerIndex)
  81. {
  82. // Tear down our network session
  83. /* // Networking disabled in MonoGame 3.8
  84. NetworkSession session = ScreenManager.Game.Services.GetService (typeof(NetworkSession)) as NetworkSession;
  85. if (session != null) {
  86. if (session.AllGamers.Count == 1) {
  87. session.EndGame();
  88. }
  89. session.Dispose();
  90. ScreenManager.Game.Services.RemoveService(typeof(NetworkSession));
  91. }
  92. */
  93. AudioManager.StopSounds();
  94. ScreenManager.AddScreen(new MainMenuScreen(), null);
  95. ExitScreen();
  96. }
  97. }
  98. }