PauseMenuScreen.cs 3.2 KB

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