FieldDebugControls.cs 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. using Microsoft.Xna.Framework;
  2. using Microsoft.Xna.Framework.Input;
  3. using System.Diagnostics;
  4. using System.Linq;
  5. namespace OpenVIII.Fields.IGMData
  6. {
  7. public class FieldDebugControls : OpenVIII.IGMData.Base
  8. {
  9. #region Fields
  10. private const int TotalRows = 8;
  11. private const int TotalBelow = 2;
  12. private bool _skipRefresh;
  13. #endregion Fields
  14. #region Properties
  15. public IGMDataItem.Text ClassicSpriteBatchMode { get => (IGMDataItem.Text)ITEM[4, 0]; protected set => ITEM[4, 0] = value; }
  16. public IGMDataItem.Text Deswizzle { get => (IGMDataItem.Text)ITEM[6, 0]; protected set => ITEM[6, 0] = value; }
  17. public IGMDataItem.Text FieldName { get => (IGMDataItem.Text)ITEM[0, 0]; protected set => ITEM[0, 0] = value; }
  18. public IGMDataItem.Text ForceDump { get => (IGMDataItem.Text)ITEM[5, 0]; protected set => ITEM[5, 0] = value; }
  19. public IGMDataItem.Text MouseLocationIn3D { get => (IGMDataItem.Text)ITEM[Count - 2, 0]; protected set => ITEM[Count - 2, 0] = value; }
  20. public IGMDataItem.Text AreaName { get => (IGMDataItem.Text)ITEM[Count - 1, 0]; protected set => ITEM[Count - 1, 0] = value; }
  21. public IGMDataItem.Text PerspectiveQuadMode { get => (IGMDataItem.Text)ITEM[3, 0]; protected set => ITEM[3, 0] = value; }
  22. public IGMDataItem.Text QuadBG { get => (IGMDataItem.Text)ITEM[2, 0]; protected set => ITEM[2, 0] = value; }
  23. public IGMDataItem.Text Reswizzle { get => (IGMDataItem.Text)ITEM[7, 0]; protected set => ITEM[7, 0] = value; }
  24. public IGMDataItem.Text WalkMesh { get => (IGMDataItem.Text)ITEM[1, 0]; protected set => ITEM[1, 0] = value; }
  25. #endregion Properties
  26. #region Methods
  27. public static FieldDebugControls Create(Rectangle pos) => Create<FieldDebugControls>(TotalRows + TotalBelow, 1, new IGMDataItem.Box { Pos = pos }, 1, TotalRows);
  28. public override bool Inputs()
  29. {
  30. Memory.IsMouseVisible = true;
  31. if (Input2.DelayedButton(MouseButtons.MiddleButton))
  32. {
  33. Debug.WriteLine($"=== Tiles Under MouseLocation: {Module.Background.MouseLocation} ===");
  34. foreach (var tile in Module.Background.TilesUnderMouse())
  35. {
  36. Debug.WriteLine(tile);
  37. }
  38. return true;
  39. }
  40. if (Input2.DelayedButton(Keys.F5))
  41. {
  42. return ReloadTexture();
  43. }
  44. return base.Inputs();
  45. }
  46. private bool ReloadTexture()
  47. {
  48. SetCursor_select(0);
  49. Inputs_OKAY();
  50. return true;
  51. }
  52. public override bool Inputs_CANCEL()
  53. {
  54. Memory.Module = OpenVIII.Module.MainMenuDebug;
  55. //System.Console.WriteLine("pressed cancel: " + (base.Inputs_CANCEL()?"true":"false"));
  56. return base.Inputs_CANCEL() || true;
  57. }
  58. public override void Inputs_Left()
  59. {
  60. if (CURSOR_SELECT == 0)
  61. {
  62. if (Memory.FieldHolder.FieldID > 0)
  63. Memory.FieldHolder.FieldID--;
  64. else
  65. Memory.FieldHolder.FieldID = checked((ushort)(Memory.FieldHolder.Fields.Length - 1));
  66. Module.ResetField();
  67. }
  68. else skipsnd = true;
  69. base.Inputs_Left();
  70. }
  71. public override bool Inputs_OKAY()
  72. {
  73. var i = 0;
  74. if (CURSOR_SELECT == i++)
  75. {
  76. Module.Background?.Dispose();//force all textures to reload.
  77. Module.ResetField();
  78. }
  79. else if (CURSOR_SELECT == i++)
  80. {
  81. Module.Toggles = Module.Toggles.Flip(Toggles.WalkMesh);
  82. Refresh();
  83. }
  84. else if (CURSOR_SELECT == i++)
  85. {
  86. Module.Toggles = Module.Toggles.Flip(Toggles.Quad);
  87. if (Module.Toggles.HasFlag(Toggles.ClassicSpriteBatch))
  88. Module.Toggles = Module.Toggles.Flip(Toggles.ClassicSpriteBatch);
  89. Refresh();
  90. }
  91. else if (CURSOR_SELECT == i++)
  92. {
  93. if (Module.Toggles.HasFlag(Toggles.Quad))
  94. {
  95. Module.Toggles = Module.Toggles.Flip(Toggles.Perspective);
  96. Refresh();
  97. }
  98. else skipsnd = true;
  99. }
  100. else if (CURSOR_SELECT == i++)
  101. {
  102. Module.Toggles = Module.Toggles.Flip(Toggles.ClassicSpriteBatch);
  103. if (Module.Toggles.HasFlag(Toggles.Quad))
  104. Module.Toggles = Module.Toggles.Flip(Toggles.Quad);
  105. if (Module.Background.HasSpriteBatchTexturesLoaded)
  106. Refresh();
  107. else
  108. Module.ResetField();
  109. }
  110. else if (CURSOR_SELECT == i++)
  111. {
  112. Module.Toggles = Module.Toggles.Flip(Toggles.DumpingData);
  113. Refresh();
  114. }
  115. else if (CURSOR_SELECT == i++)
  116. {
  117. Module.Background.Deswizzle();
  118. Refresh();
  119. }
  120. else if (CURSOR_SELECT == i)
  121. {
  122. Module.Background.Reswizzle();
  123. Refresh();
  124. }
  125. else skipsnd = true;
  126. base.Inputs_OKAY();
  127. return true;
  128. }
  129. public override void Inputs_Right()
  130. {
  131. if (CURSOR_SELECT == 0)
  132. {
  133. if (Memory.FieldHolder.FieldID < checked((ushort)(Memory.FieldHolder.Fields.Length - 1)))
  134. Memory.FieldHolder.FieldID++;
  135. else
  136. Memory.FieldHolder.FieldID = 0;
  137. Module.ResetField();
  138. }
  139. else skipsnd = true;
  140. base.Inputs_Right();
  141. }
  142. public override void Refresh()
  143. {
  144. if (_skipRefresh)
  145. {
  146. _skipRefresh = false;
  147. return;
  148. }
  149. FieldName.Data = $"Field: { Memory.FieldHolder.FieldID} - { Memory.FieldHolder.GetString()?.ToUpper()}";
  150. BLANKS[0] = false;
  151. if (Module.Mod != FieldModes.Disabled)
  152. {
  153. WalkMesh.Data = $"Draw WalkMesh: {Module.Toggles.HasFlag(Toggles.WalkMesh)}";
  154. QuadBG.Data = $"Draw Quad BG: {Module.Toggles.HasFlag(Toggles.Quad)}";
  155. PerspectiveQuadMode.Data = $"Perspective for Quads: {Module.Toggles.HasFlag(Toggles.Quad) && Module.Toggles.HasFlag(Toggles.Perspective)}";
  156. if (Module.Toggles.HasFlag(Toggles.Quad))
  157. {
  158. BLANKS[3] = false;
  159. PerspectiveQuadMode.FontColor = Font.ColorID.White;
  160. }
  161. else
  162. {
  163. BLANKS[3] = true;
  164. PerspectiveQuadMode.FontColor = Font.ColorID.Grey;
  165. }
  166. ClassicSpriteBatchMode.Data = $"Classic SpriteBatch: {Module.Toggles.HasFlag(Toggles.ClassicSpriteBatch)}";
  167. ForceDump.Data = $"Onload Dump Textures: {Module.Toggles.HasFlag(Toggles.DumpingData)}";
  168. Deswizzle.Data = "Deswizzle Tiles";
  169. Reswizzle.Data = "Reswizzle Tiles";
  170. foreach (var i in Enumerable.Range(1, Rows))
  171. {
  172. ITEM[i, 0].Show();
  173. if (i != 3)
  174. BLANKS[i] = false;
  175. }
  176. foreach (var i in Enumerable.Range(8, Rows - 8))
  177. {
  178. ITEM[i, 0].Hide();
  179. BLANKS[i] = true;
  180. }
  181. }
  182. else
  183. {
  184. foreach (var i in Enumerable.Range(1, Rows))
  185. {
  186. ITEM[i, 0].Hide();
  187. BLANKS[i] = true;
  188. }
  189. }
  190. BLANKS[Count - 1] = true;
  191. BLANKS[Count - 2] = true;
  192. AreaName.Data = Module.AreaName;
  193. base.Refresh();
  194. }
  195. public override bool Update()
  196. {
  197. MouseLocationIn3D.Data = (Module.Background?.MouseLocation ?? Vector3.Zero) != Vector3.Zero
  198. ? $"Mouse Cords: {Module.Background?.MouseLocation}"
  199. : null;
  200. return base.Update();
  201. }
  202. protected override void Init()
  203. {
  204. base.Init();
  205. foreach (var i in Enumerable.Range(0, Count))
  206. {
  207. ITEM[i, 0] = new IGMDataItem.Text { Pos = SIZE[i] };
  208. }
  209. Cursor_Status = Cursor_Status.Enabled;
  210. AreaName.Pos=
  211. MouseLocationIn3D.Pos = SIZE[Rows - 1];
  212. AreaName.Scale =
  213. MouseLocationIn3D.Scale = new Vector2(1.5f);
  214. AreaName.Y =
  215. MouseLocationIn3D.Y = Y + Height + 10;
  216. AreaName.Y += 16;
  217. _skipRefresh = true;
  218. }
  219. protected override void InitShift(int i, int col, int row)
  220. {
  221. base.InitShift(i, col, row);
  222. SIZE[i].Inflate(-22, -8);
  223. //SIZE[i].Offset(0, 12 + (-8 * row));
  224. }
  225. #endregion Methods
  226. }
  227. }