using Microsoft.Xna.Framework;
using System;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
namespace OpenVIII
{
public class IGMLoadSaveGame : Menu
{
#region Fields
public const int Space = 4;
#endregion Fields
#region Constructors
[SuppressMessage("ReSharper", "NotAccessedField.Local")]
public IGMLoadSaveGame()
{
}
#endregion Constructors
#region Enums
[Flags]
[SuppressMessage("ReSharper", "UnusedMember.Global")]
public enum Mode : byte
{
///
/// Loading or nothing
///
Nothing = 0x0,
///
/// Save flag to switch to saving instead of loading.
///
Save = 0x1,
///
/// MemoryCard slots or Game folders
///
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 IGMLoadSaveGame Create() => Create();
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; }
}
protected override void Init()
{
Size = new Vector2 { X = 960, Y = 720 };
const int headerHeight = 140;
var slotsRectangle = new Rectangle(0, headerHeight + Space, (int)Size.X, (int)Size.Y - headerHeight - Space);
var loadBarRectangle = slotsRectangle;
var 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
}
}