/// <summary> /// Read a file that contains save data. /// </summary> /// <param name="dir"></param> /// <param name="filename"></param> /// <returns></returns> public static SAVDAT ReadSav(E_SAVELOCATIONS dir, string filename) { // get path string path = ProfileManager.GetProfileDirectory() + string.Format("/{0}/", dir) + string.Format("{0}.SAV", filename); // if the file doesn't exist then return and throw an error if (!File.Exists(path)) { Debug.LogError("Couldn't load file " + path + "!"); SAVDAT noSav = new SAVDAT(); noSav.exists = false; return noSav; } // read file SAVDAT newSAV = new SAVDAT(); using (StreamReader sr = new StreamReader(path)) { List<string> readStrings = new List<string>(); // read file string line; while ((line = sr.ReadLine()) != null) { readStrings.Add(line); } // convert strings to array newSAV.lines = readStrings.ToArray(); } newSAV.exists = true; return newSAV; }
/// <summary> /// Write a new file that contains save data. /// </summary> /// <param name="sav"></param> /// <param name="filename"></param> public static void WriteSav(SAVDAT sav, string filename) { // create/get path string path = ProfileManager.GetProfileDirectory() + string.Format("/{0}/", sav.saveLocation); if (!Directory.Exists(path)) Directory.CreateDirectory(path); string file = path + string.Format("{0}.SAV", filename); // write file using (StreamWriter sw = new StreamWriter(file)) { int i = 0; for (i = 0; i < sav.lines.Length; ++i) { sw.WriteLine(sav.lines[i]); } } }
/// <summary> /// Write a time record to a SAV file. /// </summary> /// <param name="trackName"></param> /// <param name="speed"></param> /// <param name="time"></param> public static void WriteTime(string trackName, E_SPEEDCLASS speed, float time) { SAVDAT data = new SAVDAT(); data.saveLocation = E_SAVELOCATIONS.TIMES; data.lines = new string[1] { time.ToString() }; WriteSav(data, trackName + "_" + speed); }
/// <summary> /// Sava ghost information to a SAV file. /// </summary> /// <param name="trackName"></param> /// <param name="speed"></param> /// <param name="data"></param> public static void SaveGhost(string trackName, E_SPEEDCLASS speed, GhostData data) { List<string> positions = new List<string>(); List<string> rotations = new List<string>(); List<string> lines = new List<string>(); // populate data to write int i = 0; for (i = 0; i < data.positions.Length; ++i) positions.Add(string.Format("{0} {1} {2}", data.positions[i].x, data.positions[i].y, data.positions[i].z)); for (i = 0; i < data.rotations.Length; ++i) rotations.Add(string.Format("{0} {1} {2} {4}", data.rotations[i].x, data.rotations[i].y, data.rotations[i].z, data.rotations[i].w)); // pack into single string array lines.Add(((int)data.ship).ToString()); for (i = 0; i < positions.Count; ++i) lines.Add(positions[i]); for (i = 0; i < rotations.Count; ++i) lines.Add(rotations[i]); // create new save data and write SAVDAT sav = new SAVDAT(); sav.lines = lines.ToArray(); sav.saveLocation = E_SAVELOCATIONS.GHOSTS; WriteSav(sav, trackName + "_" + speed); }