2
0

PauseMenuScreen.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. #region File Description
  2. //-----------------------------------------------------------------------------
  3. // PauseMenuScreen.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 Microsoft.Xna.Framework;
  11. using Microsoft.Xna.Framework.Net;
  12. #endregion
  13. namespace NetworkStateManagement
  14. {
  15. /// <summary>
  16. /// The pause menu comes up over the top of the game,
  17. /// giving the player options to resume or quit.
  18. /// </summary>
  19. class PauseMenuScreen : MenuScreen
  20. {
  21. #region Fields
  22. NetworkSession networkSession;
  23. #endregion
  24. #region Initialization
  25. /// <summary>
  26. /// Constructor.
  27. /// </summary>
  28. public PauseMenuScreen (NetworkSession networkSession)
  29. : base(Resources.Paused)
  30. {
  31. this.networkSession = networkSession;
  32. // Add the Resume Game menu entry.
  33. MenuEntry resumeGameMenuEntry = new MenuEntry (Resources.ResumeGame);
  34. resumeGameMenuEntry.Selected += OnCancel;
  35. MenuEntries.Add (resumeGameMenuEntry);
  36. if (networkSession == null) {
  37. // If this is a single player game, add the Quit menu entry.
  38. MenuEntry quitGameMenuEntry = new MenuEntry (Resources.QuitGame);
  39. quitGameMenuEntry.Selected += QuitGameMenuEntrySelected;
  40. MenuEntries.Add (quitGameMenuEntry);
  41. } else {
  42. // If we are hosting a network game, add the Return to Lobby menu entry.
  43. if (networkSession.IsHost) {
  44. MenuEntry lobbyMenuEntry = new MenuEntry (Resources.ReturnToLobby);
  45. lobbyMenuEntry.Selected += ReturnToLobbyMenuEntrySelected;
  46. MenuEntries.Add (lobbyMenuEntry);
  47. }
  48. // Add the End/Leave Session menu entry.
  49. string leaveEntryText = networkSession.IsHost ? Resources.EndSession :
  50. Resources.LeaveSession;
  51. MenuEntry leaveSessionMenuEntry = new MenuEntry (leaveEntryText);
  52. leaveSessionMenuEntry.Selected += LeaveSessionMenuEntrySelected;
  53. MenuEntries.Add (leaveSessionMenuEntry);
  54. }
  55. }
  56. #endregion
  57. #region Handle Input
  58. /// <summary>
  59. /// Event handler for when the Quit Game menu entry is selected.
  60. /// </summary>
  61. void QuitGameMenuEntrySelected (object sender, PlayerIndexEventArgs e)
  62. {
  63. MessageBoxScreen confirmQuitMessageBox =
  64. new MessageBoxScreen (Resources.ConfirmQuitGame);
  65. confirmQuitMessageBox.Accepted += ConfirmQuitMessageBoxAccepted;
  66. ScreenManager.AddScreen (confirmQuitMessageBox, ControllingPlayer);
  67. }
  68. /// <summary>
  69. /// Event handler for when the user selects ok on the "are you sure
  70. /// you want to quit" message box. This uses the loading screen to
  71. /// transition from the game back to the main menu screen.
  72. /// </summary>
  73. void ConfirmQuitMessageBoxAccepted (object sender, PlayerIndexEventArgs e)
  74. {
  75. LoadingScreen.Load (ScreenManager, false, null, new BackgroundScreen (),
  76. new MainMenuScreen ());
  77. }
  78. /// <summary>
  79. /// Event handler for when the Return to Lobby menu entry is selected.
  80. /// </summary>
  81. void ReturnToLobbyMenuEntrySelected (object sender, PlayerIndexEventArgs e)
  82. {
  83. if (networkSession.SessionState == NetworkSessionState.Playing) {
  84. networkSession.EndGame ();
  85. }
  86. }
  87. /// <summary>
  88. /// Event handler for when the End/Leave Session menu entry is selected.
  89. /// </summary>
  90. void LeaveSessionMenuEntrySelected (object sender, PlayerIndexEventArgs e)
  91. {
  92. NetworkSessionComponent.LeaveSession (ScreenManager, e.PlayerIndex);
  93. }
  94. #endregion
  95. }
  96. }