EnemyAttacks.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using Microsoft.Xna.Framework;
  4. using OpenVIII.IGMDataItem;
  5. using OpenVIII.Kernel;
  6. namespace OpenVIII.IGMData.Pool
  7. {
  8. public sealed class EnemyAttacks : Base<Enemy, EnemyAttacksData>
  9. {
  10. #region Properties
  11. private Target.Group TargetGroup { get => ((Target.Group)ITEM[Count - 3, 0]);
  12. set => ITEM[Count - 3, 0] = value; }
  13. #endregion Properties
  14. #region Methods
  15. public static EnemyAttacks Create(Rectangle pos, Damageable damageable = null, bool battle = false, int count = 4)
  16. {
  17. var r = Create<EnemyAttacks>(count + 1, 1, new Box { Pos = pos, Title = Icons.ID.ABILITY }, count, 1, damageable, battle: battle);
  18. if (battle)
  19. r.TargetGroup = Target.Group.Create(r.Damageable);
  20. return r;
  21. }
  22. public override bool Inputs()
  23. {
  24. var ret = false;
  25. if (InputITEM(TargetGroup, ref ret))
  26. { }
  27. else
  28. {
  29. Cursor_Status |= Cursor_Status.Enabled;
  30. return base.Inputs();
  31. }
  32. return ret;
  33. }
  34. public override bool Inputs_CANCEL()
  35. {
  36. base.Inputs_CANCEL();
  37. Hide();
  38. return true;
  39. }
  40. public override bool Inputs_OKAY()
  41. {
  42. base.Inputs_OKAY();
  43. var enemyAttacksData = Contents[CURSOR_SELECT];
  44. if (enemyAttacksData == null) return true;
  45. TargetGroup?.SelectTargetWindows(enemyAttacksData);
  46. TargetGroup?.ShowTargetWindows();
  47. return true;
  48. }
  49. public override void Refresh()
  50. {
  51. if (Damageable != null && Damageable.GetEnemy(out var e))
  52. {
  53. IEnumerable<EnemyAttacksData> enemyAttacksDatas = e.EnemyAttacksDatas as EnemyAttacksData[] ?? e.EnemyAttacksDatas.ToArray();
  54. DefaultPages = enemyAttacksDatas.Count() / Rows;
  55. var i = 0;
  56. var skip = Page * Rows;
  57. foreach (var enemyAttacksData in enemyAttacksDatas)
  58. {
  59. if (i >= Rows) break;
  60. if (skip-- > 0) continue;
  61. ((Text)ITEM[i, 0]).Data = enemyAttacksData.Name;
  62. ITEM[i, 0].Show();
  63. BLANKS[i] = false;
  64. Contents[i] = enemyAttacksData;
  65. i++;
  66. }
  67. for (; i < Rows; i++)
  68. {
  69. ITEM[i, 0].Hide();
  70. BLANKS[i] = true;
  71. Contents[i] = null;
  72. }
  73. }
  74. base.Refresh();
  75. }
  76. public override void Reset()
  77. {
  78. Hide();
  79. base.Reset();
  80. }
  81. protected override void Init()
  82. {
  83. base.Init();
  84. for (var i = 0; i < Rows; i++)
  85. {
  86. ITEM[i, 0] = new Text
  87. {
  88. Pos = SIZE[i]
  89. };
  90. ITEM[i, 0].Hide();
  91. }
  92. }
  93. protected override void InitShift(int i, int col, int row)
  94. {
  95. base.InitShift(i, col, row);
  96. SIZE[i].Inflate(-22, -8);
  97. SIZE[i].Offset(0, 12 + (-8 * row));
  98. SIZE[i].Height = (int)(12 * TextScale.Y);
  99. }
  100. protected override void PAGE_NEXT()
  101. {
  102. base.PAGE_NEXT();
  103. Refresh();
  104. }
  105. protected override void PAGE_PREV()
  106. {
  107. base.PAGE_PREV();
  108. Refresh();
  109. }
  110. #endregion Methods
  111. }
  112. }