From 9ed457914ff08e3265778cb324b53509f6956e65 Mon Sep 17 00:00:00 2001 From: Zeus-s <kristabdixx@gmail.com> Date: Thu, 13 Apr 2023 00:01:52 +0700 Subject: [PATCH] feat: add save slot --- Assets/Scripts/Managers/PlayerDataManager.cs | 83 +++++++++++++++----- Assets/Scripts/Menu/MainMenu.cs | 8 +- Assets/Scripts/Menu/QuestOver.cs | 6 +- 3 files changed, 71 insertions(+), 26 deletions(-) diff --git a/Assets/Scripts/Managers/PlayerDataManager.cs b/Assets/Scripts/Managers/PlayerDataManager.cs index de61f563..4cf3e6e2 100644 --- a/Assets/Scripts/Managers/PlayerDataManager.cs +++ b/Assets/Scripts/Managers/PlayerDataManager.cs @@ -4,68 +4,113 @@ using UnityEngine; public class PlayerDataManager : MonoBehaviour { - private PlayerData data; + private PlayerData data1; + private PlayerData data2; + private PlayerData data3; + void Awake() { - data = FileHandler.ReadFromJSONPrefs<PlayerData>("PlayerData.json"); - if (data == null) { - data = new PlayerData(); + data1 = FileHandler.ReadFromJSONPrefs<PlayerData>("PlayerData1.json"); + if (data1 == null) { + data1 = new PlayerData(); + } + + data2 = FileHandler.ReadFromJSONPrefs<PlayerData>("PlayerData1.json"); + if (data2 == null) { + data2 = new PlayerData(); + } + + data3 = FileHandler.ReadFromJSONPrefs<PlayerData>("PlayerData1.json"); + if (data3 == null) { + data3 = new PlayerData(); } } - public void SetCoins(int coins) { + public PlayerData GetNumData(int data) { + if (data == 1) { + return data1; + } else if (data == 2) { + return data2; + } else { + return data3; + } + } + + public void SetCoins(int num_data, int coins) { + PlayerData data = GetNumData(num_data); if (data != null) { data.coins = coins; - SavePlayerData(); + SavePlayerData(num_data); } else { Debug.LogError("PlayerDataManager: data object is null!"); } } - public void SetLastScene(string lastScene) { + public void SetLastScene(int num_data, string lastScene) { + PlayerData data = GetNumData(num_data); if (data != null) { data.lastScene = lastScene; - SavePlayerData(); + SavePlayerData(num_data); } else { Debug.LogError("PlayerDataManager: data object is null!"); } } - public void SetTime(float time) { + public void SetTime(int num_data, float time) { + PlayerData data = GetNumData(num_data); if (data != null) { data.time = time; - SavePlayerData(); + SavePlayerData(num_data); } else { Debug.LogError("PlayerDataManager: data object is null!"); } } - public int GetCoins() { + public int GetCoins(int num_data) { + PlayerData data = GetNumData(num_data); return data.coins; } - public string GetLastScene() { + public string GetLastScene(int num_data) { + PlayerData data = GetNumData(num_data); return data.lastScene; } - public float GetTime() { + public float GetTime(int num_data) { + PlayerData data = GetNumData(num_data); return data.time; } - public PlayerData GetData() { + public PlayerData GetData(int num_data) { + PlayerData data = GetNumData(num_data); return data; } - public void Clear() { + public void Clear(int num_data) { + PlayerData data = GetNumData(num_data); data = new PlayerData(); - SavePlayerData(); + SavePlayerData(num_data); + } + + public void ClearAll() { + data1 = new PlayerData(); + data2 = new PlayerData(); + data3 = new PlayerData(); + SavePlayerDataAll(); } // Update is called once per frame public void OnDestroy() { - SavePlayerData(); + SavePlayerDataAll(); + } + + public void SavePlayerData(int num_data) { + PlayerData data = GetNumData(num_data); + FileHandler.SaveToJsonPrefs<PlayerData>(data, "PlayerData" + num_data + ".json"); } - public void SavePlayerData() { - FileHandler.SaveToJsonPrefs<PlayerData>(data, "PlayerData.json"); + public void SavePlayerDataAll() { + FileHandler.SaveToJsonPrefs<PlayerData>(data1, "PlayerData1.json"); + FileHandler.SaveToJsonPrefs<PlayerData>(data2, "PlayerData2.json"); + FileHandler.SaveToJsonPrefs<PlayerData>(data3, "PlayerData3.json"); } } diff --git a/Assets/Scripts/Menu/MainMenu.cs b/Assets/Scripts/Menu/MainMenu.cs index 8679d61f..4cc51feb 100644 --- a/Assets/Scripts/Menu/MainMenu.cs +++ b/Assets/Scripts/Menu/MainMenu.cs @@ -33,7 +33,7 @@ public class MainMenu : MonoBehaviour public void NewGame() { - pdm.Clear(); + // pdm.Clear(PlayerPrefs.GetInt("savedSlot")); PlayerPrefs.DeleteKey("isWin"); PlayerPrefs.SetString("lastScene", "Level_01"); PlayerPrefs.DeleteKey("timeElapsed"); @@ -41,10 +41,10 @@ public class MainMenu : MonoBehaviour } public void LoadGame() { - PlayerPrefs.SetFloat("timeElapsed", pdm.GetTime()); + PlayerPrefs.SetFloat("timeElapsed", pdm.GetTime(PlayerPrefs.GetInt("savedSlot"))); PlayerPrefs.SetInt("isWin", 0); - PlayerPrefs.SetString("lastScene", pdm.GetLastScene()); - SceneManager.LoadScene(GetNextScene(pdm.GetLastScene())); + PlayerPrefs.SetString("lastScene", pdm.GetLastScene(PlayerPrefs.GetInt("savedSlot"))); + SceneManager.LoadScene(GetNextScene(pdm.GetLastScene(PlayerPrefs.GetInt("savedSlot")))); } public void ScoreBoard() diff --git a/Assets/Scripts/Menu/QuestOver.cs b/Assets/Scripts/Menu/QuestOver.cs index 435500b9..fe5dc451 100644 --- a/Assets/Scripts/Menu/QuestOver.cs +++ b/Assets/Scripts/Menu/QuestOver.cs @@ -13,13 +13,13 @@ public class QuestOver : MonoBehaviour public void SaveAndNext() { string nameScene = PlayerPrefs.GetString("lastScene"); - pdm.SetLastScene(nameScene); + pdm.SetLastScene(PlayerPrefs.GetInt("savedSlot"), nameScene); // save data float timeElapsed = PlayerPrefs.GetFloat("timeElapsed"); - pdm.SetTime(timeElapsed); + pdm.SetTime(PlayerPrefs.GetInt("savedSlot"), timeElapsed); - pdm.SavePlayerData(); + pdm.SavePlayerData(PlayerPrefs.GetInt("savedSlot")); LoadNextScene(nameScene); } -- GitLab