MenuModule.cs 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. using Microsoft.Xna.Framework;
  2. using System;
  3. namespace OpenVIII
  4. {
  5. public class MenuModule : Menu
  6. {
  7. #region Fields
  8. private static Mode state = 0;
  9. #endregion Fields
  10. #region Events
  11. public static event EventHandler<Mode> MainMenuStateChangedEvent;
  12. #endregion Events
  13. #region Enums
  14. protected override void Init()
  15. {
  16. Memory.ModuleChangeEvent += ModuleChanged;
  17. MainMenuStateChangedEvent += MainMenuStateChanged;
  18. base.Init();
  19. }
  20. private void MainMenuStateChanged(object sender, Mode e) => Refresh();
  21. private void ModuleChanged(object sender, Module e)
  22. {
  23. if(e == OpenVIII.Module.MainMenuDebug)
  24. {
  25. Refresh();
  26. }
  27. }
  28. /// <summary>
  29. /// What state the menus are in.
  30. /// </summary>
  31. public enum Mode
  32. {
  33. //Init,
  34. MainLobby,
  35. DebugScreen,
  36. NewGameChoosed,
  37. LoadGameChooseSlot,
  38. SaveGameChooseSlot,
  39. LoadGameChooseGame,
  40. SaveGameChooseGame,
  41. LoadGameCheckingSlot,
  42. SaveGameCheckingSlot,
  43. LoadGameLoading,
  44. SaveGameSaving,
  45. IGM,
  46. IGM_Junction,
  47. IGM_Items,
  48. //BattleMenu
  49. }
  50. #endregion Enums
  51. #region Properties
  52. public Mode State
  53. {
  54. get => state; set
  55. {
  56. // Draw will call before the next update(). This prevents that.
  57. Memory.SuppressDraw = true;
  58. if (state != value)
  59. {
  60. state = value;
  61. MainMenuStateChangedEvent?.Invoke(null, value);
  62. }
  63. }
  64. }
  65. #endregion Properties
  66. #region Methods
  67. public static MenuModule Create() => Create<MenuModule>();
  68. public override void Draw()
  69. {
  70. Memory.Graphics.GraphicsDevice.Clear(Color.Black);
  71. switch (State)
  72. {
  73. case Mode.MainLobby:
  74. IGM_Lobby.Draw();
  75. break;
  76. case Mode.DebugScreen:
  77. Debug_Menu.Draw();
  78. break;
  79. case Mode.LoadGameChooseSlot:
  80. case Mode.LoadGameCheckingSlot:
  81. case Mode.LoadGameChooseGame:
  82. case Mode.LoadGameLoading:
  83. case Mode.SaveGameChooseSlot:
  84. case Mode.SaveGameCheckingSlot:
  85. case Mode.SaveGameChooseGame:
  86. case Mode.SaveGameSaving:
  87. IGMLoadSaveGame.Draw();
  88. break;
  89. case Mode.IGM:
  90. IGM.Draw();
  91. break;
  92. case Mode.IGM_Junction:
  93. Junction.Draw();
  94. break;
  95. case Mode.IGM_Items:
  96. IGMItems.Draw();
  97. break;
  98. case Mode.NewGameChoosed:
  99. goto case Mode.MainLobby;
  100. default:
  101. State = Mode.MainLobby;
  102. goto case Mode.MainLobby;
  103. }
  104. base.Draw();
  105. }
  106. public override void Refresh()
  107. {
  108. switch (State)
  109. {
  110. case Mode.MainLobby:
  111. IGM_Lobby.Refresh();
  112. break;
  113. case Mode.DebugScreen:
  114. Debug_Menu.Refresh();
  115. break;
  116. case Mode.LoadGameChooseSlot:
  117. case Mode.LoadGameCheckingSlot:
  118. case Mode.LoadGameChooseGame:
  119. case Mode.LoadGameLoading:
  120. case Mode.SaveGameChooseSlot:
  121. case Mode.SaveGameCheckingSlot:
  122. case Mode.SaveGameChooseGame:
  123. case Mode.SaveGameSaving:
  124. break;
  125. case Mode.IGM:
  126. IGM.Refresh();
  127. break;
  128. case Mode.IGM_Junction:
  129. Junction.Refresh();
  130. break;
  131. case Mode.IGM_Items:
  132. IGMItems.Refresh();
  133. break;
  134. // case Mode.NewGameChoosed:
  135. // goto case Mode.MainLobby;
  136. default:
  137. State = Mode.MainLobby;
  138. goto case Mode.MainLobby;
  139. }
  140. base.Refresh();
  141. }
  142. public override bool Update()
  143. {
  144. switch (State)
  145. {
  146. case Mode.NewGameChoosed:
  147. case Mode.LoadGameCheckingSlot:
  148. case Mode.LoadGameLoading:
  149. case Mode.SaveGameCheckingSlot:
  150. case Mode.SaveGameSaving:
  151. Memory.IsMouseVisible = false;
  152. break;
  153. default:
  154. Memory.IsMouseVisible = true;
  155. break;
  156. }
  157. var forceupdate = false;
  158. switch (State)
  159. {
  160. case Mode.MainLobby:
  161. forceupdate = IGM_Lobby.Update();
  162. break;
  163. case Mode.DebugScreen:
  164. forceupdate = Debug_Menu.Update();
  165. break;
  166. case Mode.LoadGameChooseSlot:
  167. case Mode.LoadGameCheckingSlot:
  168. case Mode.LoadGameChooseGame:
  169. case Mode.LoadGameLoading:
  170. case Mode.SaveGameChooseSlot:
  171. case Mode.SaveGameCheckingSlot:
  172. case Mode.SaveGameChooseGame:
  173. case Mode.SaveGameSaving:
  174. forceupdate = IGMLoadSaveGame.Update();
  175. break;
  176. case Mode.IGM:
  177. forceupdate = IGM.Update();
  178. break;
  179. case Mode.IGM_Junction:
  180. forceupdate = Junction.Update();
  181. break;
  182. case Mode.IGM_Items:
  183. forceupdate = IGMItems.Update();
  184. break;
  185. case Mode.NewGameChoosed:
  186. goto case Mode.MainLobby;
  187. default:
  188. State = Mode.MainLobby;
  189. goto case Mode.MainLobby;
  190. }
  191. SkipFocus = true;
  192. forceupdate = base.Update() || forceupdate;
  193. //if (!forceupdate)
  194. // Memory.SuppressDraw = false;
  195. return forceupdate;
  196. }
  197. #endregion Methods
  198. }
  199. }