FieldDebugControls.cs 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  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)) return base.Inputs();
  41. SetCursor_select(0);
  42. Inputs_OKAY();
  43. return true;
  44. }
  45. public override void Inputs_Left()
  46. {
  47. if (CURSOR_SELECT == 0)
  48. {
  49. if (Memory.FieldHolder.FieldID > 0)
  50. Memory.FieldHolder.FieldID--;
  51. else
  52. Memory.FieldHolder.FieldID = checked((ushort)(Memory.FieldHolder.Fields.Length - 1));
  53. Module.ResetField();
  54. }
  55. else skipsnd = true;
  56. base.Inputs_Left();
  57. }
  58. public override bool Inputs_OKAY()
  59. {
  60. var i = 0;
  61. if (CURSOR_SELECT == i++)
  62. {
  63. Module.Background?.Dispose();//force all textures to reload.
  64. Module.ResetField();
  65. }
  66. else if (CURSOR_SELECT == i++)
  67. {
  68. Module.Toggles = Module.Toggles.Flip(Toggles.WalkMesh);
  69. Refresh();
  70. }
  71. else if (CURSOR_SELECT == i++)
  72. {
  73. Module.Toggles = Module.Toggles.Flip(Toggles.Quad);
  74. if (Module.Toggles.HasFlag(Toggles.ClassicSpriteBatch))
  75. Module.Toggles = Module.Toggles.Flip(Toggles.ClassicSpriteBatch);
  76. Refresh();
  77. }
  78. else if (CURSOR_SELECT == i++)
  79. {
  80. if (Module.Toggles.HasFlag(Toggles.Quad))
  81. {
  82. Module.Toggles = Module.Toggles.Flip(Toggles.Perspective);
  83. Refresh();
  84. }
  85. else skipsnd = true;
  86. }
  87. else if (CURSOR_SELECT == i++)
  88. {
  89. Module.Toggles = Module.Toggles.Flip(Toggles.ClassicSpriteBatch);
  90. if (Module.Toggles.HasFlag(Toggles.Quad))
  91. Module.Toggles = Module.Toggles.Flip(Toggles.Quad);
  92. if (Module.Background.HasSpriteBatchTexturesLoaded)
  93. Refresh();
  94. else
  95. Module.ResetField();
  96. }
  97. else if (CURSOR_SELECT == i++)
  98. {
  99. Module.Toggles = Module.Toggles.Flip(Toggles.DumpingData);
  100. Refresh();
  101. }
  102. else if (CURSOR_SELECT == i++)
  103. {
  104. Module.Background.Deswizzle();
  105. Refresh();
  106. }
  107. else if (CURSOR_SELECT == i)
  108. {
  109. Module.Background.Reswizzle();
  110. Refresh();
  111. }
  112. else skipsnd = true;
  113. base.Inputs_OKAY();
  114. return true;
  115. }
  116. public override void Inputs_Right()
  117. {
  118. if (CURSOR_SELECT == 0)
  119. {
  120. if (Memory.FieldHolder.FieldID < checked((ushort)(Memory.FieldHolder.Fields.Length - 1)))
  121. Memory.FieldHolder.FieldID++;
  122. else
  123. Memory.FieldHolder.FieldID = 0;
  124. Module.ResetField();
  125. }
  126. else skipsnd = true;
  127. base.Inputs_Right();
  128. }
  129. public override void Refresh()
  130. {
  131. if (_skipRefresh)
  132. {
  133. _skipRefresh = false;
  134. return;
  135. }
  136. FieldName.Data = $"Field: { Memory.FieldHolder.FieldID} - { Memory.FieldHolder.GetString()?.ToUpper()}";
  137. BLANKS[0] = false;
  138. if (Module.Mod != FieldModes.Disabled)
  139. {
  140. WalkMesh.Data = $"Draw WalkMesh: {Module.Toggles.HasFlag(Toggles.WalkMesh)}";
  141. QuadBG.Data = $"Draw Quad BG: {Module.Toggles.HasFlag(Toggles.Quad)}";
  142. PerspectiveQuadMode.Data = $"Perspective for Quads: {Module.Toggles.HasFlag(Toggles.Quad) && Module.Toggles.HasFlag(Toggles.Perspective)}";
  143. if (Module.Toggles.HasFlag(Toggles.Quad))
  144. {
  145. BLANKS[3] = false;
  146. PerspectiveQuadMode.FontColor = Font.ColorID.White;
  147. }
  148. else
  149. {
  150. BLANKS[3] = true;
  151. PerspectiveQuadMode.FontColor = Font.ColorID.Grey;
  152. }
  153. ClassicSpriteBatchMode.Data = $"Classic SpriteBatch: {Module.Toggles.HasFlag(Toggles.ClassicSpriteBatch)}";
  154. ForceDump.Data = $"Onload Dump Textures: {Module.Toggles.HasFlag(Toggles.DumpingData)}";
  155. Deswizzle.Data = "Deswizzle Tiles";
  156. Reswizzle.Data = "Reswizzle Tiles";
  157. foreach (var i in Enumerable.Range(1, Rows))
  158. {
  159. ITEM[i, 0].Show();
  160. if (i != 3)
  161. BLANKS[i] = false;
  162. }
  163. foreach (var i in Enumerable.Range(8, Rows - 8))
  164. {
  165. ITEM[i, 0].Hide();
  166. BLANKS[i] = true;
  167. }
  168. }
  169. else
  170. {
  171. foreach (var i in Enumerable.Range(1, Rows))
  172. {
  173. ITEM[i, 0].Hide();
  174. BLANKS[i] = true;
  175. }
  176. }
  177. BLANKS[Count - 1] = true;
  178. BLANKS[Count - 2] = true;
  179. AreaName.Data = Module.AreaName;
  180. base.Refresh();
  181. }
  182. public override bool Update()
  183. {
  184. MouseLocationIn3D.Data = (Module.Background?.MouseLocation ?? Vector3.Zero) != Vector3.Zero
  185. ? $"Mouse Cords: {Module.Background?.MouseLocation}"
  186. : null;
  187. return base.Update();
  188. }
  189. protected override void Init()
  190. {
  191. base.Init();
  192. foreach (var i in Enumerable.Range(0, Count))
  193. {
  194. ITEM[i, 0] = new IGMDataItem.Text { Pos = SIZE[i] };
  195. }
  196. Cursor_Status = Cursor_Status.Enabled;
  197. AreaName.Pos=
  198. MouseLocationIn3D.Pos = SIZE[Rows - 1];
  199. AreaName.Scale =
  200. MouseLocationIn3D.Scale = new Vector2(1.5f);
  201. AreaName.Y =
  202. MouseLocationIn3D.Y = Y + Height + 10;
  203. AreaName.Y += 16;
  204. _skipRefresh = true;
  205. }
  206. protected override void InitShift(int i, int col, int row)
  207. {
  208. base.InitShift(i, col, row);
  209. SIZE[i].Inflate(-22, -8);
  210. //SIZE[i].Offset(0, 12 + (-8 * row));
  211. }
  212. #endregion Methods
  213. }
  214. }