using System; using System.Linq; using Microsoft.Xna.Framework; using OpenVIII.IGMData; using OpenVIII.IGMData.Limit; namespace OpenVIII { /// /// Character BattleMenu /// public class BattleMenu : Menu { #region Destructors ~BattleMenu() { if (Damageable != null) Damageable.BattleModeChangeEventHandler -= ModeChangeEvent; } #endregion Destructors #region Enums public enum SectionName : byte { Commands, HP, Renzokuken, Shot } #endregion Enums #region Properties public sbyte CrisisLevel => ((Commands)Data[SectionName.Commands]).CrisisLevel; public Renzokuken Renzokuken { get { if (Data.TryGetValue(SectionName.Renzokuken, out var val)) return (Renzokuken)val; return null; } } public Shot Shot { get { if (Data.TryGetValue(SectionName.Shot, out var val)) return (Shot)val; return null; } } #endregion Properties //private Mode _mode = Mode.Waiting; #region Methods //public BattleMenu(Damageable damageable) : base(damageable) //{ //} public static BattleMenu Create(Damageable damageable) => Create(damageable); public void DrawData(SectionName v) { if (!skipdata && Enabled) foreach (var i in Data.Where(a => a.Value != null && a.Key.Equals(v))) i.Value.Draw(); } public override Enum GetMode() => Damageable.GetBattleMode(); public override bool Inputs() { if (Data[SectionName.Renzokuken].Enabled) return Data[SectionName.Renzokuken].Inputs(); if (Data[SectionName.Shot].Enabled) return Data[SectionName.Shot].Inputs(); return Data[SectionName.Commands].Inputs(); } public override bool Update() { //SkipFocus = true; return base.Update(); } public override void ModeChangeEvent(object sender, Enum e) { switch (e) { case Damageable.BattleMode.EndTurn: Reset(); Refresh(); break; } } public override void Refresh(Damageable damageable) { if (Damageable != damageable) { if (Damageable != null) Damageable.BattleModeChangeEventHandler -= ModeChangeEvent; base.Refresh(damageable); if (Damageable != null) { Damageable.BattleModeChangeEventHandler += ModeChangeEvent; SetMode(Damageable.BattleMode.ATB_Charging); } } else base.Refresh(Damageable); } public override void Reset() => base.Reset(); //public override bool SetMode(Enum mode) => Damageable.SetBattleMode(mode); protected override void Init() { NoInputOnUpdate = true; Size = new Vector2 { X = 880, Y = 636 }; base.Init(); InitAsync(); } private void InitAsync() { Memory.MainThreadOnlyActions.Enqueue(() => Data.TryAdd(SectionName.Renzokuken, Renzokuken.Create(new Rectangle(0, (int)Size.Y - 164, (int)Size.X, 124)))); int width = 100, height = 100; Memory.MainThreadOnlyActions.Enqueue(() => Data.TryAdd(SectionName.Shot, Shot.Create(new Rectangle((int)Size.X - width, (int)Size.Y - 164, width, height)))); var actions = new Action[] { () => Data.TryAdd(SectionName.Commands, Commands.Create(new Rectangle(50, (int)(Size.Y - 224), 210, 186), Damageable, true)), () => Data.TryAdd(SectionName.HP, NamesHPATB.Create(new Rectangle((int)(Size.X - 389), (int)(Size.Y - 164), 389, 40), Damageable)) }; Memory.ProcessActions(actions); } #endregion Methods } }