Party.cs 7.6 KB

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