From e9e1af47b812b4a8d007c75a41fbb5e73c249252 Mon Sep 17 00:00:00 2001
From: RMA1403 <ravamaulana14@gmail.com>
Date: Sat, 11 May 2024 15:51:29 +0700
Subject: [PATCH] feat: questestjetjeisjtisejt

---
 .../DataPersistance/DataPersistenceManager.cs | 32 +++++++++++++------
 .../Assets/Code/Scripts/FPSController.cs      |  7 +++-
 .../Assets/Code/Scripts/Quest/QuestManager.cs |  8 +++--
 3 files changed, 35 insertions(+), 12 deletions(-)

diff --git a/IF3210-2024-Unity-AFK/Assets/Code/Scripts/DataPersistance/DataPersistenceManager.cs b/IF3210-2024-Unity-AFK/Assets/Code/Scripts/DataPersistance/DataPersistenceManager.cs
index b639881a..1aa5df39 100644
--- a/IF3210-2024-Unity-AFK/Assets/Code/Scripts/DataPersistance/DataPersistenceManager.cs
+++ b/IF3210-2024-Unity-AFK/Assets/Code/Scripts/DataPersistance/DataPersistenceManager.cs
@@ -9,6 +9,7 @@ using Unity.VisualScripting;
 using UnityEngine.UI;
 using Unity.XR.CoreUtils;
 using TMPro;
+using UnityEngine.SceneManagement;
 
 public class DataPersistenceManager : MonoBehaviour
 {
@@ -62,9 +63,24 @@ public class DataPersistenceManager : MonoBehaviour
         if (!PlayerPrefs.HasKey("kill_count")) PlayerPrefs.SetInt("kill_count", 0);
         if (!PlayerPrefs.HasKey("death_count")) PlayerPrefs.SetInt("death_count", 0);
         if (!PlayerPrefs.HasKey("spend_count")) PlayerPrefs.SetInt("spend_count", 0);
+        SceneManager.sceneLoaded += OnSceneLoaded;
         LoadGame();
     }
 
+    private void OnDestroy()
+    {
+        SceneManager.sceneLoaded -= OnSceneLoaded;
+    }
+
+    private void OnSceneLoaded(Scene scene, LoadSceneMode mode)
+    {
+        if (scene.name == "Main 2") 
+        {
+            dataPersistenceObjects = FindAllDataPersistenceObjects();
+            LoadGame();
+        }
+    }
+
     private void OnApplicationQuit()
     {
         DateTime startTime = DateTime.Parse(PlayerPrefs.GetString("start_time")); 
@@ -80,6 +96,11 @@ public class DataPersistenceManager : MonoBehaviour
         return new List<IDataPersistence>(dataPersistenceObjects);
     }
 
+    private void Update()
+    {
+        dataPersistenceObjects = FindAllDataPersistenceObjects();
+    }
+
     public void LoadGame()
     {
         // Load data from file
@@ -92,26 +113,19 @@ public class DataPersistenceManager : MonoBehaviour
             NewGame();
         }
 
-        Debug.Log("pers lenggngngngn " + dataPersistenceObjects.Count);
         // push data to all scripts
         foreach (IDataPersistence dataPersistenceObject in dataPersistenceObjects)
         {
-            Debug.Log("pers obj " + dataPersistenceObject);
+            Debug.Log(dataPersistenceObject);
             dataPersistenceObject.LoadData(gameData);
         }
     }
 
-    private void Update()
-    {
-        dataPersistenceObjects = FindAllDataPersistenceObjects();
-    }
-
     public void SaveGame()
     {
         // pass data to update
         foreach (IDataPersistence dataPersistenceObject in dataPersistenceObjects)
         {
-            Debug.Log(dataPersistenceObject);
             dataPersistenceObject.SaveData(ref gameData);
         }
 
@@ -145,4 +159,4 @@ public class DataPersistenceManager : MonoBehaviour
     {
         return dataHandler.LoadAllSaves();
     }
-}
+}
\ No newline at end of file
diff --git a/IF3210-2024-Unity-AFK/Assets/Code/Scripts/FPSController.cs b/IF3210-2024-Unity-AFK/Assets/Code/Scripts/FPSController.cs
index 9a78b763..8c340463 100644
--- a/IF3210-2024-Unity-AFK/Assets/Code/Scripts/FPSController.cs
+++ b/IF3210-2024-Unity-AFK/Assets/Code/Scripts/FPSController.cs
@@ -47,7 +47,12 @@ public class FPSController : BaseBehaviour, IDataPersistence
         Cursor.lockState = CursorLockMode.Locked;
         Cursor.visible = false;
 
-        GameManager.StartQuest(firstQuestId);
+        QuestManager qm = GameObject.Find("QuestManager").GetComponent<QuestManager>();
+
+        if (!qm.GetQuestById(firstQuestId).state.Equals(QuestState.FINISHED))
+        {
+            GameManager.StartQuest(firstQuestId);
+        }
         pistol.SetActive(false);
         shotgun.SetActive(false);
         sword.SetActive(false);
diff --git a/IF3210-2024-Unity-AFK/Assets/Code/Scripts/Quest/QuestManager.cs b/IF3210-2024-Unity-AFK/Assets/Code/Scripts/Quest/QuestManager.cs
index 1cd827e6..8ae24a01 100644
--- a/IF3210-2024-Unity-AFK/Assets/Code/Scripts/Quest/QuestManager.cs
+++ b/IF3210-2024-Unity-AFK/Assets/Code/Scripts/Quest/QuestManager.cs
@@ -103,7 +103,7 @@ public class QuestManager : MonoBehaviour, IDataPersistence
         return idToQuestMap;
     }
 
-    private Quest GetQuestById(string id)
+    public Quest GetQuestById(string id)
     {
         return questMap[id];
     }
@@ -136,9 +136,13 @@ public class QuestManager : MonoBehaviour, IDataPersistence
     }
     public void SaveData(ref GameData data)
     {
+        int idx = 0;
         foreach (Quest quest in questMap.Values)
         {
-            data.questState.Append((int) quest.state);
+            data.questState[idx] = (int) quest.state;
+            Debug.Log("stettt " + (int) quest.state);
+
+            idx++;
         }
     }
 }
-- 
GitLab