示例#1
0
    public void StartUpSequence()
    {
        StartCoroutine(LoadMainMenu());

        string oldPath = Path.Combine(Application.persistentDataPath, "SaveFiles");

        oldPath = Path.Combine(oldPath, "SaveData.sav");
        //Check if old format exists
        if (File.Exists(oldPath) && !File.Exists(dataPath))
        {
            LoadingText("Old Save Format Detected");

            //Load Old format
            SaveData        oldSave;
            BinaryFormatter binaryFormatter = new BinaryFormatter();

            using (FileStream fileStream = File.Open(oldPath, FileMode.Open))
            {
                oldSave = (SaveData)binaryFormatter.Deserialize(fileStream);
            }

            LoadingText("Converting Old Save");
            //Save into new format
            JSONSaveData.currentSave = JSONSaveData.ConvertToNew(oldSave);
            SaveGame();

            loadComplete = true;
            //Done
        }
        else
        {
            LoadGame();
        }
    }
示例#2
0
    public static JSONSaveData ConvertToNew(SaveData file)
    {
        JSONSaveData newSave = new JSONSaveData();

        newSave.BGMVol             = file.BGMVol;
        newSave.SFXVol             = file.SFXVol;
        newSave.displayType        = file.displayType;
        newSave.tutorialCompleted  = file.tutorialCompleted;
        newSave.tutorialBadgeShown = file.tutorialBadgeShown;
        newSave.displayType        = file.displayType;

        for (int i = 0; i < file.defeated.Length; i++)
        {
            newSave.defeated[i] = file.defeated[i];
        }

        for (int i = 0; i < file.marbleUnlocked.Length - 1; i++)
        {
            newSave.marbleUnlocked[i] = file.marbleUnlocked[i];
        }

        newSave.marbleUnlocked[(int)MarbleDesign.Golden] = file.marbleUnlocked[file.marbleUnlocked.Length - 1];

        newSave.selectedDesign = file.selectedDesign;

        return(newSave);
    }
示例#3
0
        } // ToJSONSaveData

        // Genera un código hash SHA-1 a partir de los datos de la partida
        public static string GenerateHashCode(JSONSaveData data)
        {
            // Generar string a partir de los datos de pistas y progreso en niveles
            string input = "";

            if (data == null || data.levelGroups == null)
            {
                return(input);
            }

            input += data.hints.ToString(); // Nº de pistas
            foreach (JSONLevelGroup group in data.levelGroups)
            {
                for (int i = 0; i < group.levelStates.Count; i++)
                {
                    input += group.levelStates[i].ToString(); // Progreso de los niveles
                }
            }
            // Generar el código hash usando el algoritmo SHA-1
            using (SHA1Managed sha1 = new SHA1Managed())
            {
                var hash = sha1.ComputeHash(Encoding.UTF8.GetBytes(input));
                var sb   = new StringBuilder(hash.Length * 2);

                foreach (byte b in hash)
                {
                    sb.Append(b.ToString("x2")); // Escribe en sb el byte b en formato hexadecimal
                }
                return(sb.ToString());
            }
        }
示例#4
0
        // --------------------
        // Métodos
        // --------------------

        // Serializa el progreso del jugador y lo almacena en PlayerPrefs
        public static void SaveGameData(GameData data)
        {
            JSONSaveData jsonData = ToJSONSaveData(data);       // Crea un JSONSaveData con los datos de la partida
            string       hashCode = GenerateHashCode(jsonData); // Genera un hash a partir de jsonData

            jsonData.saveId = hashCode;                         // Añade el hash a jsonData
            string json = JsonUtility.ToJson(jsonData);

            PlayerPrefs.SetString("progress", json);
        }
示例#5
0
    private void LoadCompletedCallback(SavedGameRequestStatus status, byte[] savedData)
    {
        //if reading of the data was successful
        if (status == SavedGameRequestStatus.Success)
        {
            //if we've never played the game before, savedData will have length of 0
            if (savedData.Length == 0)
            {
                LoadingText("No save in cloud");
                JSONSaveData.currentSave = LoadGameLocal(false);
                return;
            }
            else
            {
                //Compare cloud and local
                JSONSaveData jsonCloud = JsonUtility.FromJson <JSONSaveData>(Encoding.ASCII.GetString(savedData));
                JSONSaveData jsonLocal = LoadGameLocal();

                LoadingText("Comparing files");
                if (jsonCloud.playTime >= jsonLocal.playTime)
                {
                    LoadingText("Loading from cloud");
                    loadComplete             = true;
                    JSONSaveData.currentSave = jsonCloud;
                }
                else
                {
                    LoadingText("Loading from local");
                    loadComplete             = true;
                    JSONSaveData.currentSave = jsonLocal;
                }
            }
        }
        else
        {
            JSONSaveData.currentSave = LoadGameLocal();
        }
    }
示例#6
0
        } // LoadGameData

        // Devuelve un JSONSaveData con los datos actuales del progreso y el nº de pistas del jugador
        static JSONSaveData ToJSONSaveData(GameData data)
        {
            JSONSaveData jsonData = new JSONSaveData();

            // nº de pistas desbloqueadas
            jsonData.hints = data.numOfHints;
            // progreso en los niveles
            List <JSONLevelGroup> groups = new List <JSONLevelGroup>();

            for (int g = 0; g < data.levelProgress.Count; g++)
            {
                List <int> states       = new List <int>(); // Lista con el estado de cada nivel
                int        levelsLength = data.levelProgress[g].Length;
                int        level        = 0;
                bool       locked       = false;
                // Guarda el estado de los niveles hasta encontrar el primero bloqueado (a partir de él, todos están bloqueados y no se guardan)
                while (level < levelsLength && !locked)
                {
                    LevelState state = data.levelProgress[g][level];
                    if (state != LevelState.LOCKED) // Solo guardamos los niveles desbloqueados o completados
                    {
                        states.Add((int)state);
                    }
                    else
                    {
                        locked = true;
                    }
                    level++;
                }
                JSONLevelGroup levels = new JSONLevelGroup();
                levels.levelStates = states;
                groups.Add(levels);        // Añade el grupo a la lista de grupos
            }
            jsonData.levelGroups = groups; // Establece la lista de grupos

            return(jsonData);
        } // ToJSONSaveData
示例#7
0
        // Carga el progreso del jugador, si no hay progreso guardado guarda el estado inicial del juego
        public static void LoadGameData(ref GameData data)
        {
            string json = PlayerPrefs.GetString("progress");

            if (json == "")         // No hay progreso guardado
            {
                SaveGameData(data); // Guarda el estado inicial por defecto
                return;
            }

            JSONSaveData jsonData = JsonUtility.FromJson <JSONSaveData>(json);

            // Comprobación del código hash de la partida
            string saveDataHash = jsonData.saveId;
            string testHash     = GenerateHashCode(jsonData); // Genera un hash de comprobación

            if (saveDataHash != testHash)                     // Si los hash no coinciden => Sobreescribir la partida guardada
            {
                SaveGameData(data);                           // Guarda el estado inicial por defecto
                return;
            }

            // Carga el número de pistas
            data.numOfHints = jsonData.hints;

            // Carga del progreso de los niveles
            List <JSONLevelGroup> jsonGroups = jsonData.levelGroups;

            for (int i = 0; i < data.levelProgress.Count; i++)
            {
                JSONLevelGroup group = jsonGroups[i];
                for (int j = 0; j < group.levelStates.Count; j++)
                {
                    data.levelProgress[i][j] = (LevelState)group.levelStates[j];
                }
            }
        } // LoadGameData