MainMenuScreen.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. #region File Description
  2. //-----------------------------------------------------------------------------
  3. // MainMenuScreen.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 System;
  11. using System.Collections.Generic;
  12. using System.Linq;
  13. using System.Text;
  14. using GameStateManagement;
  15. using Microsoft.Xna.Framework;
  16. using Microsoft.Xna.Framework.Net;
  17. #endregion
  18. namespace CatapultGame
  19. {
  20. class MainMenuScreen : MenuScreen
  21. {
  22. #region Initialization
  23. public MainMenuScreen()
  24. : base(String.Empty)
  25. {
  26. IsPopup = true;
  27. // Create our menu entries.
  28. MenuEntry startGameMenuEntry = new MenuEntry("Play");
  29. MenuEntry startMultiPlayerGameMenuEntry = new MenuEntry("Multi-Player");
  30. MenuEntry exitMenuEntry = new MenuEntry("Exit");
  31. // Hook up menu event handlers.
  32. startGameMenuEntry.Selected += StartGameMenuEntrySelected;
  33. startMultiPlayerGameMenuEntry.Selected += StartMultiPlayerGameMenuEntrySelected;
  34. exitMenuEntry.Selected += OnCancel;
  35. // Add entries to the menu.
  36. MenuEntries.Add(startGameMenuEntry);
  37. MenuEntries.Add(startMultiPlayerGameMenuEntry);
  38. MenuEntries.Add(exitMenuEntry);
  39. }
  40. #endregion
  41. #region Overrides
  42. protected override void UpdateMenuEntryLocations()
  43. {
  44. base.UpdateMenuEntryLocations();
  45. foreach (var entry in MenuEntries)
  46. {
  47. Vector2 position = entry.Position;
  48. position.Y += 60;
  49. entry.Position = position;
  50. }
  51. }
  52. #endregion
  53. #region Event Handlers for Menu Items
  54. /// <summary>
  55. /// Handles "Play" menu item selection
  56. /// </summary>
  57. /// <param name="sender"></param>
  58. /// <param name="e"></param>
  59. void StartGameMenuEntrySelected(object sender, EventArgs e)
  60. {
  61. // Lets make sure we get rid of our network session
  62. // so we can start up clean
  63. ScreenManager.Game.Services.RemoveService(typeof(NetworkSession));
  64. ScreenManager.AddScreen(new InstructionsScreen(), null);
  65. }
  66. /// <summary>
  67. /// Handles "Exit" menu item selection
  68. /// </summary>
  69. ///
  70. protected override void OnCancel(PlayerIndex playerIndex)
  71. {
  72. ScreenManager.Game.Exit();
  73. }
  74. void StartMultiPlayerGameMenuEntrySelected (object sender, PlayerIndexEventArgs e)
  75. {
  76. CreateOrFindSession (NetworkSessionType.SystemLink, e.PlayerIndex);
  77. }
  78. /// <summary>
  79. /// Helper method shared by the Live and System Link menu event handlers.
  80. /// </summary>
  81. void CreateOrFindSession (NetworkSessionType sessionType,
  82. PlayerIndex playerIndex)
  83. {
  84. // First, we need to make sure a suitable gamer profile is signed in.
  85. ProfileSignInScreen profileSignIn = new ProfileSignInScreen (sessionType);
  86. // Hook up an event so once the ProfileSignInScreen is happy,
  87. // it will activate the CreateOrFindSessionScreen.
  88. profileSignIn.ProfileSignedIn += delegate
  89. {
  90. GameScreen createOrFind = new CreateOrFindSessionScreen (sessionType);
  91. ScreenManager.AddScreen (createOrFind, playerIndex);
  92. };
  93. // Activate the ProfileSignInScreen.
  94. ScreenManager.AddScreen (profileSignIn, playerIndex);
  95. }
  96. #endregion
  97. }
  98. }