//NOTE(Simon): These function parse a specific version to the current Compat class. //NOTE(Simon): Add more of these when changing the savefile version. #region Upgraders public static SaveFileDataCompat ParseToCompatV3toV4(string raw) { var saveFileData = new SaveFileDataCompat(); var result = new ParsedJsonLine(); result = JsonGetValueFromLine(raw, result.endindex); saveFileData.meta.version = Convert.ToInt32(result.value, CultureInfo.InvariantCulture); result = JsonGetValueFromLine(raw, result.endindex); saveFileData.meta.guid = new Guid(result.value); result = JsonGetValueFromLine(raw, result.endindex); saveFileData.meta.title = result.value; result = JsonGetValueFromLine(raw, result.endindex); saveFileData.meta.description = result.value; result = JsonGetValueFromLine(raw, result.endindex); saveFileData.meta.length = Convert.ToSingle(result.value, CultureInfo.InvariantCulture); saveFileData.points = new List <InteractionPointSerializeCompat>(); foreach (var obj in ParseInteractionPoints(raw, result.endindex)) { saveFileData.points.Add(JsonUtility.FromJson <InteractionPointSerializeCompat>(obj)); } return(saveFileData); }
/* * public static List<string> GetExtraFiles(string metaFileName) * { * var str = GetSaveFileContents(metaFileName); * } */ public static SaveFileData OpenFile(string path) { var str = GetSaveFileContents(path); str = VersionManager.CheckAndUpgradeVersion(str); var saveFileData = new SaveFileData(); var result = new ParsedJsonLine(); result = JsonGetValueFromLine(str, result.endindex); saveFileData.meta.version = Convert.ToInt32(result.value); result = JsonGetValueFromLine(str, result.endindex); saveFileData.meta.guid = new Guid(result.value); result = JsonGetValueFromLine(str, result.endindex); saveFileData.meta.title = result.value; result = JsonGetValueFromLine(str, result.endindex); saveFileData.meta.description = result.value; result = JsonGetValueFromLine(str, result.endindex); saveFileData.meta.length = Convert.ToSingle(result.value); saveFileData.points = new List <InteractionpointSerialize>(); foreach (var obj in ParseInteractionPoints(str, result.endindex)) { saveFileData.points.Add(JsonUtility.FromJson <InteractionpointSerialize>(obj)); } if (VersionManager.isUpdated) { try { using (var file = File.CreateText(path)) { file.Write(str); } } catch (Exception e) { Debug.Log(e.ToString()); } } return(saveFileData); }
/* * public static List<string> GetExtraFiles(string metaFileName) * { * var str = GetSaveFileContents(metaFileName); * } */ public static SaveFileData OpenFile(string path) { var str = GetSaveFileContents(path); var level = 0; var start = 0; var count = 0; var rising = true; var saveFileData = new SaveFileData(); var result = new ParsedJsonLine(); result = JsonGetValueFromLine(str, result.endindex); saveFileData.meta.guid = new Guid(result.value); result = JsonGetValueFromLine(str, result.endindex); saveFileData.meta.title = result.value; result = JsonGetValueFromLine(str, result.endindex); saveFileData.meta.description = result.value; result = JsonGetValueFromLine(str, result.endindex); saveFileData.meta.perspective = (Perspective)Enum.Parse(typeof(Perspective), result.value); //Note(Simon): Value "length" is only used server side, but we still need to skip over the text in the file. result = JsonGetValueFromLine(str, result.endindex); var stringObjects = new List <string>(); for (var i = result.endindex; i < str.Length; i++) { if (str[i] == '{') { if (level == 0) { start = i; } rising = true; level++; } if (str[i] == '}') { level--; rising = false; } count++; if (level == 0 && !rising) { stringObjects.Add(str.Substring(start, count - 1)); count = 0; rising = true; } if (level < 0) { Debug.Log("Corrupted save file. Aborting"); return(null); } } saveFileData.points = new List <InteractionpointSerialize>(); foreach (var obj in stringObjects) { saveFileData.points.Add(JsonUtility.FromJson <InteractionpointSerialize>(obj)); } return(saveFileData); }