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