using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; public class SaveFileManager : MonoBehaviour { public string saveFileName; public int saveFileIndex = 0; public int hours, minutes, seconds, totalTimeInSeconds, botLevelValue; public List<string> fileNames = new List<string>(); public float[] volumes = new float[4]; //public List<GameObject> missionsGenerated = new List<GameObject>(); private List<SaveGameData> savedInfo = new List<SaveGameData>(); private InventoryManager manager; private UIManager uiMgr; private HUBTracker tracker; private GameObject saveGameNotification; private SettingsControl settingsCtrl; private ItemPool iPool; private MissionSelect mSelect; private void Awake() { manager = GetComponent<InventoryManager>(); tracker = GetComponent<HUBTracker>(); uiMgr = GetComponent<UIManager>(); settingsCtrl = GameObject.Find("SettingsUI").GetComponent<SettingsControl>(); settingsCtrl.gameObject.SetActive(false); volumes[0] = settingsCtrl.GetMasterVolume(); volumes[1] = settingsCtrl.GetEnvVolume(); volumes[2] = settingsCtrl.GetMusicVolume(); volumes[3] = settingsCtrl.GetSFXVolume(); FileData data = null; if (SaveSystem.CheckIfFileInfoExists() == false) SaveSystem.SaveFileData(this); data = SaveSystem.LoadFileData(); if (data.latestSaveGame != "") { if (SaveSystem.CheckIfSaveDataExists(data.latestSaveGame)) saveFileName = data.latestSaveGame; else { saveFileName = ""; Debug.Log("The last save used no longer exists. The continue button is unavailable."); } } else Debug.Log("No file name was present for the last saved game"); if (data.fileNames != null) fileNames = data.fileNames; else Debug.Log("The file names list was null, no save games found"); if (fileNames.Count >= 1) { for (int i = 0; i < fileNames.Count; i++) { savedInfo.Add(SaveSystem.LoadAllSaveData(fileNames[i])); } } } private void Start() { SettingsData sData = null; if (SaveSystem.CheckIfSettingsExists() == false) SaveSystem.SaveSettingsData(this); sData = SaveSystem.LoadSettingsData(); if (sData.volumes != null) { for (int i = 0; i < volumes.Length; i++) { volumes[i] = sData.volumes[i]; } Debug.Log(volumes[0] + " " + volumes[1] + " " + volumes[2] + " " + volumes[3]); settingsCtrl.SetMasterVolume(volumes[0]); settingsCtrl.SetEnvVolume(volumes[1]); settingsCtrl.SetMusicVolume(volumes[2]); settingsCtrl.SetSFXVolume(volumes[3]); //settingsCtrl.ModifyAllVolumes(volumes[0], volumes[1], volumes[2], volumes[3]); } else Debug.Log("The volumes array was empty, no volume data could be found"); } public void OnLevelLoad(Scene currentScene) { if (currentScene.name == "HUB scene") { saveGameNotification = GameObject.Find("HUBUI/Save Notification"); GameObject invPanel = uiMgr.GetInventoryPanel(); iPool = invPanel.GetComponent<ItemPool>(); mSelect = GameObject.Find("HUBUI/Missions Panel/Content Panel/Vertical Group").GetComponent<MissionSelect>(); saveGameNotification.SetActive(false); if (fileNames.Count == 0) { Debug.Log("File names count was 0, saving new file."); SaveSystem.SaveAllData(this, tracker, manager, saveFileName); savedInfo.Add(SaveSystem.LoadAllSaveData(saveFileName)); } else if (fileNames.Count >= 1) { bool matchingName = false; for (int i = 0; i < savedInfo.Count; i++) //check each save info in the list to see if any of the names match the current save file name { if (savedInfo[i].fileNameText == saveFileName) { matchingName = true; break; } } if (matchingName == false) //if there were no matching names, create a new save file and add it to the list of save info { Debug.Log("Current file name was not found in the saved info list, adding new entry"); SaveSystem.SaveAllData(this, tracker, manager, saveFileName); savedInfo.Add(SaveSystem.LoadAllSaveData(saveFileName)); } } saveGameNotification.GetComponent<SaveNotificationControl>().RunAnimation(); for (int i = 0; i < savedInfo.Count; i++) { if (savedInfo[i].fileNameText == saveFileName) { saveFileIndex = i; break; } } } else if (currentScene.name == "Main Menu") //if returning to the main menu, for each file name, reload the data { for (int i = 0; i < fileNames.Count; i++) { savedInfo[i] = (SaveSystem.LoadAllSaveData(fileNames[i])); } } } public void SendDataToSaveSystem() { bool duplicateFile = false; for (int i = 0; i < fileNames.Count; i++) //if any of the file names that the list already holds match the one thats being added, dont add it { if (fileNames[i] == saveFileName) { //Debug.Log("File name was a duplicate"); duplicateFile = true; } } if (duplicateFile == false) { //Debug.Log("File name was not a duplicate, adding file name to list. Saving new file."); fileNames.Add(saveFileName); SaveSystem.SaveAllData(this, tracker, manager, saveFileName); } SaveSystem.SaveFileData(this); //Debug.Log("Current file name: " + saveFileName + " Current file index: " + saveFileIndex + " Number of saveInfo data files: " + savedInfo.Count); savedInfo[saveFileIndex].creditsValue = manager.currency; savedInfo[saveFileIndex].datumValue = manager.currency1; SetCurrentPlayTime(); SetBotLevelValue(); SaveSystem.SaveAllData(this, tracker, manager, saveFileName); } public void RemoveSaveFile(string fileName) { for (int i = 0; i < fileNames.Count; i++) { if (fileNames[i] == fileName) { fileNames.RemoveAt(i); SaveSystem.SaveFileData(this); savedInfo.RemoveAt(i); SaveSystem.DeleteSave(fileName); break; } } } public void SaveSettingsDataOnly() { volumes[0] = settingsCtrl.GetMasterVolume(); volumes[1] = settingsCtrl.GetEnvVolume(); volumes[2] = settingsCtrl.GetMusicVolume(); volumes[3] = settingsCtrl.GetSFXVolume(); SaveSystem.SaveSettingsData(this); } public List<int> GetArmoryInfo() { return savedInfo[saveFileIndex].armoryItemIDs; } public List<int> GetJunkInfo() { return savedInfo[saveFileIndex].junkItemIDs; } public List<int> GetWeaponInfo() { return savedInfo[saveFileIndex].weaponItemIDs; } public List<int> GetSpecialInfo() { return savedInfo[saveFileIndex].specialItemIDs; } public List<int> GetItemPoolArmoryInfo() { return iPool.GetArmoryInfo(); } public List<int> GetItemPoolJunkInfo() { return iPool.GetJunkInfo(); } public List<int> GetItemPoolWeaponInfo() { return iPool.GetWeaponInfo(); } public List<int> GetItemPoolSpecialInfo() { return iPool.GetSpecialInfo(); } public List<GameObject> GetMissionsList() { return mSelect.GetMissionsList(); } public List<SaveGameData> GetSaveData() //get all save file info { return savedInfo; } public SaveGameData GetSaveData(int index) //get a specific save files info { return savedInfo[index]; } public void SetCurrentPlayTime() { //convert the float for playtime into hours, minutes, and seconds and then set it float playTime = Time.time; int roundedPlayTime = Mathf.RoundToInt(playTime); //int tempSeconds = Mathf.RoundToInt(playTime % 60); //int tempMinutes = Mathf.RoundToInt((playTime / 60) % 60); //int tempHours = Mathf.RoundToInt((playTime / 3600) % 24); //int modSeconds = tempSeconds + savedInfo[saveFileIndex].seconds; //int modMinutes = tempMinutes + savedInfo[saveFileIndex].minutes; //int modHours = tempHours + savedInfo[saveFileIndex].hours; int moddedPlayTime = roundedPlayTime + savedInfo[saveFileIndex].totalTimeInSeconds; int tempSeconds = Mathf.RoundToInt(roundedPlayTime % 60); int tempMinutes = Mathf.RoundToInt((roundedPlayTime / 60) % 60); int tempHours = Mathf.RoundToInt((roundedPlayTime / 3600) % 24); //while (modSeconds > 60) //{ // modMinutes += 1; // modSeconds -= 60; //} //while(modMinutes > 60) //{ // modHours += 1; // modMinutes -= 60; //} seconds = tempSeconds; minutes = tempMinutes; hours = tempHours; totalTimeInSeconds = moddedPlayTime; } public void SetBotLevelValue() { int highestValue = 0; for (int i = 0; i < 4; i++) { int currentValue = 0; switch (i) { case 0: currentValue = tracker.leadBot.level; break; case 1: currentValue = tracker.blueBot.level; break; case 2: currentValue = tracker.greenBot.level; break; case 3: currentValue = tracker.orangeBot.level; break; } if (currentValue > highestValue) highestValue = currentValue; } botLevelValue = highestValue; } public void ClearMissionsAndShopLists() { savedInfo[saveFileIndex].missions.Clear(); savedInfo[saveFileIndex].armoryItemIDs.Clear(); savedInfo[saveFileIndex].junkItemIDs.Clear(); savedInfo[saveFileIndex].weaponItemIDs.Clear(); savedInfo[saveFileIndex].specialItemIDs.Clear(); Debug.Log("All missions and shop items have been cleared."); } }