UnityGameProjectsCode / RelianceGame / Save Data Control / SaveFileManager.cs
SaveFileManager.cs
Raw
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.");
    }
}