IGM_Items.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. using Microsoft.Xna.Framework;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Threading.Tasks;
  5. namespace OpenVIII
  6. {
  7. public partial class IGM_Items : Menu
  8. {
  9. #region Fields
  10. protected Dictionary<Mode, Func<bool>> InputsDict;
  11. #endregion Fields
  12. #region Events
  13. public event EventHandler<KeyValuePair<byte, FF8String>> ChoiceChangeHandler;
  14. public event EventHandler RefreshCompletedHandler;
  15. public event EventHandler<Faces.ID> TargetChangeHandler;
  16. #endregion Events
  17. #region Enums
  18. public enum Mode : byte
  19. {
  20. /// <summary>
  21. /// Select one of the 4 top options to do
  22. /// </summary>
  23. TopMenu,
  24. /// <summary>
  25. /// Choose an item to use
  26. /// </summary>
  27. SelectItem,
  28. /// <summary>
  29. /// Choose a character or gf to use item on
  30. /// </summary>
  31. UseItemOnTarget,
  32. }
  33. public enum SectionName : byte
  34. {
  35. TopMenu,
  36. UseItemGroup,
  37. Help,
  38. Title,
  39. }
  40. #endregion Enums
  41. #region Properties
  42. public IGMData.Pool.Item ItemPool => ((IGMData.Pool.Item)((IGMData.Group.Base)Data[SectionName.UseItemGroup])[1, 0]);
  43. private IGMDataItem.HelpBox help => (IGMDataItem.HelpBox)Data[SectionName.Help];
  44. #endregion Properties
  45. #region Methods
  46. public static IGM_Items Create() => Create<IGM_Items>();
  47. public override bool Inputs() => InputsDict[(Mode)GetMode()]();
  48. public override void Refresh() => Refresh(false);
  49. public new void Refresh(bool skipmode)
  50. {
  51. if (!skipmode)
  52. SetMode(Mode.SelectItem);
  53. base.Refresh();
  54. RefreshCompletedHandler?.Invoke(this, null);
  55. }
  56. protected override void Init()
  57. {
  58. Size = new Vector2 { X = 840, Y = 630 };
  59. base.Init();
  60. List<Task> tasks = new List<Task>
  61. {
  62. Task.Run(() => Data.TryAdd(SectionName.Help, new IGMDataItem.HelpBox { Pos = new Rectangle(15, 69, 810, 78), Title = Icons.ID.HELP, Options = Box_Options.Middle})),
  63. Task.Run(() => Data.TryAdd(SectionName.TopMenu, IGMData_TopMenu.Create(new Dictionary<FF8String, FF8String>() {
  64. { Memory.Strings.Read(Strings.FileID.MNGRP, 2, 179),Memory.Strings.Read(Strings.FileID.MNGRP, 2, 180)},
  65. { Memory.Strings.Read(Strings.FileID.MNGRP, 2, 183),Memory.Strings.Read(Strings.FileID.MNGRP, 2, 184)},
  66. { Memory.Strings.Read(Strings.FileID.MNGRP, 2, 202),Memory.Strings.Read(Strings.FileID.MNGRP, 2, 203)},
  67. { Memory.Strings.Read(Strings.FileID.MNGRP, 2, 181),Memory.Strings.Read(Strings.FileID.MNGRP, 2, 182)}}))),
  68. Task.Run(() => Data.TryAdd(SectionName.Title, new IGMDataItem.Box { Data = Memory.Strings.Read(Strings.FileID.MNGRP, 0, 2), Pos = new Rectangle(615, 0, 225, 66)})),
  69. Task.Run(() => Data.TryAdd(SectionName.UseItemGroup, IGMData.Group.Base.Create(IGMData_Statuses.Create(),IGMData.Pool.Item.Create(),IGMData_TargetPool.Create())))
  70. };
  71. Task.WaitAll(tasks.ToArray());
  72. ChoiceChangeHandler = help.TextChangeEvent;
  73. ItemPool.ItemChangeHandler += help.TextChangeEvent;
  74. ModeChangeHandler += help.ModeChangeEvent;
  75. InputsDict = new Dictionary<Mode, Func<bool>>() {
  76. {Mode.TopMenu, Data[SectionName.TopMenu].Inputs},
  77. {Mode.SelectItem, ((IGMData.Base)((IGMData.Group.Base)Data[SectionName.UseItemGroup]).ITEM[1,0]).Inputs},
  78. {Mode.UseItemOnTarget, ((IGMData.Base)((IGMData.Group.Base)Data[SectionName.UseItemGroup]).ITEM[2,0]).Inputs}
  79. };
  80. SetMode(Mode.SelectItem);
  81. }
  82. #endregion Methods
  83. }
  84. }