DebugChoose.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  1. using Microsoft.Xna.Framework;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Linq;
  6. namespace OpenVIII.IGMData
  7. {
  8. public class DebugChoose : Base
  9. {
  10. #region Fields
  11. /// <summary>
  12. /// Strings
  13. /// </summary>
  14. private static Dictionary<Ditems, FF8String> strDebugLobby = new Dictionary<Ditems, FF8String>()
  15. {
  16. { Ditems.Reset, new FF8String("Reset Main Menu state") },
  17. { Ditems.Overture, new FF8String("Play Overture") },
  18. { Ditems.Battle, new FF8String("Battle encounter: ") },
  19. { Ditems.Field, new FF8String("Field debug render: ") },
  20. { Ditems.Movie, new FF8String("Movie debug render: ") },
  21. { Ditems.Music, new FF8String("Play/Stop music: ") },
  22. { Ditems.Sounds, new FF8String("Play audio.dat: ") },
  23. { Ditems.World, new FF8String("Jump to World Map") },
  24. { Ditems.Faces, new FF8String("Test Faces") },
  25. { Ditems.Icons, new FF8String("Test Icons") },
  26. { Ditems.Cards, new FF8String("Test Cards") },
  27. { Ditems.FieldModelTest, new FF8String("Test field models") },
  28. };
  29. private int debug_choosedAudio;
  30. /// <summary>
  31. /// Dynamic String Values
  32. /// </summary>
  33. private Dictionary<Ditems, Func<FF8String>> dynamicDebugStrings;
  34. private Dictionary<Ditems, Func<bool>> inputsOKAY;
  35. private Dictionary<Ditems, Func<bool>> inputsLeft;
  36. private Dictionary<Ditems, Func<bool>> inputsRight;
  37. #endregion Fields
  38. #region Enums
  39. /// <summary>
  40. /// Identifiers and Ordering of debug menu items
  41. /// </summary>
  42. private enum Ditems
  43. {
  44. Reset,
  45. Overture,
  46. Battle,
  47. Field,
  48. Movie,
  49. Music,
  50. Sounds,
  51. World,
  52. Faces,
  53. Icons,
  54. Cards,
  55. FieldModelTest,
  56. /// <summary>
  57. /// Number of values. Make sure this is last.
  58. /// </summary>
  59. Count
  60. }
  61. #endregion Enums
  62. #region Methods
  63. public static DebugChoose Create(Rectangle pos) => Create<DebugChoose>((int)Ditems.Count, 1, new IGMDataItem.Box { Pos = pos, Title = Icons.ID.DEBUG }, 1, (int)Ditems.Count);
  64. public override bool Inputs()
  65. {
  66. Cursor_Status |= Cursor_Status.Enabled; //Cursor_Status |= Cursor_Status.Horizontal;
  67. Cursor_Status &= ~Cursor_Status.Blinking;
  68. return base.Inputs();
  69. }
  70. public override bool Inputs_CANCEL()
  71. {
  72. base.Inputs_CANCEL();
  73. CURSOR_SELECT = 0;
  74. Menu.Module.State = MenuModule.Mode.MainLobby;
  75. Menu.FadeIn();
  76. return true;
  77. }
  78. public override bool Inputs_OKAY()
  79. {
  80. if (inputsOKAY.TryGetValue((Ditems)CURSOR_SELECT, out Func<bool> f))
  81. {
  82. return f.Invoke() && base.Inputs_OKAY();
  83. }
  84. return false;
  85. }
  86. public override void Inputs_Left()
  87. {
  88. if (inputsLeft.TryGetValue((Ditems)CURSOR_SELECT, out Func<bool> f) && f.Invoke())
  89. {
  90. base.Inputs_Left();
  91. Refresh();
  92. }
  93. }
  94. public override void Inputs_Right()
  95. {
  96. if (inputsRight.TryGetValue((Ditems)CURSOR_SELECT, out Func<bool> f) && f.Invoke())
  97. {
  98. base.Inputs_Right();
  99. Refresh();
  100. }
  101. }
  102. public override void Refresh()
  103. {
  104. base.Refresh();
  105. for (int i = 0; i < Count; i++)
  106. {
  107. if (dynamicDebugStrings.TryGetValue((Ditems)i, out Func<FF8String> f))
  108. {
  109. ((IGMDataItem.Text)ITEM[i, 0]).Data = f();
  110. }
  111. }
  112. }
  113. protected override void Init()
  114. {
  115. base.Init();
  116. for (int i = 0; i < Count; i++)
  117. {
  118. if (strDebugLobby.TryGetValue((Ditems)i, out FF8String str))
  119. {
  120. ITEM[i, 0] = new IGMDataItem.Text { Data = str, Pos = SIZE[i] };
  121. }
  122. }
  123. inputsOKAY = new Dictionary<Ditems, Func<bool>>()
  124. {
  125. { Ditems.Reset, ()=> {
  126. return Inputs_CANCEL();
  127. } },
  128. { Ditems.Overture, ()=> {
  129. Menu.FadeIn();
  130. Menu.Module.State = MenuModule.Mode.MainLobby;
  131. Module_overture_debug.ResetModule();
  132. Memory.Module = MODULE.OVERTURE_DEBUG;
  133. Memory.IsMouseVisible = false;
  134. init_debugger_Audio.StopMusic();
  135. return true;
  136. } },
  137. { Ditems.Battle, ()=> {
  138. Menu.FadeIn();
  139. Module_battle_debug.ResetState();
  140. Menu.BattleMenus.CameFrom();
  141. Memory.Module = MODULE.BATTLE_DEBUG;
  142. //Extended.postBackBufferDelegate = BattleSwirl.Init;
  143. //Extended.RequestBackBuffer();
  144. Memory.IsMouseVisible = false;
  145. return true;
  146. } },
  147. { Ditems.Field, ()=> {
  148. Menu.FadeIn();
  149. Fields.Module.ResetField();
  150. Memory.Module = MODULE.FIELD_DEBUG;
  151. Memory.IsMouseVisible = false;
  152. return true;
  153. } },
  154. { Ditems.Movie, ()=> {
  155. Menu.FadeIn();
  156. Memory.Module = MODULE.MOVIETEST;
  157. Module_movie_test.Play();
  158. Memory.IsMouseVisible = false;
  159. return true;
  160. } },
  161. { Ditems.Music, ()=> {
  162. Fields.Module.ResetField();
  163. init_debugger_Audio.PlayStopMusic();
  164. return true;
  165. } },
  166. { Ditems.Sounds, ()=> {
  167. init_debugger_Audio.PlaySound(debug_choosedAudio);
  168. skipsnd = true;
  169. return true;
  170. } },
  171. { Ditems.World, ()=> {
  172. Menu.FadeIn();
  173. Memory.Module = MODULE.WORLD_DEBUG;
  174. Memory.IsMouseVisible = false;
  175. return true;
  176. } },
  177. { Ditems.Faces, ()=> {
  178. Menu.FadeIn();
  179. Memory.Module = MODULE.FACE_TEST;
  180. Module_face_test.Show();
  181. return true;
  182. } },
  183. { Ditems.Icons, ()=> {
  184. Menu.FadeIn();
  185. Memory.Module = MODULE.ICON_TEST;
  186. Module_icon_test.Show();
  187. return true;
  188. } },
  189. { Ditems.Cards, ()=> {
  190. Menu.FadeIn();
  191. Memory.Module = MODULE.CARD_TEST;
  192. Module_card_test.Show();
  193. return true;
  194. } },
  195. { Ditems.FieldModelTest, ()=> {
  196. Menu.FadeIn();
  197. Memory.Module = MODULE.FIELD_MODEL_TEST;
  198. Module_card_test.Show();
  199. return true;
  200. } },
  201. };
  202. inputsLeft = new Dictionary<Ditems, Func<bool>>()
  203. {
  204. { Ditems.Battle, ()=> {
  205. if(Memory.battle_encounter >0)
  206. Memory.battle_encounter--;
  207. else
  208. Memory.battle_encounter = Memory.encounters.Length - 1;
  209. return true;
  210. } },
  211. { Ditems.Field, ()=> {
  212. if( Memory.FieldHolder.FieldID>0)
  213. Memory.FieldHolder.FieldID--;
  214. else
  215. Memory.FieldHolder.FieldID = checked((ushort)(Memory.FieldHolder.fields.Length - 1));
  216. return true;
  217. } },
  218. { Ditems.Movie, ()=> {
  219. if(Module_movie_test.Index>0)
  220. Module_movie_test.Index--;
  221. else
  222. Module_movie_test.Index = Movie.Files.Count - 1;
  223. return true;
  224. } },
  225. { Ditems.Music, ()=> {
  226. if(Memory.MusicIndex >0)
  227. Memory.MusicIndex --;
  228. else
  229. Memory.MusicIndex = Memory.dicMusic.Keys.Max();
  230. return true;
  231. } },
  232. { Ditems.Sounds, ()=> {
  233. if (debug_choosedAudio > 0)
  234. debug_choosedAudio--;
  235. else
  236. debug_choosedAudio = init_debugger_Audio.soundEntriesCount-1;
  237. return true;
  238. } }
  239. };
  240. inputsRight = new Dictionary<Ditems, Func<bool>>()
  241. {
  242. { Ditems.Battle, ()=> {
  243. if(Memory.battle_encounter < Memory.encounters.Length - 1)
  244. Memory.battle_encounter++;
  245. else
  246. Memory.battle_encounter = 0;
  247. return true;
  248. } },
  249. { Ditems.Field, ()=> {
  250. if( Memory.FieldHolder.FieldID<checked((ushort)(Memory.FieldHolder.fields.Length - 1)))
  251. Memory.FieldHolder.FieldID++;
  252. else
  253. Memory.FieldHolder.FieldID = 0;
  254. return true;
  255. } },
  256. { Ditems.Movie, ()=> {
  257. if(Module_movie_test.Index<Movie.Files.Count - 1)
  258. Module_movie_test.Index++;
  259. else
  260. Module_movie_test.Index = 0;
  261. return true;
  262. } },
  263. { Ditems.Music, ()=> {
  264. if(Memory.MusicIndex <Memory.dicMusic.Keys.Max())
  265. Memory.MusicIndex ++;
  266. else
  267. Memory.MusicIndex = 0;
  268. return true;
  269. } },
  270. { Ditems.Sounds, ()=> {
  271. if (debug_choosedAudio < init_debugger_Audio.soundEntriesCount-1)
  272. debug_choosedAudio++;
  273. else
  274. debug_choosedAudio = 0;
  275. return true;
  276. } }
  277. };
  278. dynamicDebugStrings = new Dictionary<Ditems, Func<FF8String>>
  279. {
  280. { Ditems.Battle, ()=> {return strDebugLobby[Ditems.Battle].Clone().Append(Memory.battle_encounter.ToString("D4")); } },
  281. { Ditems.Field, ()=> {return strDebugLobby[Ditems.Field].Clone().Append($"{Memory.FieldHolder.FieldID.ToString("D3")} - {Memory.FieldHolder.fields[Memory.FieldHolder.FieldID].ToUpper()}"); } },
  282. { Ditems.Movie, ()=> {
  283. if (Movie.Files.Count<=Module_movie_test.Index)
  284. Module_movie_test.Index=0;
  285. if(Movie.Files.Count ==0)
  286. return "";
  287. Movie.Files Files;
  288. return strDebugLobby[Ditems.Movie].Clone().Append(Path.GetFileNameWithoutExtension(Files[Module_movie_test.Index])); } },
  289. { Ditems.Music, ()=> {return strDebugLobby[Ditems.Music].Clone().Append(Path.GetFileNameWithoutExtension(Memory.dicMusic[Memory.MusicIndex][0])); } },
  290. { Ditems.Sounds, ()=> {return strDebugLobby[Ditems.Sounds].Clone().Append(debug_choosedAudio.ToString("D4")); } }
  291. };
  292. }
  293. protected override void InitShift(int i, int col, int row)
  294. {
  295. base.InitShift(i, col, row);
  296. SIZE[i].Inflate(-22, -8);
  297. SIZE[i].Offset(0, 12 + (-8 * row));
  298. }
  299. #endregion Methods
  300. }
  301. }