summaryrefslogtreecommitdiff
path: root/Thronefall_v1.0/Decompile/SaveLoadManager.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Thronefall_v1.0/Decompile/SaveLoadManager.cs')
-rw-r--r--Thronefall_v1.0/Decompile/SaveLoadManager.cs243
1 files changed, 243 insertions, 0 deletions
diff --git a/Thronefall_v1.0/Decompile/SaveLoadManager.cs b/Thronefall_v1.0/Decompile/SaveLoadManager.cs
new file mode 100644
index 0000000..5a51b9e
--- /dev/null
+++ b/Thronefall_v1.0/Decompile/SaveLoadManager.cs
@@ -0,0 +1,243 @@
+using System.Collections.Generic;
+using System.IO;
+using UnityEngine;
+
+public class SaveLoadManager : MonoBehaviour
+{
+ public static SaveLoadManager instance;
+
+ [SerializeField]
+ private int saveFileVersionNr = 1;
+
+ [SerializeField]
+ private string saveFileName = "ThroneSave.sav";
+
+ private List<string> saveData = new List<string>();
+
+ private string[] loadData;
+
+ private LevelProgressManager levelProgressManager;
+
+ private PerkManager perkManager;
+
+ [SerializeField]
+ private List<Equippable> allEquippablesID = new List<Equippable>();
+
+ private int iln;
+
+ private string line;
+
+ private string FullSaveFilePath => Path.Combine(Application.persistentDataPath, saveFileName);
+
+ private void Awake()
+ {
+ if ((bool)instance)
+ {
+ Object.Destroy(base.gameObject);
+ return;
+ }
+ Object.DontDestroyOnLoad(base.gameObject);
+ instance = this;
+ }
+
+ private void Start()
+ {
+ LoadGame();
+ if (DebugController.SaveLoadModeToUse != DebugController.SaveLoadMode.LoadMaxedOutSaveFileOnStartup)
+ {
+ if (levelProgressManager.GetLevelDataForScene("Neuland(Tutorial)") == null)
+ {
+ SceneTransitionManager.instance.TransitionFromLevelSelectToLevel("Neuland(Tutorial)");
+ }
+ else if (!levelProgressManager.GetLevelDataForScene("Neuland(Tutorial)").beatenBest)
+ {
+ SceneTransitionManager.instance.TransitionFromLevelSelectToLevel("Neuland(Tutorial)");
+ }
+ }
+ }
+
+ public void SaveGame()
+ {
+ if (!DebugController.SaveTheGame)
+ {
+ DebugLogInEditorOnly("Saving is not enabled!");
+ return;
+ }
+ saveData.Clear();
+ levelProgressManager = LevelProgressManager.instance;
+ perkManager = PerkManager.instance;
+ SaveSingle("Save File Version", saveFileVersionNr.ToString());
+ SaveSingle("Perk Level", perkManager.level.ToString());
+ SaveSingle("Perk XP", perkManager.xp.ToString());
+ foreach (KeyValuePair<string, LevelData> sceneNameToLevelDatum in levelProgressManager.SceneNameToLevelData)
+ {
+ string key = sceneNameToLevelDatum.Key;
+ LevelData value = sceneNameToLevelDatum.Value;
+ if (value.highscoreBest <= 0 && !value.beatenBest)
+ {
+ continue;
+ }
+ SaveSingle("Level", key);
+ SaveSingle("QuestsCompleteWhenLastOnMap", value.questsCompleteWhenLastVisitingMap.ToString());
+ SaveSingle("Beaten", value.beatenBest ? "1" : "0");
+ if (value.beatenBest)
+ {
+ AchievementManager.LevelBeaten(key);
+ }
+ SaveSingle("HighscoreV2", value.highscoreBest.ToString());
+ SaveList("NetworthV2 / Day", value.dayToDayNetworthBest);
+ SaveList("ScoreV2 / Day", value.dayToDayScoreBest);
+ foreach (List<Equippable> item in value.levelHasBeenBeatenWith)
+ {
+ List<string> list = new List<string>();
+ foreach (Equippable item2 in item)
+ {
+ if (!(item2 == null))
+ {
+ list.Add(item2.name);
+ }
+ }
+ SaveList("Beaten With", list);
+ }
+ }
+ File.WriteAllLines(FullSaveFilePath, saveData);
+ DebugLogInEditorOnly("Game Saved to " + FullSaveFilePath);
+ }
+
+ public void SaveSingle(string _key, string _data)
+ {
+ saveData.Add(_key);
+ saveData.Add(_data);
+ saveData.Add("");
+ }
+
+ public void SaveList<Type>(string _key, List<Type> _data)
+ {
+ saveData.Add(_key);
+ saveData.Add(_data.Count.ToString());
+ for (int i = 0; i < _data.Count; i++)
+ {
+ saveData.Add(_data[i].ToString());
+ }
+ saveData.Add("");
+ }
+
+ private void LoadGame()
+ {
+ levelProgressManager = LevelProgressManager.instance;
+ perkManager = PerkManager.instance;
+ if (DebugController.SaveLoadModeToUse == DebugController.SaveLoadMode.LoadEmptySaveFileOnStartup)
+ {
+ DebugLogInEditorOnly("Loading is not enabled!");
+ return;
+ }
+ if (DebugController.SaveLoadModeToUse == DebugController.SaveLoadMode.LoadMaxedOutSaveFileOnStartup)
+ {
+ DebugLogInEditorOnly("Loading maxed out save file with everything unlocked!");
+ perkManager.level = 10000;
+ perkManager.CallAfterLoadToUnlockPerksAndStuff();
+ return;
+ }
+ if (!File.Exists(FullSaveFilePath))
+ {
+ DebugLogInEditorOnly("No save file was found at " + FullSaveFilePath + " so the load process was canceled.");
+ return;
+ }
+ loadData = File.ReadAllLines(FullSaveFilePath);
+ LevelData levelData = null;
+ levelProgressManager.SceneNameToLevelData.Clear();
+ for (iln = 0; iln < loadData.Length; iln++)
+ {
+ line = loadData[iln];
+ switch (line)
+ {
+ case "Perk Level":
+ perkManager.level = int.Parse(ReadNextLn());
+ break;
+ case "Perk XP":
+ perkManager.xp = int.Parse(ReadNextLn());
+ break;
+ case "Level":
+ levelData = levelProgressManager.GetLevelDataForScene(ReadNextLn());
+ break;
+ case "QuestsCompleteWhenLastOnMap":
+ if (levelData != null)
+ {
+ levelData.questsCompleteWhenLastVisitingMap = int.Parse(ReadNextLn());
+ }
+ break;
+ case "Beaten":
+ if (levelData != null)
+ {
+ levelData.beatenBest = ReadNextLn() == "1";
+ }
+ break;
+ case "HighscoreV2":
+ if (levelData != null)
+ {
+ levelData.highscoreBest = int.Parse(ReadNextLn());
+ }
+ break;
+ case "NetworthV2 / Day":
+ if (levelData != null)
+ {
+ int num = int.Parse(ReadNextLn());
+ levelData.dayToDayNetworthBest.Clear();
+ for (int l = 0; l < num; l++)
+ {
+ levelData.dayToDayNetworthBest.Add(int.Parse(ReadNextLn()));
+ }
+ }
+ break;
+ case "ScoreV2 / Day":
+ if (levelData != null)
+ {
+ int num = int.Parse(ReadNextLn());
+ levelData.dayToDayScoreBest.Clear();
+ for (int k = 0; k < num; k++)
+ {
+ levelData.dayToDayScoreBest.Add(int.Parse(ReadNextLn()));
+ }
+ }
+ break;
+ case "Beaten With":
+ {
+ if (levelData == null)
+ {
+ break;
+ }
+ int num = int.Parse(ReadNextLn());
+ List<Equippable> list = new List<Equippable>();
+ for (int i = 0; i < num; i++)
+ {
+ string text = ReadNextLn();
+ Equippable item = null;
+ for (int j = 0; j < allEquippablesID.Count; j++)
+ {
+ if (allEquippablesID[j].name == text)
+ {
+ item = allEquippablesID[j];
+ }
+ }
+ list.Add(item);
+ }
+ levelData.levelHasBeenBeatenWith.Add(list);
+ break;
+ }
+ }
+ }
+ perkManager.CallAfterLoadToUnlockPerksAndStuff();
+ DebugLogInEditorOnly("Loaded Game from " + FullSaveFilePath);
+ }
+
+ private string ReadNextLn()
+ {
+ iln++;
+ line = loadData[iln];
+ return line;
+ }
+
+ private void DebugLogInEditorOnly(string _log)
+ {
+ }
+}