ModuleHandler.cs 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. using Microsoft.Xna.Framework;
  2. using OpenVIII.Encoding.Tags;
  3. using System;
  4. using System.Threading.Tasks;
  5. namespace OpenVIII
  6. {
  7. public static class ModuleHandler
  8. {
  9. private static MODULE module = Memory.Module;
  10. private static MODULE lastModule = Memory.Module;
  11. public static async void Update(GameTime gameTime)
  12. {
  13. if (lastModule != module)
  14. {
  15. GC.Collect();
  16. GC.WaitForPendingFinalizers();
  17. lastModule = module;
  18. }
  19. module = Memory.Module;
  20. #if DEBUG
  21. if (Input2.DelayedButton(FF8TextTagKey.Reset) || Input2.DelayedButton(FF8TextTagKey.Cancel))
  22. {
  23. if (Memory.Module != MODULE.MAINMENU_DEBUG && Memory.Module != MODULE.BATTLE_DEBUG)
  24. {
  25. Memory.Module = MODULE.MAINMENU_DEBUG;
  26. InputMouse.Mode = MouseLockMode.Screen;
  27. }
  28. }
  29. #endif
  30. switch (module)
  31. {
  32. //doesn't need memory
  33. case MODULE.OVERTURE_DEBUG:
  34. case MODULE.MOVIETEST:
  35. break;
  36. default:
  37. //requires memory to be loaded.
  38. if ((Memory.InitTask != null) && (Memory.InitTask.IsCompleted == false ||
  39. Memory.InitTask.Status == TaskStatus.Running ||
  40. Memory.InitTask.Status == TaskStatus.WaitingToRun ||
  41. Memory.InitTask.Status == TaskStatus.WaitingForActivation))
  42. {
  43. //task is still running loading assets blank screen and wait.
  44. Memory.SuppressDraw = true;
  45. await Memory.InitTask;
  46. //fade in doesn't happen because time was set before the await.
  47. //ending here causes update to be run again with new time
  48. return;
  49. }
  50. break;
  51. }
  52. switch (module)
  53. {
  54. case MODULE.BATTLE:
  55. module_battle.Update();
  56. break;
  57. case MODULE.BATTLE_DEBUG:
  58. Menu.UpdateOnce();
  59. Module_battle_debug.Update();
  60. break;
  61. case MODULE.MOVIETEST:
  62. Module_movie_test.Update();
  63. break;
  64. case MODULE.FIELD_DEBUG:
  65. Fields.Module.Update();
  66. break;
  67. case MODULE.OVERTURE_DEBUG:
  68. Module_overture_debug.Update();
  69. break;
  70. case MODULE.MAINMENU_DEBUG:
  71. Menu.UpdateOnce();
  72. Menu.Module.Update();
  73. break;
  74. case MODULE.WORLD_DEBUG:
  75. Module_world_debug.Update(gameTime);
  76. break;
  77. case MODULE.FACE_TEST:
  78. Module_face_test.Update();
  79. break;
  80. case MODULE.ICON_TEST:
  81. Module_icon_test.Update();
  82. break;
  83. case MODULE.CARD_TEST:
  84. Module_card_test.Update();
  85. break;
  86. case MODULE.FIELD_MODEL_TEST:
  87. Fields.Module_field_object_test.Update();
  88. break;
  89. }
  90. }
  91. public static void Draw(GameTime gameTime)
  92. {
  93. switch (module)
  94. {
  95. //doesn't need memory
  96. case MODULE.OVERTURE_DEBUG:
  97. case MODULE.MOVIETEST:
  98. break;
  99. default:
  100. //requires memory to be loaded.
  101. if ((Memory.InitTask != null) && (Memory.InitTask.IsCompleted == false ||
  102. Memory.InitTask.Status == TaskStatus.Running ||
  103. Memory.InitTask.Status == TaskStatus.WaitingToRun ||
  104. Memory.InitTask.Status == TaskStatus.WaitingForActivation))
  105. {
  106. //suppress draw in update but if draw happens before update, blank screen, and end here
  107. Memory.graphics.GraphicsDevice.Clear(Color.Black);
  108. return;
  109. }
  110. break;
  111. }
  112. switch (module)
  113. {
  114. case MODULE.BATTLE:
  115. module_battle.Draw();
  116. break;
  117. case MODULE.BATTLE_DEBUG:
  118. Module_battle_debug.Draw();
  119. break;
  120. case MODULE.MOVIETEST:
  121. Module_movie_test.Draw();
  122. break;
  123. case MODULE.FIELD_DEBUG:
  124. Fields.Module.Draw();
  125. break;
  126. case MODULE.OVERTURE_DEBUG:
  127. Module_overture_debug.Draw();
  128. break;
  129. case MODULE.MAINMENU_DEBUG:
  130. Menu.Module.Draw();
  131. break;
  132. case MODULE.WORLD_DEBUG:
  133. Module_world_debug.Draw();
  134. break;
  135. case MODULE.FACE_TEST:
  136. Module_face_test.Draw();
  137. break;
  138. case MODULE.ICON_TEST:
  139. Module_icon_test.Draw();
  140. break;
  141. case MODULE.CARD_TEST:
  142. Module_card_test.Draw();
  143. break;
  144. case MODULE.BATTLE_SWIRL:
  145. BattleSwirl.Draw();
  146. break;
  147. case MODULE.FIELD_MODEL_TEST:
  148. Fields.Module_field_object_test.Draw();
  149. break;
  150. }
  151. }
  152. public static void ResetBS()
  153. => Module_battle_debug.ResetState();
  154. }
  155. }