PauseScreen.cs 3.8 KB

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