From 208883528ec36814e28422b1b4fd9b2d82eebf57 Mon Sep 17 00:00:00 2001
From: MarcelRyan <marcel.ryan2004@gmail.com>
Date: Tue, 7 May 2024 23:01:18 +0700
Subject: [PATCH] [FEAT] BASE SAVE AND LOAD DONE

---
 Assets/Scenes/Level01.unity                   | 68 -------------------
 Assets/Scripts/DataUtils/GameData.cs          |  2 +-
 Assets/Scripts/Helpers/SaveRadius.cs          |  2 +-
 Assets/Scripts/MainMenu/MainMenu.cs           |  3 +-
 .../Managers/DataPersistenceManager.cs        | 57 +++++++++++++---
 Assets/Scripts/Managers/GameOverManager.cs    |  2 +
 Assets/Scripts/Managers/LevelManager.cs       |  5 +-
 7 files changed, 58 insertions(+), 81 deletions(-)

diff --git a/Assets/Scenes/Level01.unity b/Assets/Scenes/Level01.unity
index 1570143..9bb594b 100644
--- a/Assets/Scenes/Level01.unity
+++ b/Assets/Scenes/Level01.unity
@@ -11829,7 +11829,6 @@ Transform:
   m_Children:
   - {fileID: 14871712}
   - {fileID: 636207316}
-  - {fileID: 1656483646}
   - {fileID: 756133771}
   m_Father: {fileID: 0}
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -13646,73 +13645,6 @@ Transform:
   - {fileID: 384557718}
   m_Father: {fileID: 0}
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!1 &1656483645
-GameObject:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  serializedVersion: 6
-  m_Component:
-  - component: {fileID: 1656483646}
-  - component: {fileID: 1656483647}
-  m_Layer: 0
-  m_Name: LevelManager
-  m_TagString: Untagged
-  m_Icon: {fileID: 0}
-  m_NavMeshLayer: 0
-  m_StaticEditorFlags: 0
-  m_IsActive: 1
---- !u!4 &1656483646
-Transform:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 1656483645}
-  serializedVersion: 2
-  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
-  m_LocalPosition: {x: 0, y: 0, z: 0}
-  m_LocalScale: {x: 1, y: 1, z: 1}
-  m_ConstrainProportionsScale: 0
-  m_Children: []
-  m_Father: {fileID: 1165414997}
-  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!114 &1656483647
-MonoBehaviour:
-  m_ObjectHideFlags: 0
-  m_CorrespondingSourceObject: {fileID: 0}
-  m_PrefabInstance: {fileID: 0}
-  m_PrefabAsset: {fileID: 0}
-  m_GameObject: {fileID: 1656483645}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 4c72301907703bc499d2ca179570c95c, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  levels:
-  - MainMenu
-  - Cutscene01
-  - Cutscene02
-  - Cutscene03
-  - Level01
-  - Cutscene04
-  - Level01
-  - Cutscene05
-  - Level01
-  - Cutscene06
-  - Level02
-  - Cutscene07
-  - Cutscene08
-  announcementText: {fileID: 0}
-  enemyManager: []
-  questText: {fileID: 0}
-  kerocoKilled: 0
-  kepalaKerocoKilled: 0
-  jendralKilled: 0
-  rajaKilled: 0
-  winQuest: 0
-  fail: 0
 --- !u!1 &1695883712
 GameObject:
   m_ObjectHideFlags: 0
diff --git a/Assets/Scripts/DataUtils/GameData.cs b/Assets/Scripts/DataUtils/GameData.cs
index 3a59d57..77c02a7 100644
--- a/Assets/Scripts/DataUtils/GameData.cs
+++ b/Assets/Scripts/DataUtils/GameData.cs
@@ -33,7 +33,7 @@ public class GameData
         this.baseDamage = 40;
         this.currentPosition = new Vector3(0f, 0f, 0f);
         this.currentWeapon = 0;
-        this.currentScene = 0;
+        this.currentScene = 1;
         this.currentQuest = 0;
         this.shopKeeperTime = 120f;
     }
diff --git a/Assets/Scripts/Helpers/SaveRadius.cs b/Assets/Scripts/Helpers/SaveRadius.cs
index cc80640..f07a2f8 100644
--- a/Assets/Scripts/Helpers/SaveRadius.cs
+++ b/Assets/Scripts/Helpers/SaveRadius.cs
@@ -21,8 +21,8 @@ public class SaveRadius : MonoBehaviour
         if (timer >= 1 && playerInRange && Input.GetKeyDown(KeyCode.Z))
         {
             timer = 0;
-            DataPersistenceManager.instance.SaveGame();
             DataPersistenceManager.instance.SafeFromSafehouse();
+            DataPersistenceManager.instance.SaveGame();
         }
 
     }
diff --git a/Assets/Scripts/MainMenu/MainMenu.cs b/Assets/Scripts/MainMenu/MainMenu.cs
index 867bbd0..4001072 100644
--- a/Assets/Scripts/MainMenu/MainMenu.cs
+++ b/Assets/Scripts/MainMenu/MainMenu.cs
@@ -45,8 +45,7 @@ public class MainMenu : MonoBehaviour
     {
         Debug.Log("On New Game Clicked");
         DataPersistenceManager.instance.NewGame();
-        DataPersistenceManager.instance.LoadGame();
-        LevelManager.Instance.Next();
+        LevelManager.Instance.LoadScene();
     }
 
     public void QuitGame()
diff --git a/Assets/Scripts/Managers/DataPersistenceManager.cs b/Assets/Scripts/Managers/DataPersistenceManager.cs
index 4dd3813..46bf0d2 100644
--- a/Assets/Scripts/Managers/DataPersistenceManager.cs
+++ b/Assets/Scripts/Managers/DataPersistenceManager.cs
@@ -15,6 +15,7 @@ public class DataPersistenceManager : MonoBehaviour
     private bool newGame = false;
     private bool loadGame = false;
     private bool saveSafeHouse = false;
+    private bool hasSaved = false;
 
     private void Awake()
     {
@@ -40,23 +41,44 @@ public class DataPersistenceManager : MonoBehaviour
 
     private void OnApplicationQuit()
     {
-        this.dataHandler.Delete();
+        if (!hasSaved && !loadGame)
+        {
+            this.dataHandler.Delete();
+        }
+        else if (loadGame)
+        {
+            if (!hasSaved)
+            {
+                this.dataHandler.Save(this.loadedGameData);
+            }
+        }
     }
 
     public void FileMechanism()
     {
-        if (!saveSafeHouse && !loadGame)
+        Debug.Log("File Mechanism Called");
+        if (!hasSaved && !loadGame)
         {
             this.dataHandler.Delete();
             this.gameData = null;
         }
         else if (loadGame)
         {
-            if (!saveSafeHouse)
+            Debug.Log(hasSaved);
+            if (!hasSaved)
             {
                 this.dataHandler.Save(this.loadedGameData);
+                this.gameData = this.loadedGameData;
+            }
+            else
+            {
+                this.gameData = this.dataHandler.Load();
             }
         }
+        else if (hasSaved)
+        {
+            this.gameData = this.dataHandler.Load();
+        }
     }
 
     private void OnEnable()
@@ -93,6 +115,12 @@ public class DataPersistenceManager : MonoBehaviour
     {
         this.gameData = new GameData();
         this.newGame = true;
+        this.loadGame = false;
+
+        foreach (IDataPersistence dataPersistence in dataPersistenceList)
+        {
+            dataPersistence.LoadData(gameData);
+        }
     }
 
     public void RetryGame(int scene)
@@ -117,9 +145,9 @@ public class DataPersistenceManager : MonoBehaviour
         }
         // TODO - push loaded data to all other scripts that need it
 
-        foreach (IDataPersistence dataPersistence in dataPersistenceList)
+        for (int i = dataPersistenceList.Count-1; i >= 0; i--)
         {
-            dataPersistence.LoadData(gameData);
+            dataPersistenceList[i].LoadData(gameData);
         }
 
         Debug.Log("Load Game called");
@@ -128,13 +156,20 @@ public class DataPersistenceManager : MonoBehaviour
     public void SaveGame()
     {
         // TODO - pass the data to other scripts
-        foreach (IDataPersistence dataPersistence in dataPersistenceList)
+        for (int i = dataPersistenceList.Count - 1; i >= 0; i--)
         {
-            dataPersistence.SaveData(ref gameData);
+            dataPersistenceList[i].SaveData(ref gameData);
         }
 
+        Debug.Log("SaveHouse bool: " + this.saveSafeHouse);
+
         // TODO - save data to a file
-        dataHandler.Save(gameData);
+        if (saveSafeHouse)
+        {
+            dataHandler.Save(gameData);
+            saveSafeHouse = false;
+            hasSaved = true;
+        }
 
         Debug.Log("Save Game called");
     }
@@ -160,9 +195,15 @@ public class DataPersistenceManager : MonoBehaviour
         this.saveSafeHouse = true;
     }
 
+    public void ResetSave()
+    {
+        this.saveSafeHouse = false;
+    }
+
     public void LoadGameClicked()
     {
         this.loadGame = true;
+        this.newGame = false;
         this.loadedGameData = gameData;
     }
 }
diff --git a/Assets/Scripts/Managers/GameOverManager.cs b/Assets/Scripts/Managers/GameOverManager.cs
index 9a1ab4b..1e75ecb 100644
--- a/Assets/Scripts/Managers/GameOverManager.cs
+++ b/Assets/Scripts/Managers/GameOverManager.cs
@@ -39,12 +39,14 @@ namespace Nightmare
         public void ResetLevel()
         {
             DataPersistenceManager.instance.RetryGame(1);
+            DataPersistenceManager.instance.ResetSave();
             LevelManager.Instance.ResetLevel();
         }
 
         public void ExitGame()
         {
             DataPersistenceManager.instance.FileMechanism();
+            DataPersistenceManager.instance.ResetSave();
             LevelManager.Instance.Exit();
         }
 
diff --git a/Assets/Scripts/Managers/LevelManager.cs b/Assets/Scripts/Managers/LevelManager.cs
index 3613cdb..8f2eeb5 100644
--- a/Assets/Scripts/Managers/LevelManager.cs
+++ b/Assets/Scripts/Managers/LevelManager.cs
@@ -79,7 +79,10 @@ namespace Nightmare
         public void SaveData(ref GameData data)
         {
             data.currentScene = this.currentIndex;
-            data.currentQuest = this.currentQuest;
+            if (this.currentQuest >= 1)
+            {
+                data.currentQuest = this.currentQuest-1;
+            }
             Debug.Log("Save data scene and quest " + this.currentIndex + " " + this.currentQuest);
         }
 
-- 
GitLab