MenuModule.cs 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  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 == MODULE.MAINMENU_DEBUG)
  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. IGM_LGSG.Draw();
  88. break;
  89. case Mode.IGM:
  90. IGM.Draw();
  91. break;
  92. case Mode.IGM_Junction:
  93. IGM_Junction.Draw();
  94. break;
  95. case Mode.IGM_Items:
  96. IGM_Items.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. IGM_LGSG.Refresh();
  125. break;
  126. case Mode.IGM:
  127. IGM.Refresh();
  128. break;
  129. case Mode.IGM_Junction:
  130. IGM_Junction.Refresh();
  131. break;
  132. case Mode.IGM_Items:
  133. IGM_Items.Refresh();
  134. break;
  135. // case Mode.NewGameChoosed:
  136. // goto case Mode.MainLobby;
  137. default:
  138. State = Mode.MainLobby;
  139. goto case Mode.MainLobby;
  140. }
  141. base.Refresh();
  142. }
  143. public override bool Update()
  144. {
  145. switch (State)
  146. {
  147. case Mode.NewGameChoosed:
  148. case Mode.LoadGameCheckingSlot:
  149. case Mode.LoadGameLoading:
  150. case Mode.SaveGameCheckingSlot:
  151. case Mode.SaveGameSaving:
  152. Memory.IsMouseVisible = false;
  153. break;
  154. default:
  155. Memory.IsMouseVisible = true;
  156. break;
  157. }
  158. bool forceupdate = false;
  159. switch (State)
  160. {
  161. case Mode.MainLobby:
  162. forceupdate = IGM_Lobby.Update();
  163. break;
  164. case Mode.DebugScreen:
  165. forceupdate = Debug_Menu.Update();
  166. break;
  167. case Mode.LoadGameChooseSlot:
  168. case Mode.LoadGameCheckingSlot:
  169. case Mode.LoadGameChooseGame:
  170. case Mode.LoadGameLoading:
  171. case Mode.SaveGameChooseSlot:
  172. case Mode.SaveGameCheckingSlot:
  173. case Mode.SaveGameChooseGame:
  174. case Mode.SaveGameSaving:
  175. forceupdate = IGM_LGSG.Update();
  176. break;
  177. case Mode.IGM:
  178. forceupdate = IGM.Update();
  179. break;
  180. case Mode.IGM_Junction:
  181. forceupdate = IGM_Junction.Update();
  182. break;
  183. case Mode.IGM_Items:
  184. forceupdate = IGM_Items.Update();
  185. break;
  186. case Mode.NewGameChoosed:
  187. goto case Mode.MainLobby;
  188. default:
  189. State = Mode.MainLobby;
  190. goto case Mode.MainLobby;
  191. }
  192. SkipFocus = true;
  193. forceupdate = base.Update() || forceupdate;
  194. //if (!forceupdate)
  195. // Memory.SuppressDraw = false;
  196. return forceupdate;
  197. }
  198. #endregion Methods
  199. }
  200. }