IGM_Items.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. using Microsoft.Xna.Framework;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Diagnostics;
  5. using System.Linq;
  6. using System.Threading.Tasks;
  7. namespace OpenVIII
  8. {
  9. public partial class IGMItems : Menu
  10. {
  11. #region Fields
  12. protected Dictionary<Mode, Func<bool>> InputsDict;
  13. #endregion Fields
  14. #region Events
  15. public event EventHandler<KeyValuePair<byte, FF8String>> ChoiceChangeHandler;
  16. public event EventHandler RefreshCompletedHandler;
  17. public event EventHandler<Faces.ID> TargetChangeHandler;
  18. #endregion Events
  19. #region Enums
  20. public enum Mode : byte
  21. {
  22. /// <summary>
  23. /// Select one of the 4 top options to do
  24. /// </summary>
  25. TopMenu,
  26. /// <summary>
  27. /// Choose an item to use
  28. /// </summary>
  29. SelectItem,
  30. /// <summary>
  31. /// Choose a character or gf to use item on
  32. /// </summary>
  33. UseItemOnTarget,
  34. }
  35. public enum SectionName : byte
  36. {
  37. TopMenu,
  38. UseItemGroup,
  39. Help,
  40. Title,
  41. }
  42. #endregion Enums
  43. #region Properties
  44. public IGMData.Pool.Item ItemPool => ((IGMData.Pool.Item)((IGMData.Group.Base)Data[SectionName.UseItemGroup])[1, 0]);
  45. private IGMDataItem.HelpBox help => (IGMDataItem.HelpBox)Data[SectionName.Help];
  46. #endregion Properties
  47. #region Methods
  48. public static IGMItems Create() => Create<IGMItems>();
  49. public override bool Inputs() => InputsDict[(Mode)GetMode()]();
  50. public override void Refresh() => Refresh(false);
  51. public new void Refresh(bool skipmode)
  52. {
  53. if (!skipmode)
  54. SetMode(Mode.SelectItem);
  55. base.Refresh();
  56. RefreshCompletedHandler?.Invoke(this, null);
  57. }
  58. protected override void Init()
  59. {
  60. Size = new Vector2 { X = 840, Y = 630 };
  61. base.Init();
  62. var actions = new Action[]
  63. {
  64. () => Data.TryAdd(SectionName.Help, new IGMDataItem.HelpBox { Pos = new Rectangle(15, 69, 810, 78), Title = Icons.ID.HELP, Options = Box_Options.Middle}),
  65. () => {
  66. var keys = new FF8String[]{
  67. Strings.Name.Use, //todo add to Strings.Name
  68. Strings.Name.Rearrange,
  69. Strings.Name.Sort,
  70. Strings.Name.Battle };
  71. var values = new FF8String[]{
  72. Strings.Description.Use, //todo add to Strings.Description
  73. Strings.Description.Rearrange,
  74. Strings.Description.Sort,
  75. Strings.Description.Battle};
  76. if(keys.Distinct().Count() == keys.Length && keys.Length == values.Length)
  77. Data.TryAdd(SectionName.TopMenu, TopMenu.Create((from i in Enumerable.Range(0,keys.Length) select i).ToDictionary(x=>keys[x],x=>values[x])));
  78. else Data.TryAdd(SectionName.TopMenu, null);
  79. },
  80. () => Data.TryAdd(SectionName.Title, new IGMDataItem.Box { Data = Memory.Strings.Read(Strings.FileID.MenuGroup, 0, 2), Pos = new Rectangle(615, 0, 225, 66)}),
  81. () => Data.TryAdd(SectionName.UseItemGroup, IGMData.Group.Base.Create(Statuses.Create(),IGMData.Pool.Item.Create(),TargetPool.Create()))
  82. };
  83. Memory.ProcessActions(actions);
  84. ChoiceChangeHandler = help.TextChangeEvent;
  85. ItemPool.ItemChangeHandler += help.TextChangeEvent;
  86. ModeChangeHandler += help.ModeChangeEvent;
  87. Func<bool> TopMenuInputs = null;
  88. if (Data[SectionName.TopMenu] != null)
  89. TopMenuInputs = Data[SectionName.TopMenu].Inputs;
  90. InputsDict = new Dictionary<Mode, Func<bool>>() {
  91. {Mode.TopMenu, TopMenuInputs},
  92. {Mode.SelectItem, UseItemGroup.ITEM[1, 0].Inputs},
  93. {Mode.UseItemOnTarget, UseItemGroup.ITEM[2, 0].Inputs}
  94. };
  95. SetMode(Mode.SelectItem);
  96. }
  97. private IGMData.Base UseItemGroup=> (IGMData.Group.Base)Data[SectionName.UseItemGroup];
  98. #endregion Methods
  99. }
  100. }