IGMData_Party.cs 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  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_Party : IGMData.Base
  10. {
  11. #region Fields
  12. private bool skipReInit = false;
  13. private Dictionary<Enum, FF8String> strings;
  14. private int vSpace;
  15. #endregion Fields
  16. #region Properties
  17. public Damageable[] Contents { get; private set; }
  18. #endregion Properties
  19. #region Methods
  20. public static IGMData_Party Create() => Create<IGMData_Party>(3, 12, new IGMDataItem.Empty(), 1, 3);
  21. public override void Refresh()
  22. {
  23. if (Memory.State.Characters != null && !skipReInit)
  24. {
  25. //skipReInit = true;
  26. //IGMDataItem.Empty c;
  27. if (!Memory.State.TeamLaguna && !Memory.State.SmallTeam)
  28. {
  29. CONTAINER.Pos = new Rectangle { Width = 580, Height = 234, X = 20, Y = 84 };
  30. vSpace = 0;
  31. }
  32. else
  33. {
  34. CONTAINER.Pos = new Rectangle { Width = 580, Height = 462, X = 20, Y = 84 };
  35. vSpace = 6;
  36. }
  37. InitSize(true);
  38. if (Memory.State.Characters != null)
  39. {
  40. bool ret = base.Update();
  41. for (sbyte i = 0; Memory.State.PartyData != null && i < SIZE.Length; i++)
  42. {
  43. Characters cid = Memory.State.PartyData[i];
  44. if (cid != Characters.Blank)
  45. RefreshCharacter(i, Memory.State[cid]);
  46. else
  47. BlankArea(i);
  48. }
  49. }
  50. skipReInit = false;
  51. }
  52. }
  53. protected override void Init()
  54. {
  55. Contents = new Damageable[Count];
  56. base.Init();
  57. for (int pos = 0; pos < Count; pos++)
  58. {
  59. ITEM[pos, 0] = new IGMDataItem.Box { Title = Icons.ID.STATUS };
  60. ITEM[pos, 1] = new IGMDataItem.Icon { Data = Icons.ID.Lv, Palette = 13 };
  61. ITEM[pos, 2] = new IGMDataItem.Integer { Palette = 2, Faded_Palette = 0, Padding = 1, Spaces = 3 };
  62. ITEM[pos, 3] = new IGMDataItem.Icon { Data = Icons.ID.HP2, Palette = 13 };
  63. ITEM[pos, 4] = new IGMDataItem.Integer { Palette = 2, Faded_Palette = 0, Padding = 1, Spaces = 4 };
  64. ITEM[pos, 5] = new IGMDataItem.Icon { Data = Icons.ID.Slash_Forward, Palette = 13 };
  65. ITEM[pos, 6] = new IGMDataItem.Integer { Palette = 2, Faded_Palette = 0, Padding = 1, Spaces = 4 };
  66. ITEM[pos, 7] = new IGMDataItem.Text { };
  67. ITEM[pos, 8] = new IGMDataItem.Integer { Palette = 2, Faded_Palette = 0, Padding = 1, Spaces = 9 };
  68. ITEM[pos, 9] = new IGMDataItem.Icon { Data = Icons.ID.P, Palette = 2 };
  69. ITEM[pos, 10] = new IGMDataItem.Integer { Palette = 2, Faded_Palette = 0, Padding = 1, Spaces = 9 };
  70. ITEM[pos, 11] = new IGMDataItem.Icon { Data = Icons.ID.P, Palette = 2 };
  71. for (int i = 0; i < Depth; i++)
  72. ITEM[pos, i].Hide();
  73. }
  74. }
  75. protected override void InitShift(int i, int col, int row)
  76. {
  77. base.InitShift(i, col, row);
  78. SIZE[i].Height -= vSpace;
  79. }
  80. private void BlankArea(sbyte pos)
  81. {
  82. ((IGMDataItem.Box)ITEM[pos, 0]).Data = "";
  83. ((IGMDataItem.Box)ITEM[pos, 0]).Title = Icons.ID.None;
  84. ((IGMDataItem.Box)ITEM[pos, 0]).Pos = SIZE[pos];
  85. ((IGMDataItem.Box)ITEM[pos, 0]).Show();
  86. BLANKS[pos] = true;
  87. for (int i = 1; i < Depth; i++)
  88. {
  89. ITEM[pos, i].Hide();
  90. }
  91. }
  92. private void RefreshCharacter(sbyte pos, Damageable damageable)
  93. {
  94. if (SIZE != null)
  95. {
  96. ((IGMDataItem.Box)ITEM[pos, 0]).Pos = SIZE[pos];
  97. if (damageable != null)
  98. {
  99. Contents[pos] = damageable;
  100. float yoff = 6;
  101. ((IGMDataItem.Box)ITEM[pos, 0]).Data = damageable.Name;
  102. ((IGMDataItem.Box)ITEM[pos, 0]).Title = Icons.ID.STATUS;
  103. BoxReturn dims = DrawBox(SIZE[pos], ((IGMDataItem.Box)ITEM[pos, 0]).Data, options: Box_Options.SkipDraw);
  104. Rectangle r = dims.Font;
  105. CURSOR[pos] = dims.Cursor;
  106. r = dims.Font;
  107. r.Offset(184, yoff);
  108. ((IGMDataItem.Icon)ITEM[pos, 1]).Pos = r;
  109. r = dims.Font;
  110. r.Offset((229), yoff);
  111. ((IGMDataItem.Integer)ITEM[pos, 2]).Data = damageable.Level;
  112. ((IGMDataItem.Integer)ITEM[pos, 2]).Pos = r;
  113. r = dims.Font;
  114. r.Offset(304, yoff);
  115. ((IGMDataItem.Icon)ITEM[pos, 3]).Pos = r;
  116. r = dims.Font;
  117. r.Offset((354), yoff);
  118. ((IGMDataItem.Integer)ITEM[pos, 4]).Data = damageable.CurrentHP();
  119. ((IGMDataItem.Integer)ITEM[pos, 4]).Pos = r;
  120. r = dims.Font;
  121. r.Offset(437, yoff);
  122. ((IGMDataItem.Icon)ITEM[pos, 5]).Pos = r;
  123. r = dims.Font;
  124. r.Offset((459), yoff);
  125. ((IGMDataItem.Integer)ITEM[pos, 6]).Data = damageable.MaxHP();
  126. ((IGMDataItem.Integer)ITEM[pos, 6]).Pos = r;
  127. for (int i = 0; i <= 6; i++)
  128. ITEM[pos, i].Show();
  129. if ((Memory.State.TeamLaguna || Memory.State.SmallTeam) && damageable.GetCharacterData(out Saves.CharacterData c))
  130. {
  131. BLANKS[pos] = false;
  132. r = dims.Font;
  133. r.Offset(145, 36);
  134. FF8String s = Strings.Name.CurrentEXP + "\n" + Strings.Name.NextLEVEL;
  135. ((IGMDataItem.Text)ITEM[pos, 7]).Data = s;
  136. ((IGMDataItem.Text)ITEM[pos, 7]).Pos = r;
  137. r = dims.Font;
  138. r.Offset((340), 42);
  139. ((IGMDataItem.Integer)ITEM[pos, 8]).Data = checked((int)c.Experience);
  140. ((IGMDataItem.Integer)ITEM[pos, 8]).Pos = r;
  141. r = dims.Font;
  142. r.Offset(520, 42);
  143. ((IGMDataItem.Icon)ITEM[pos, 9]).Pos = r;
  144. r = dims.Font;
  145. r.Offset((340), 75);
  146. ((IGMDataItem.Integer)ITEM[pos, 10]).Data = c.ExperienceToNextLevel;
  147. ((IGMDataItem.Integer)ITEM[pos, 10]).Pos = r;
  148. r = dims.Font;
  149. r.Offset(520, 75);
  150. ((IGMDataItem.Icon)ITEM[pos, 11]).Pos = r;
  151. for (int i = 7; i < Depth; i++)
  152. ITEM[pos, i].Show();
  153. }
  154. else
  155. for (int i = 7; i < Depth; i++)
  156. ITEM[pos, i].Hide();
  157. }
  158. else
  159. {
  160. BlankArea(pos);
  161. }
  162. }
  163. }
  164. #endregion Methods
  165. }
  166. #endregion Classes
  167. }
  168. }