BattleMenu.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. using System;
  2. using System.Linq;
  3. using Microsoft.Xna.Framework;
  4. using OpenVIII.IGMData;
  5. using OpenVIII.IGMData.Limit;
  6. namespace OpenVIII
  7. {
  8. /// <summary>
  9. /// Character BattleMenu
  10. /// </summary>
  11. public class BattleMenu : Menu
  12. {
  13. #region Destructors
  14. ~BattleMenu()
  15. {
  16. if (Damageable != null)
  17. Damageable.BattleModeChangeEventHandler -= ModeChangeEvent;
  18. }
  19. #endregion Destructors
  20. #region Enums
  21. public enum SectionName : byte
  22. {
  23. Commands,
  24. HP,
  25. Renzokuken,
  26. Shot
  27. }
  28. #endregion Enums
  29. #region Properties
  30. public sbyte CrisisLevel => ((Commands)Data[SectionName.Commands]).CrisisLevel;
  31. public Renzokuken Renzokuken
  32. {
  33. get
  34. {
  35. if (Data.TryGetValue(SectionName.Renzokuken, out var val))
  36. return (Renzokuken)val;
  37. return null;
  38. }
  39. }
  40. public Shot Shot
  41. {
  42. get
  43. {
  44. if (Data.TryGetValue(SectionName.Shot, out var val))
  45. return (Shot)val;
  46. return null;
  47. }
  48. }
  49. #endregion Properties
  50. //private Mode _mode = Mode.Waiting;
  51. #region Methods
  52. //public BattleMenu(Damageable damageable) : base(damageable)
  53. //{
  54. //}
  55. public static BattleMenu Create(Damageable damageable) => Create<BattleMenu>(damageable);
  56. public void DrawData(SectionName v)
  57. {
  58. if (!skipdata && Enabled)
  59. foreach (var i in Data.Where(a => a.Value != null && a.Key.Equals(v)))
  60. i.Value.Draw();
  61. }
  62. public override Enum GetMode() => Damageable.GetBattleMode();
  63. public override bool Inputs()
  64. {
  65. if (Data[SectionName.Renzokuken].Enabled)
  66. return Data[SectionName.Renzokuken].Inputs();
  67. if (Data[SectionName.Shot].Enabled)
  68. return Data[SectionName.Shot].Inputs();
  69. return Data[SectionName.Commands].Inputs();
  70. }
  71. public override bool Update()
  72. {
  73. //SkipFocus = true;
  74. return base.Update();
  75. }
  76. public override void ModeChangeEvent(object sender, Enum e)
  77. {
  78. switch (e)
  79. {
  80. case Damageable.BattleMode.EndTurn:
  81. Reset();
  82. Refresh();
  83. break;
  84. }
  85. }
  86. public override void Refresh(Damageable damageable)
  87. {
  88. if (Damageable != damageable)
  89. {
  90. if (Damageable != null)
  91. Damageable.BattleModeChangeEventHandler -= ModeChangeEvent;
  92. base.Refresh(damageable);
  93. if (Damageable != null)
  94. {
  95. Damageable.BattleModeChangeEventHandler += ModeChangeEvent;
  96. SetMode(Damageable.BattleMode.ATB_Charging);
  97. }
  98. }
  99. else base.Refresh(Damageable);
  100. }
  101. public override void Reset() => base.Reset();
  102. //public override bool SetMode(Enum mode) => Damageable.SetBattleMode(mode);
  103. protected override void Init()
  104. {
  105. NoInputOnUpdate = true;
  106. Size = new Vector2 { X = 880, Y = 636 };
  107. base.Init();
  108. InitAsync();
  109. }
  110. private void InitAsync()
  111. {
  112. Memory.MainThreadOnlyActions.Enqueue(() => Data.TryAdd(SectionName.Renzokuken, Renzokuken.Create(new Rectangle(0, (int)Size.Y - 164, (int)Size.X, 124))));
  113. int width = 100, height = 100;
  114. Memory.MainThreadOnlyActions.Enqueue(() => Data.TryAdd(SectionName.Shot, Shot.Create(new Rectangle((int)Size.X - width, (int)Size.Y - 164, width, height))));
  115. var actions = new Action[]
  116. {
  117. () => Data.TryAdd(SectionName.Commands, Commands.Create(new Rectangle(50, (int)(Size.Y - 224), 210, 186), Damageable, true)),
  118. () => Data.TryAdd(SectionName.HP, NamesHPATB.Create(new Rectangle((int)(Size.X - 389), (int)(Size.Y - 164), 389, 40), Damageable))
  119. };
  120. Memory.ProcessActions(actions);
  121. }
  122. #endregion Methods
  123. }
  124. }