Пример #1
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
Пример #2
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