//-----------------------------------------------------------------------------
// MainMenuScreen.cs
//
// Microsoft XNA Community Game Platform
// Copyright (C) Microsoft Corporation. All rights reserved.
//-----------------------------------------------------------------------------
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Net;
namespace NetworkStateManagement
{
///
/// The main menu screen is the first thing displayed when the game starts up.
///
class MainMenuScreen : MenuScreen
{
///
/// Constructor fills in the menu contents.
///
public MainMenuScreen()
: base(Resources.MainMenu)
{
// Create our menu entries.
MenuEntry singlePlayerMenuEntry = new MenuEntry(Resources.SinglePlayer);
// TODO MenuEntry liveMenuEntry = new MenuEntry(Resources.PlayerMatch);
MenuEntry systemLinkMenuEntry = new MenuEntry(Resources.SystemLink);
MenuEntry exitMenuEntry = new MenuEntry(Resources.Exit);
// Hook up menu event handlers.
singlePlayerMenuEntry.Selected += SinglePlayerMenuEntrySelected;
// TODO liveMenuEntry.Selected += LiveMenuEntrySelected;
systemLinkMenuEntry.Selected += SystemLinkMenuEntrySelected;
exitMenuEntry.Selected += OnCancel;
// Add entries to the menu.
// TODO MenuEntries.Add(liveMenuEntry);
MenuEntries.Add(systemLinkMenuEntry);
MenuEntries.Add(singlePlayerMenuEntry);
MenuEntries.Add(exitMenuEntry);
}
///
/// Event handler for when the Single Player menu entry is selected.
///
void SinglePlayerMenuEntrySelected(object sender, PlayerIndexEventArgs e)
{
LoadingScreen.Load(ScreenManager, true, e.PlayerIndex,
new GameplayScreen(null));
}
///
/// Event handler for when the Live menu entry is selected.
///
void LiveMenuEntrySelected(object sender, PlayerIndexEventArgs e)
{
CreateOrFindSession(NetworkSessionType.PlayerMatch, e.PlayerIndex);
}
///
/// Event handler for when the System Link menu entry is selected.
///
void SystemLinkMenuEntrySelected(object sender, PlayerIndexEventArgs e)
{
CreateOrFindSession(NetworkSessionType.SystemLink, e.PlayerIndex);
}
///
/// Helper method shared by the Live and System Link menu event handlers.
///
void CreateOrFindSession(NetworkSessionType sessionType,
PlayerIndex playerIndex)
{
// First, we need to make sure a suitable gamer profile is signed in.
ProfileSignInScreen profileSignIn = new ProfileSignInScreen(sessionType);
// Hook up an event so once the ProfileSignInScreen is happy,
// it will activate the CreateOrFindSessionScreen.
profileSignIn.ProfileSignedIn += delegate
{
GameScreen createOrFind = new CreateOrFindSessionScreen(sessionType);
ScreenManager.AddScreen(createOrFind, playerIndex);
};
// Activate the ProfileSignInScreen.
ScreenManager.AddScreen(profileSignIn, playerIndex);
}
///
/// When the user cancels the main menu, ask if they want to exit the sample.
///
protected override void OnCancel(PlayerIndex playerIndex)
{
MessageBoxScreen confirmExitMessageBox =
new MessageBoxScreen(Resources.ConfirmExitSample);
confirmExitMessageBox.Accepted += ConfirmExitMessageBoxAccepted;
ScreenManager.AddScreen(confirmExitMessageBox, playerIndex);
}
///
/// Event handler for when the user selects ok on the "are you sure
/// you want to exit" message box.
///
void ConfirmExitMessageBoxAccepted(object sender, PlayerIndexEventArgs e)
{
ScreenManager.Game.Exit();
}
}
}