#region File Description
//-----------------------------------------------------------------------------
// PauseMenuScreen.cs
//
// Microsoft XNA Community Game Platform
// Copyright (C) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
#endregion
#region Using Statements
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Net;
#endregion
namespace NetworkStateManagement
{
///
/// The pause menu comes up over the top of the game,
/// giving the player options to resume or quit.
///
class PauseMenuScreen : MenuScreen
{
#region Fields
NetworkSession networkSession;
#endregion
#region Initialization
///
/// Constructor.
///
public PauseMenuScreen (NetworkSession networkSession)
: base(Resources.Paused)
{
this.networkSession = networkSession;
// Add the Resume Game menu entry.
MenuEntry resumeGameMenuEntry = new MenuEntry (Resources.ResumeGame);
resumeGameMenuEntry.Selected += OnCancel;
MenuEntries.Add (resumeGameMenuEntry);
if (networkSession == null) {
// If this is a single player game, add the Quit menu entry.
MenuEntry quitGameMenuEntry = new MenuEntry (Resources.QuitGame);
quitGameMenuEntry.Selected += QuitGameMenuEntrySelected;
MenuEntries.Add (quitGameMenuEntry);
} else {
// If we are hosting a network game, add the Return to Lobby menu entry.
if (networkSession.IsHost) {
MenuEntry lobbyMenuEntry = new MenuEntry (Resources.ReturnToLobby);
lobbyMenuEntry.Selected += ReturnToLobbyMenuEntrySelected;
MenuEntries.Add (lobbyMenuEntry);
}
// Add the End/Leave Session menu entry.
string leaveEntryText = networkSession.IsHost ? Resources.EndSession :
Resources.LeaveSession;
MenuEntry leaveSessionMenuEntry = new MenuEntry (leaveEntryText);
leaveSessionMenuEntry.Selected += LeaveSessionMenuEntrySelected;
MenuEntries.Add (leaveSessionMenuEntry);
}
}
#endregion
#region Handle Input
///
/// Event handler for when the Quit Game menu entry is selected.
///
void QuitGameMenuEntrySelected (object sender, PlayerIndexEventArgs e)
{
MessageBoxScreen confirmQuitMessageBox =
new MessageBoxScreen (Resources.ConfirmQuitGame);
confirmQuitMessageBox.Accepted += ConfirmQuitMessageBoxAccepted;
ScreenManager.AddScreen (confirmQuitMessageBox, ControllingPlayer);
}
///
/// Event handler for when the user selects ok on the "are you sure
/// you want to quit" message box. This uses the loading screen to
/// transition from the game back to the main menu screen.
///
void ConfirmQuitMessageBoxAccepted (object sender, PlayerIndexEventArgs e)
{
LoadingScreen.Load (ScreenManager, false, null, new BackgroundScreen (),
new MainMenuScreen ());
}
///
/// Event handler for when the Return to Lobby menu entry is selected.
///
void ReturnToLobbyMenuEntrySelected (object sender, PlayerIndexEventArgs e)
{
if (networkSession.SessionState == NetworkSessionState.Playing) {
networkSession.EndGame ();
}
}
///
/// Event handler for when the End/Leave Session menu entry is selected.
///
void LeaveSessionMenuEntrySelected (object sender, PlayerIndexEventArgs e)
{
NetworkSessionComponent.LeaveSession (ScreenManager, e.PlayerIndex);
}
#endregion
}
}