IGMData_SideMenu.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. using Microsoft.Xna.Framework;
  2. using System;
  3. using System.Collections.Generic;
  4. namespace OpenVIII
  5. {
  6. public partial class IGM
  7. {
  8. #region Classes
  9. private class IGMData_SideMenu : IGMData.Base
  10. {
  11. #region Fields
  12. private FF8String[] _helpStr;
  13. private int avgheight;
  14. private int avgwidth;
  15. private bool eventSet = false;
  16. private int largestheight;
  17. private int largestwidth;
  18. private int totalheight;
  19. private int totalwidth;
  20. private int[] widths;
  21. #endregion Fields
  22. #region Methods
  23. public static IGMData_SideMenu Create(IReadOnlyDictionary<FF8String, FF8String> pairs)
  24. {
  25. IGMData_SideMenu r = new IGMData_SideMenu
  26. {
  27. _helpStr = new FF8String[pairs.Count],
  28. widths = new int[pairs.Count]
  29. };
  30. byte pos = 0;
  31. foreach (KeyValuePair<FF8String, FF8String> pair in pairs)
  32. {
  33. r._helpStr[pos] = pair.Value;
  34. Rectangle rectangle = Memory.font.RenderBasicText(pair.Key, 0, 0, skipdraw: true);
  35. r.widths[pos] = rectangle.Width;
  36. if (rectangle.Width > r.largestwidth) r.largestwidth = rectangle.Width;
  37. if (rectangle.Height > r.largestheight) r.largestheight = rectangle.Height;
  38. r.totalwidth += rectangle.Width;
  39. r.totalheight += rectangle.Height;
  40. r.avgwidth = r.totalwidth / (pos + 1);
  41. r.avgheight = r.totalheight / (pos + 1);
  42. pos++;
  43. }
  44. r.Init(pairs.Count, 1, new IGMDataItem.Box { Pos = new Rectangle { Width = 226, Height = 492, X = 843 - 226 } }, 1, pairs.Count);
  45. pos = 0;
  46. foreach (KeyValuePair<FF8String, FF8String> pair in pairs)
  47. {
  48. r.ITEM[pos, 0] = new IGMDataItem.Text { Data = pair.Key, Pos = new Rectangle(r.SIZE[pos].X, r.SIZE[pos].Y, 0, 0) };
  49. pos++;
  50. }
  51. r.Cursor_Status |= (Cursor_Status.Enabled | Cursor_Status.Vertical | Cursor_Status.Horizontal);
  52. return r;
  53. }
  54. public override bool Inputs()
  55. {
  56. Cursor_Status &= ~Cursor_Status.Blinking;
  57. return base.Inputs();
  58. }
  59. public override bool Inputs_CANCEL()
  60. {
  61. base.Inputs_CANCEL();
  62. FadeIn();
  63. Menu.Module.State = MenuModule.Mode.LoadGameChooseGame;
  64. return true;
  65. }
  66. public override bool Inputs_OKAY()
  67. {
  68. base.Inputs_OKAY();
  69. switch ((Items)CURSOR_SELECT)
  70. {
  71. case Items.Junction:
  72. case Items.Magic:
  73. case Items.Status:
  74. IGM.SetMode(Mode.ChooseChar);
  75. return true;
  76. case Items.Item:
  77. Menu.Module.State = MenuModule.Mode.IGM_Items;
  78. IGM_Items.Refresh();
  79. return true;
  80. case Items.Battle:
  81. BattleMenus.CameFrom();
  82. //Menu.Module.State = MenuModule.MainMenuStates.BattleMenu;
  83. Memory.Module = MODULE.BATTLE_DEBUG;
  84. BattleMenus.Refresh();
  85. FadeIn();
  86. return true;
  87. }
  88. return false;
  89. }
  90. public override void ModeChangeEvent(object sender, Enum e)
  91. {
  92. if (!e.Equals(Mode.ChooseItem))
  93. {
  94. Cursor_Status |= Cursor_Status.Blinking;
  95. }
  96. }
  97. public override void Refresh()
  98. {
  99. if (!eventSet && IGM != null)
  100. {
  101. IGM.ModeChangeHandler += ModeChangeEvent;
  102. eventSet = true;
  103. }
  104. IGM?.ChoiceChangeHandler?.Invoke(this, new KeyValuePair<Items, FF8String>((Items)CURSOR_SELECT, _helpStr[CURSOR_SELECT]));
  105. base.Refresh();
  106. }
  107. protected override void InitShift(int i, int col, int row)
  108. {
  109. //SIZE[i].Inflate((SIZE[i].Width - largestwidth) / -2, 0); // center
  110. SIZE[i].Inflate(-20, 0);
  111. SIZE[i].Y += SIZE[i].Height / 2 - largestheight / 2 + 5;
  112. //SIZE[i].Width = largestwidth;
  113. SIZE[i].Height = largestheight;
  114. }
  115. protected override void SetCursor_select(int value)
  116. {
  117. if (!value.Equals(GetCursor_select()))
  118. {
  119. base.SetCursor_select(value);
  120. IGM?.ChoiceChangeHandler?.Invoke(this, new KeyValuePair<Items, FF8String>((Items)value, _helpStr[value]));
  121. }
  122. }
  123. private void ChoiceChangeEvent(object sender, FF8String e) => ((IGMDataItem.Box)CONTAINER).Data = e;
  124. #endregion Methods
  125. }
  126. #endregion Classes
  127. }
  128. }