IGMLoadSaveGame.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. using Microsoft.Xna.Framework;
  2. using System;
  3. using System.Diagnostics.CodeAnalysis;
  4. using System.Linq;
  5. namespace OpenVIII
  6. {
  7. public class IGMLoadSaveGame : Menu
  8. {
  9. #region Fields
  10. public const int Space = 4;
  11. #endregion Fields
  12. #region Constructors
  13. [SuppressMessage("ReSharper", "NotAccessedField.Local")]
  14. public IGMLoadSaveGame()
  15. {
  16. }
  17. #endregion Constructors
  18. #region Enums
  19. [Flags]
  20. [SuppressMessage("ReSharper", "UnusedMember.Global")]
  21. public enum Mode : byte
  22. {
  23. /// <summary>
  24. /// Loading or nothing
  25. /// </summary>
  26. Nothing = 0x0,
  27. /// <summary>
  28. /// Save flag to switch to saving instead of loading.
  29. /// </summary>
  30. Save = 0x1,
  31. /// <summary>
  32. /// MemoryCard slots or Game folders
  33. /// </summary>
  34. Slot = 0x2,
  35. /// <summary>
  36. /// Game list.
  37. /// </summary>
  38. Game = 0x4,
  39. /// <summary>
  40. /// choose from list.
  41. /// </summary>
  42. Choose = 0x8,
  43. /// <summary>
  44. /// Load bar
  45. /// </summary>
  46. Checking = 0x10,
  47. /// <summary>
  48. /// Header
  49. /// </summary>
  50. Header = 0x20,
  51. /// <summary>
  52. /// Slot1
  53. /// </summary>
  54. Slot1 = 0x40,
  55. /// <summary>
  56. /// Slot2
  57. /// </summary>
  58. Slot2 = 0x80,
  59. LoadSlotChoose = Slot | Choose,
  60. SaveSlotChoose = Save | Slot | Choose,
  61. LoadSlotChecking = Slot | Checking,
  62. SaveSlotChecking = Save | Slot | Checking,
  63. LoadGameChoose = Game | Choose,
  64. SaveGameChoose = Save | Game | Choose,
  65. LoadGameChecking = Game | Checking,
  66. SaveGameChecking = Save | Game | Checking,
  67. LoadHeader = Header,
  68. SaveHeader = Save | Header,
  69. }
  70. #endregion Enums
  71. #region Methods
  72. public static IGMLoadSaveGame Create() => Create<IGMLoadSaveGame>();
  73. public override bool Inputs()
  74. {
  75. try
  76. {
  77. return Data.First(m =>
  78. !m.Key.HasFlag(Mode.Header) &&
  79. m.Value != null &&
  80. m.Value.Enabled &&
  81. m.Value.Cursor_Status.HasFlag(Cursor_Status.Enabled)).Value.Inputs();
  82. }
  83. catch (InvalidOperationException)
  84. { return false; }
  85. }
  86. protected override void Init()
  87. {
  88. Size = new Vector2 { X = 960, Y = 720 };
  89. const int headerHeight = 140;
  90. var slotsRectangle = new Rectangle(0, headerHeight + Space, (int)Size.X, (int)Size.Y - headerHeight - Space);
  91. var loadBarRectangle = slotsRectangle;
  92. var blocksRectangle = slotsRectangle;
  93. slotsRectangle.Inflate(-Size.X * .32f, -Size.Y * .28f); // (307,341,346,178)
  94. loadBarRectangle.Inflate(-Size.X * .15f, -Size.Y * .35f);
  95. base.Init();
  96. Data[Mode.LoadSlotChoose] = IGMData.SlotChoose.Create(slotsRectangle);
  97. Data[Mode.Checking] = IGMData.LoadBarBox.Create(loadBarRectangle);
  98. Data[Mode.LoadGameChoose] = IGMData.Pool.GameChoose.Create(blocksRectangle);
  99. Data[Mode.LoadHeader] = IGMData.ThreePieceHeader.Create(new Rectangle(base.X, base.Y, (int)Size.X, headerHeight));
  100. Data.Where(x => x.Value != null).ForEach(x => ModeChangeHandler += x.Value.ModeChangeEvent);
  101. SetMode(Mode.LoadSlotChoose);
  102. }
  103. #endregion Methods
  104. }
  105. }