} // 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
// 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