Bullet.cs 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. using System.Linq;
  2. using Microsoft.Xna.Framework;
  3. using OpenVIII.IGMDataItem;
  4. namespace OpenVIII.IGMData.Pool
  5. {
  6. public class Bullet : Base<Damageable, ItemInMenu>
  7. {
  8. #region Properties
  9. protected Target.Group Target_Group { get => ((Target.Group)ITEM[Count - 3, 0]); private set => ITEM[Count - 3, 0] = value; }
  10. #endregion Properties
  11. #region Methods
  12. public static Bullet Create(Rectangle pos, Damageable damageable = null, bool battle = false, int count = 4)
  13. {
  14. var r = Create<Bullet>(count + 1, 2, new Box { Pos = pos, Title = Icons.ID.SPECIAL }, count, 1, damageable, battle: battle);
  15. if (battle)
  16. r.Target_Group = Target.Group.Create(r.Damageable);
  17. return r;
  18. }
  19. public override bool Inputs()
  20. {
  21. var ret = false;
  22. if (InputITEM(Target_Group, ref ret))
  23. { }
  24. else
  25. {
  26. Cursor_Status |= Cursor_Status.Enabled;
  27. return base.Inputs();
  28. }
  29. return ret;
  30. }
  31. public override bool Inputs_CANCEL()
  32. {
  33. base.Inputs_CANCEL();
  34. Hide();
  35. return true;
  36. }
  37. public override bool Inputs_OKAY()
  38. {
  39. base.Inputs_OKAY();
  40. var item = Contents[CURSOR_SELECT];
  41. if (!BLANKS[CURSOR_SELECT])
  42. {
  43. Target_Group?.SelectTargetWindows(item, true);
  44. Target_Group?.ShowTargetWindows();
  45. }
  46. return true;
  47. }
  48. public override void Refresh()
  49. {
  50. if (Memory.State?.Items != null)
  51. {
  52. var ammo = Memory.State.Items.Where(x => x.Data != null && x.QTY > 0 && x.Data?.ItemType == ItemType.Ammo).OrderBy(x => x.ID).ToList();
  53. var i = 0;
  54. var skip = Page * Rows;
  55. bool AddItem(Saves.Item item)
  56. {
  57. if (i >= Rows) return false;
  58. if (skip-- <= 0)
  59. {
  60. ((Text)ITEM[i, 0]).Data = item.Data?.Name ?? null;
  61. ((Text)ITEM[i, 0]).Icon = item.Data?.Icon ?? null;
  62. ((Integer)ITEM[i, 1]).Data = item.QTY;
  63. Contents[i] = item.Data ?? default;
  64. BLANKS[i] = false;
  65. ITEM[i, 0].Show();
  66. ITEM[i, 1].Show();
  67. i++;
  68. }
  69. return true;
  70. }
  71. foreach (var bullet in ammo)
  72. AddItem(bullet);
  73. DefaultPages = ammo.Count / Rows;
  74. for (; i < Rows; i++)
  75. {
  76. BLANKS[i] = true;
  77. ITEM[i, 0].Hide();
  78. ITEM[i, 1].Hide();
  79. }
  80. }
  81. UpdateTitle();
  82. base.Refresh();
  83. }
  84. public override void Reset()
  85. {
  86. Hide();
  87. base.Reset();
  88. }
  89. public override void UpdateTitle()
  90. {
  91. base.UpdateTitle();
  92. if (Pages == 1)
  93. {
  94. ((Box)CONTAINER).Title = Icons.ID.SPECIAL;
  95. }
  96. else
  97. switch (Page)
  98. {
  99. case 0:
  100. ((Box)CONTAINER).Title = Icons.ID.SPECIAL_PG1;
  101. break;
  102. case 1:
  103. ((Box)CONTAINER).Title = Icons.ID.SPECIAL_PG2;
  104. break;
  105. case 2:
  106. ((Box)CONTAINER).Title = Icons.ID.SPECIAL_PG3;
  107. break;
  108. case 3:
  109. ((Box)CONTAINER).Title = Icons.ID.SPECIAL_PG4;
  110. break;
  111. default:
  112. ((Box)CONTAINER).Title = Icons.ID.SPECIAL;
  113. break;
  114. }
  115. }
  116. protected override void Init()
  117. {
  118. base.Init();
  119. const int widthofnumber = 60;
  120. for (var i = 0; i < Rows; i++)
  121. {
  122. ITEM[i, 0] = new Text
  123. {
  124. Pos = SIZE[i]
  125. };
  126. ITEM[i, 0].Hide();
  127. ITEM[i, 1] = new Integer
  128. {
  129. Pos = new Rectangle(SIZE[i].Right - widthofnumber, SIZE[i].Top, widthofnumber, SIZE[i].Height),
  130. NumType = Icons.NumType.SysFntBig,
  131. Spaces = 3
  132. };
  133. ITEM[i, 1].Hide();
  134. }
  135. ITEM[Rows, 1] = new Icon
  136. {
  137. Data = Icons.ID.NUM_,
  138. Pos = new Rectangle(SIZE[0].Right - widthofnumber, CONTAINER.Pos.Top, widthofnumber, SIZE[0].Height)
  139. };
  140. }
  141. protected override void InitShift(int i, int col, int row)
  142. {
  143. base.InitShift(i, col, row);
  144. SIZE[i].Inflate(-22, -8);
  145. SIZE[i].Offset(0, 12 + (-8 * row));
  146. SIZE[i].Height = (int)(12 * TextScale.Y);
  147. }
  148. protected override void PAGE_NEXT()
  149. {
  150. base.PAGE_NEXT();
  151. Refresh();
  152. }
  153. protected override void PAGE_PREV()
  154. {
  155. base.PAGE_PREV();
  156. Refresh();
  157. }
  158. #endregion Methods
  159. }
  160. }