| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- using Microsoft.Xna.Framework;
- using System;
- using System.Collections.Generic;
- using System.Diagnostics.CodeAnalysis;
- namespace OpenVIII
- {
- public partial class IGM
- {
- #region Classes
- [SuppressMessage("ReSharper", "NotAccessedField.Local")]
- private class SideMenu : IGMData.Base
- {
- #region Fields
- private int _avgHeight;
- private int _avgWidth;
- private bool _eventSet;
- private FF8String[] _helpStr;
- private int _largestHeight;
- private int _largestWidth;
- private int _totalHeight;
- private int _totalWidth;
- private int[] _widths;
- #endregion Fields
- #region Methods
- public static SideMenu Create(IReadOnlyDictionary<FF8String, FF8String> pairs)
- {
- var r = new SideMenu
- {
- _helpStr = new FF8String[pairs.Count],
- _widths = new int[pairs.Count]
- };
- byte pos = 0;
- foreach (var pair in pairs)
- {
- r._helpStr[pos] = pair.Value;
- var rectangle = Memory.Font.RenderBasicText(pair.Key, 0, 0, skipdraw: true);
- r._widths[pos] = rectangle.Width;
- if (rectangle.Width > r._largestWidth) r._largestWidth = rectangle.Width;
- if (rectangle.Height > r._largestHeight) r._largestHeight = rectangle.Height;
- r._totalWidth += rectangle.Width;
- r._totalHeight += rectangle.Height;
- r._avgWidth = r._totalWidth / (pos + 1);
- r._avgHeight = r._totalHeight / (pos + 1);
- pos++;
- }
- r.Init(pairs.Count, 1, new IGMDataItem.Box { Pos = new Rectangle { Width = 226, Height = 492, X = 843 - 226 } }, 1, pairs.Count);
- pos = 0;
- foreach (var pair in pairs)
- {
- r.ITEM[pos, 0] = new IGMDataItem.Text { Data = pair.Key, Pos = new Rectangle(r.SIZE[pos].X, r.SIZE[pos].Y, 0, 0) };
- pos++;
- }
- r.Cursor_Status |= (Cursor_Status.Enabled | Cursor_Status.Vertical | Cursor_Status.Horizontal);
- return r;
- }
- public override bool Inputs()
- {
- Cursor_Status &= ~Cursor_Status.Blinking;
- return base.Inputs();
- }
- public override bool Inputs_CANCEL()
- {
- base.Inputs_CANCEL();
- FadeIn();
- Menu.Module.State = MenuModule.Mode.LoadGameChooseGame;
- return true;
- }
- public override bool Inputs_OKAY()
- {
- base.Inputs_OKAY();
- // ReSharper disable once SwitchStatementHandlesSomeKnownEnumValuesWithDefault
- switch ((Items)CURSOR_SELECT)
- {
- case Items.Junction:
- case Items.Magic:
- case Items.Status:
- IGM.SetMode(Mode.ChooseChar);
- return true;
- case Items.Item:
- Menu.Module.State = MenuModule.Mode.IGM_Items;
- IGMItems.Refresh();
- return true;
- case Items.Battle:
- BattleMenus.CameFrom();
- //Menu.Module.State = MenuModule.MainMenuStates.BattleMenu;
- ModuleBattleDebug.ResetState();
- Memory.Module = OpenVIII.Module.BattleDebug;
- BattleMenus.Refresh();
- FadeIn();
- return true;
- case Items.GF:
- break;
- case Items.Ability:
- break;
- case Items.Switch:
- break;
- case Items.Card:
- break;
- case Items.Config:
- break;
- case Items.Tutorial:
- break;
- case Items.Save:
- break;
- default:
- throw new ArgumentOutOfRangeException();
- }
- return false;
- }
- public override void ModeChangeEvent(object sender, Enum e)
- {
- if (!e.Equals(Mode.ChooseItem))
- {
- Cursor_Status |= Cursor_Status.Blinking;
- }
- }
- public override void Refresh()
- {
- if (!_eventSet && IGM != null)
- {
- IGM.ModeChangeHandler += ModeChangeEvent;
- _eventSet = true;
- }
- IGM?.ChoiceChangeHandler?.Invoke(this, new KeyValuePair<Items, FF8String>((Items)CURSOR_SELECT, _helpStr[CURSOR_SELECT]));
- base.Refresh();
- }
- protected override void InitShift(int i, int col, int row)
- {
- //SIZE[i].Inflate((SIZE[i].Width - largestWidth) / -2, 0); // center
- SIZE[i].Inflate(-20, 0);
- SIZE[i].Y += SIZE[i].Height / 2 - _largestHeight / 2 + 5;
- //SIZE[i].Width = largestWidth;
- SIZE[i].Height = _largestHeight;
- }
- protected override void SetCursor_select(int value)
- {
- if (!value.Equals(GetCursor_select()))
- {
- base.SetCursor_select(value);
- IGM?.ChoiceChangeHandler?.Invoke(this, new KeyValuePair<Items, FF8String>((Items)value, _helpStr[value]));
- }
- }
- [SuppressMessage("ReSharper", "UnusedParameter.Local")]
- [SuppressMessage("ReSharper", "UnusedMember.Local")]
- private void ChoiceChangeEvent(object _, FF8String e) => ((IGMDataItem.Box)CONTAINER).Data = e;
- #endregion Methods
- }
- #endregion Classes
- }
- }
|