Statuses.cs 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. using Microsoft.Xna.Framework;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Diagnostics.CodeAnalysis;
  5. namespace OpenVIII
  6. {
  7. public partial class IGMItems
  8. {
  9. #region Enums
  10. public enum Items
  11. {
  12. HP,
  13. LV,
  14. ForwardSlash
  15. }
  16. #endregion Enums
  17. #region Classes
  18. private class Statuses : IGMData.Base
  19. {
  20. #region Fields
  21. private bool _eventSet;
  22. [SuppressMessage("ReSharper", "NotAccessedField.Local")] private Dictionary<Items, FF8String> _misc;
  23. #endregion Fields
  24. #region Properties
  25. private bool All => (_item.ItemTarget & (ItemTarget.All | ItemTarget.All2)) != 0;
  26. private ItemInMenu _item;
  27. private Faces.ID _target = Faces.ID.Blank;
  28. #endregion Properties
  29. #region Methods
  30. [SuppressMessage("ReSharper", "MemberHidesStaticFromOuterClass")]
  31. public static Statuses Create() => Create<Statuses>(2, 4, new IGMDataItem.Box { Title = Icons.ID.STATUS, Pos = new Rectangle(420, 510, 420, 120) }, 1, 2);
  32. public override void ModeChangeEvent(object sender, Enum e)
  33. {
  34. if (!e.Equals(Mode.UseItemOnTarget))
  35. TargetChangeEvent(this, Faces.ID.Blank);
  36. }
  37. public override void Refresh()
  38. {
  39. if (IGMItems != null)
  40. {
  41. if (!_eventSet)
  42. {
  43. IGMItems.ModeChangeHandler += ModeChangeEvent;
  44. IGMItems.ChoiceChangeHandler += ChoiceChangeEvent;
  45. IGMItems.ItemPool.ItemChangeHandler += ItemChangeEvent;
  46. IGMItems.TargetChangeHandler += TargetChangeEvent;
  47. _eventSet = true;
  48. }
  49. else
  50. Fill(_target); // refresh the screen.
  51. }
  52. }
  53. protected override void Init()
  54. {
  55. _misc = new Dictionary<Items, FF8String> {
  56. { Items.HP,Memory.Strings.Read(Strings.FileID.MenuGroup,0,26)},
  57. { Items.LV,Memory.Strings.Read(Strings.FileID.MenuGroup,0,27)},
  58. { Items.ForwardSlash,Memory.Strings.Read(Strings.FileID.MenuGroup,0,25)},
  59. };
  60. base.Init();
  61. _target = Faces.ID.Blank;
  62. }
  63. protected override void InitShift(int i, int col, int row)
  64. {
  65. base.InitShift(i, col, row);
  66. SIZE[i].Inflate(-18, -20);
  67. SIZE[i].Y -= 5 * row;
  68. SIZE[i].Height = (int)(12 * TextScale.Y);
  69. }
  70. private void ChoiceChangeEvent(object sender, KeyValuePair<byte, FF8String> e)
  71. {
  72. }
  73. private void Fill(Faces.ID e)
  74. {
  75. if ((e == Faces.ID.Blank && _target != Faces.ID.Blank) || All)
  76. {
  77. _target = e;
  78. foreach (var i in ITEM)
  79. i?.Hide();
  80. }
  81. else
  82. {
  83. if (_target == Faces.ID.Blank)
  84. foreach (var i in ITEM)
  85. i?.Show();
  86. _target = e;
  87. var character = e.ToCharacters();
  88. var gf = e.ToGFs();
  89. if (character != Characters.Blank || (gf != GFs.Blank && gf != GFs.All))
  90. {
  91. ITEM[0, 0] = new IGMDataItem.Text { Data = Strings.Name.LV, Pos = new Rectangle(SIZE[0].X, SIZE[0].Y, 0, 0) };
  92. ITEM[1, 0] = new IGMDataItem.Text { Data = Strings.Name.HP, Pos = new Rectangle(SIZE[1].X, SIZE[1].Y, 0, 0) };
  93. ITEM[1, 2] = new IGMDataItem.Text { Data = Strings.Name.ForwardSlash, Pos = new Rectangle(SIZE[1].X + 155, SIZE[1].Y, 0, 0) };
  94. }
  95. if (Memory.State.Characters && character != Characters.Blank)
  96. {
  97. ITEM[0, 1] = new IGMDataItem.Integer { Data = Memory.State[character].Level, Pos = new Rectangle(SIZE[0].X + 35, SIZE[0].Y, 0, 0), Palette = 13, NumType = Icons.NumType.SysFntBig, Padding = 1, Spaces = 6 };
  98. ITEM[0, 2] = Memory.State.Party != null && Memory.State.Party.Contains(character)
  99. ? new IGMDataItem.Icon { Data = Icons.ID.InParty, Pos = new Rectangle(SIZE[0].X + 155, SIZE[0].Y, 0, 0), Palette = 6 }
  100. : null;
  101. ITEM[1, 1] = new IGMDataItem.Integer { Data = Memory.State[character].CurrentHP(character), Pos = new Rectangle(SIZE[1].X + 35, SIZE[1].Y, 0, 0), Palette = 13, NumType = Icons.NumType.SysFntBig, Padding = 1, Spaces = 6 };
  102. ITEM[1, 3] = new IGMDataItem.Integer { Data = Memory.State[character].MaxHP(character), Pos = new Rectangle(SIZE[1].X + 155, SIZE[1].Y, 0, 0), Palette = 13, NumType = Icons.NumType.SysFntBig, Padding = 1, Spaces = 5 };
  103. }
  104. if (Memory.State.GFs == null || (gf == GFs.Blank || gf == GFs.All)) return;
  105. ITEM[0, 1] = new IGMDataItem.Integer { Data = Memory.State.GFs[gf].Level, Pos = new Rectangle(SIZE[0].X + 35, SIZE[0].Y, 0, 0), Palette = 13, NumType = Icons.NumType.SysFntBig, Padding = 1, Spaces = 6 };
  106. ITEM[0, 2] = null;
  107. ITEM[1, 1] = new IGMDataItem.Integer { Data = Memory.State.GFs[gf].CurrentHP(), Pos = new Rectangle(SIZE[1].X + 35, SIZE[1].Y, 0, 0), Palette = 13, NumType = Icons.NumType.SysFntBig, Padding = 1, Spaces = 6 };
  108. ITEM[1, 3] = new IGMDataItem.Integer { Data = Memory.State.GFs[gf].MaxHP(), Pos = new Rectangle(SIZE[1].X + 155, SIZE[1].Y, 0, 0), Palette = 13, NumType = Icons.NumType.SysFntBig, Padding = 1, Spaces = 5 };
  109. }
  110. }
  111. private void ItemChangeEvent(object sender, KeyValuePair<ItemInMenu, FF8String> e) => _item = e.Key;
  112. private void TargetChangeEvent(object sender, Faces.ID e) => Fill(e);
  113. #endregion Methods
  114. }
  115. #endregion Classes
  116. }
  117. }