PauseMenuScreen.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  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. {
  38. // If this is a single player game, add the Quit menu entry.
  39. MenuEntry quitGameMenuEntry = new MenuEntry(Resources.QuitGame);
  40. quitGameMenuEntry.Selected += QuitGameMenuEntrySelected;
  41. MenuEntries.Add(quitGameMenuEntry);
  42. }
  43. else
  44. {
  45. // If we are hosting a network game, add the Return to Lobby menu entry.
  46. if (networkSession.IsHost)
  47. {
  48. MenuEntry lobbyMenuEntry = new MenuEntry(Resources.ReturnToLobby);
  49. lobbyMenuEntry.Selected += ReturnToLobbyMenuEntrySelected;
  50. MenuEntries.Add(lobbyMenuEntry);
  51. }
  52. // Add the End/Leave Session menu entry.
  53. string leaveEntryText = networkSession.IsHost ? Resources.EndSession :
  54. Resources.LeaveSession;
  55. MenuEntry leaveSessionMenuEntry = new MenuEntry(leaveEntryText);
  56. leaveSessionMenuEntry.Selected += LeaveSessionMenuEntrySelected;
  57. MenuEntries.Add(leaveSessionMenuEntry);
  58. }
  59. }
  60. #endregion
  61. #region Handle Input
  62. /// <summary>
  63. /// Event handler for when the Quit Game menu entry is selected.
  64. /// </summary>
  65. void QuitGameMenuEntrySelected(object sender, PlayerIndexEventArgs e)
  66. {
  67. MessageBoxScreen confirmQuitMessageBox =
  68. new MessageBoxScreen(Resources.ConfirmQuitGame);
  69. confirmQuitMessageBox.Accepted += ConfirmQuitMessageBoxAccepted;
  70. ScreenManager.AddScreen(confirmQuitMessageBox, ControllingPlayer);
  71. }
  72. /// <summary>
  73. /// Event handler for when the user selects ok on the "are you sure
  74. /// you want to quit" message box. This uses the loading screen to
  75. /// transition from the game back to the main menu screen.
  76. /// </summary>
  77. void ConfirmQuitMessageBoxAccepted(object sender, PlayerIndexEventArgs e)
  78. {
  79. LoadingScreen.Load(ScreenManager, false, null, new BackgroundScreen(),
  80. new MainMenuScreen());
  81. }
  82. /// <summary>
  83. /// Event handler for when the Return to Lobby menu entry is selected.
  84. /// </summary>
  85. void ReturnToLobbyMenuEntrySelected(object sender, PlayerIndexEventArgs e)
  86. {
  87. if (networkSession.SessionState == NetworkSessionState.Playing)
  88. {
  89. networkSession.EndGame();
  90. }
  91. }
  92. /// <summary>
  93. /// Event handler for when the End/Leave Session menu entry is selected.
  94. /// </summary>
  95. void LeaveSessionMenuEntrySelected(object sender, PlayerIndexEventArgs e)
  96. {
  97. NetworkSessionComponent.LeaveSession(ScreenManager, e.PlayerIndex);
  98. }
  99. #endregion
  100. }
  101. }