using Microsoft.Xna.Framework;
using System;
using System.Linq;
namespace OpenVIII
{
public class IGM_LGSG : Menu
{
#region Fields
public const int space = 4;
private Vector2 AltSize;
#endregion Fields
#region Enums
[Flags]
public enum Mode : byte
{
///
/// Loading or nothing
///
Nothing = 0x0,
///
/// Save flag to switch to saving instead of loading.
///
Save = 0x1,
///
/// MemoryCard slots or Gamefolders
///
Slot = 0x2,
///
/// Game list.
///
Game = 0x4,
///
/// choose from list.
///
Choose = 0x8,
///
/// Load bar
///
Checking = 0x10,
///
/// Header
///
Header = 0x20,
///
/// Slot1
///
Slot1 = 0x40,
///
/// Slot2
///
Slot2 = 0x80,
LoadSlotChoose = Slot | Choose,
SaveSlotChoose = Save | Slot | Choose,
LoadSlotChecking = Slot | Checking,
SaveSlotChecking = Save | Slot | Checking,
LoadGameChoose = Game | Choose,
SaveGameChoose = Save | Game | Choose,
LoadGameChecking = Game | Checking,
SaveGameChecking = Save | Game | Checking,
LoadHeader = Header,
SaveHeader = Save | Header,
}
#endregion Enums
#region Methods
public static IGM_LGSG Create() => Create();
//public override void DrawData() => Data.Where(m => m.Value != null && m.Value.Enabled && !m.Key.HasFlag(Mode.Header)).ForEach(m => m.Value.Draw());
public override bool Inputs()
{
try
{
return Data.First(m =>
!m.Key.HasFlag(Mode.Header) &&
m.Value != null &&
m.Value.Enabled &&
m.Value.Cursor_Status.HasFlag(Cursor_Status.Enabled)).Value.Inputs();
}
catch (InvalidOperationException)
{ return false; }
}
public override void Refresh() => base.Refresh();
//public override void StartDraw()
//{
// Matrix backupfocus = Focus;
// GenerateFocus(AltSize, Box_Options.Top);
// base.StartDraw();
// Data.Where(m => m.Value != null && m.Value.Enabled && m.Key.HasFlag(Mode.Header)).ForEach(m => m.Value.Draw());
// base.EndDraw();
// Focus = backupfocus;
// base.StartDraw();
//}
public override bool Update() => base.Update();
protected override void Init()
{
Size = new Vector2 { X = 960, Y = 720 };
//AltSize = new Vector2(1280, 720);
const int HeaderHeight = 140;
Rectangle SlotsRectangle = new Rectangle(0, HeaderHeight + space, (int)Size.X, (int)Size.Y - HeaderHeight - space);
Rectangle LoadBarRectangle = SlotsRectangle;
Rectangle BlocksRectangle = SlotsRectangle;
SlotsRectangle.Inflate(-Size.X * .32f, -Size.Y * .28f); // (307,341,346,178)
LoadBarRectangle.Inflate(-Size.X * .15f, -Size.Y * .35f);
base.Init();
Data[Mode.LoadSlotChoose] = IGMData.SlotChoose.Create(SlotsRectangle);
Data[Mode.Checking] = IGMData.LoadBarBox.Create(LoadBarRectangle);
Data[Mode.LoadGameChoose] = IGMData.Pool.GameChoose.Create(BlocksRectangle);
Data[Mode.LoadHeader] = IGMData.ThreePieceHeader.Create(new Rectangle(base.X, base.Y, (int)Size.X, HeaderHeight));
Data.Where(x => x.Value != null).ForEach(x => ModeChangeHandler += x.Value.ModeChangeEvent);
SetMode(Mode.LoadSlotChoose);
}
#endregion Methods
}
}