SaveManager.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. using System;
  2. using System.Collections;
  3. using System.Diagnostics;
  4. using UnityEngine;
  5. public class SaveManager : BaseBehaviour
  6. {
  7. public static GameData GameData
  8. {
  9. get
  10. {
  11. return SaveManager._gameDataLoaded;
  12. }
  13. }
  14. //[DebuggerBrowsable(DebuggerBrowsableState.Never)]
  15. public static event EventHandler<SaveLoadedEventArgs> OnGameLoaded;
  16. public static bool IsBusy
  17. {
  18. get
  19. {
  20. return SaveData.IsBusy;
  21. }
  22. }
  23. public static bool IsAutoSaveDataExists
  24. {
  25. get
  26. {
  27. return SaveData.IsAutoSaveDataExists();
  28. }
  29. }
  30. public static Coroutine AutoSave(GameData gameData)
  31. {
  32. return R.Coroutine.Start(SaveManager.AutoSaveWhenIsNotBusy(gameData));
  33. }
  34. private static IEnumerator AutoSaveWhenIsNotBusy(GameData gameData)
  35. {
  36. while (SaveManager.IsBusy)
  37. {
  38. yield return null;
  39. }
  40. SaveData.Save(gameData);
  41. yield break;
  42. }
  43. public static Coroutine AutoLoad()
  44. {
  45. SaveManager._gameDataLoaded = null;
  46. SaveData.Load();
  47. return R.Coroutine.Start(SaveManager.AutoLoadAndWaitForLoadedCoroutine());
  48. }
  49. private static IEnumerator AutoLoadAndWaitForLoadedCoroutine()
  50. {
  51. while (SaveManager._gameDataLoaded == null)
  52. {
  53. yield return null;
  54. }
  55. yield break;
  56. }
  57. public static void AutoDelete()
  58. {
  59. SaveData.Delete();
  60. }
  61. public static Coroutine ModifySaveData(Action<GameData> action)
  62. {
  63. return R.Coroutine.Start(SaveManager.ModifySaveDataCoroutine(action));
  64. }
  65. private static IEnumerator ModifySaveDataCoroutine(Action<GameData> action)
  66. {
  67. yield return SaveManager.AutoLoad();
  68. GameData gameData = SaveManager.GameData;
  69. action(gameData);
  70. SaveManager.AutoSave(gameData);
  71. yield break;
  72. }
  73. private void OnSavedGameLoaded(object sender, SaveLoadedEventArgs e)
  74. {
  75. GameData gameData = e.GameData;
  76. SaveManager._gameDataLoaded = gameData;
  77. if (SaveManager.OnGameLoaded != null)
  78. {
  79. SaveManager.OnGameLoaded(sender, e);
  80. }
  81. }
  82. private void OnEnable()
  83. {
  84. SaveData.OnGameLoaded += this.OnSavedGameLoaded;
  85. }
  86. private void OnDisable()
  87. {
  88. SaveData.OnGameLoaded -= this.OnSavedGameLoaded;
  89. }
  90. private static GameData _gameDataLoaded;
  91. }