LoadBarBox.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. using Microsoft.Xna.Framework;
  2. using System;
  3. using System.Diagnostics.CodeAnalysis;
  4. namespace OpenVIII.IGMData
  5. {
  6. public class LoadBarBox : Base
  7. {
  8. #region Properties
  9. public Slide<float> LoadBarSlide { get; private set; }
  10. public bool Save { get; private set; }
  11. public bool Slot { get; private set; }
  12. public int TotalWidth { get; private set; }
  13. private static TimeSpan Time => TimeSpan.FromMilliseconds(1000d);
  14. [SuppressMessage("ReSharper", "UnusedMember.Local")]
  15. private IGMDataItem.Icon RedBar { get => (IGMDataItem.Icon)ITEM[0, 1]; set => ITEM[0, 1] = value; }
  16. #endregion Properties
  17. #region Methods
  18. public static LoadBarBox Create(Rectangle pos) => Create<LoadBarBox>(1, 2, container: new IGMDataItem.Box { Pos = pos, Title = Icons.ID.INFO });
  19. public override bool Inputs_OKAY()
  20. {
  21. if (Slot)
  22. {
  23. setMode(IGMLoadSaveGame.Mode.Game |
  24. IGMLoadSaveGame.Mode.Choose |
  25. (Save ? IGMLoadSaveGame.Mode.Save : IGMLoadSaveGame.Mode.Nothing));
  26. playSound(35);
  27. return true;
  28. }
  29. else
  30. {
  31. Menu.FadeIn();
  32. Menu.Module.State = MenuModule.Mode.IGM;
  33. Menu.IGM.Refresh();
  34. //TODO if save ask if you are sure if you are replacing an existing save.
  35. setMode(IGMLoadSaveGame.Mode.Game |
  36. IGMLoadSaveGame.Mode.Choose |
  37. (Save ? IGMLoadSaveGame.Mode.Save : IGMLoadSaveGame.Mode.Nothing));
  38. playSound(36);
  39. return true;
  40. }
  41. //return false;
  42. void playSound(int snd)
  43. {
  44. AV.Sound.Play(snd);
  45. skipsnd = true;
  46. base.Inputs_OKAY();
  47. }
  48. void setMode(IGMLoadSaveGame.Mode mode)
  49. {
  50. if (Menu.IGMLoadSaveGame.GetMode().HasFlag(IGMLoadSaveGame.Mode.Slot1))
  51. Menu.IGMLoadSaveGame.SetMode(mode | IGMLoadSaveGame.Mode.Slot1);
  52. else if (Menu.IGMLoadSaveGame.GetMode().HasFlag(IGMLoadSaveGame.Mode.Slot2))
  53. Menu.IGMLoadSaveGame.SetMode(mode | IGMLoadSaveGame.Mode.Slot2);
  54. }
  55. }
  56. public override void ModeChangeEvent(object sender, Enum e)
  57. {
  58. base.ModeChangeEvent(sender, e);
  59. if (e.GetType() == typeof(IGMLoadSaveGame.Mode))
  60. {
  61. Save = e.HasFlag(IGMLoadSaveGame.Mode.Save);
  62. Slot = e.HasFlag(IGMLoadSaveGame.Mode.Slot);
  63. if (e.HasFlag(IGMLoadSaveGame.Mode.Checking))
  64. {
  65. Show();
  66. Refresh();
  67. }
  68. else
  69. Hide();
  70. }
  71. }
  72. public override void Refresh()
  73. {
  74. if (Enabled)
  75. {
  76. base.Refresh();
  77. LoadBarSlide.Restart();
  78. }
  79. }
  80. public override bool Update()
  81. {
  82. if (Enabled)
  83. {
  84. base.Update();
  85. if (!LoadBarSlide.Done)
  86. {
  87. var r = RedBar.Pos;
  88. r.Width = (int)LoadBarSlide.Update();
  89. RedBar.Pos = r;
  90. }
  91. else
  92. {
  93. Inputs_OKAY();
  94. }
  95. return true;
  96. }
  97. return false;
  98. }
  99. protected override void Init()
  100. {
  101. base.Init();
  102. ITEM[0, 0] = new IGMDataItem.Icon
  103. {
  104. Data = Icons.ID.Bar_BG,
  105. Pos = SIZE[0]
  106. };
  107. var r = SIZE[0];
  108. //r.Offset(0, 0);
  109. r.Inflate(-4, -4);
  110. TotalWidth = r.Width;
  111. LoadBarSlide = new Slide<float>(0, TotalWidth, Time, MathHelper.SmoothStep);
  112. r.Width = 0;
  113. ITEM[0, 1] = new IGMDataItem.Icon { Data = Icons.ID.Bar_Fill, Pos = r };
  114. Cursor_Status |= Cursor_Status.Enabled | Cursor_Status.Hidden | Cursor_Status.Static;
  115. }
  116. protected override void InitShift(int i, int col, int row)
  117. {
  118. base.InitShift(i, col, row);
  119. SIZE[i].Height = 28;
  120. SIZE[i].Inflate(-10, 0);
  121. SIZE[i].Y += Height / 2 - SIZE[i].Height / 2;
  122. }
  123. #endregion Methods
  124. }
  125. }