/// <summary> /// Сохранить состояние инвентаря в файл. /// </summary> /// <returns>Сохранение прошло успешно.</returns> public bool Save() { var listItems = new InventoryStatus(); foreach (CellController cell in _cells) if (cell.Item != null) listItems.Cells.Add(CellInfo.ToCellInfo(cell)); var file = Application.dataPath + "\\" + InventoryController.FILENAME_SAVE; var ser = new XmlSerializer(typeof(InventoryStatus)); try { using (FileStream stream = new FileStream(file, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite)) using (TextWriter writer = new StreamWriter(stream)) { ser.Serialize(writer, listItems); var hash = stream.GetSHA1Hash(); PlayerPrefs.SetString("inventory", hash); PlayerPrefs.Save(); writer.Close(); } } catch { return false; } return true; }
/// <summary> /// Загрузить состояние инвентаря из файла. /// </summary> /// <param name="status">Загруженный статус инвентаря.</param> /// <returns>Загрузка прошла успешно.</returns> public static bool Load(out InventoryStatus status) { status = new InventoryStatus(); var file = Application.dataPath + "\\" + InventoryController.FILENAME_SAVE; if (!File.Exists(file)) return false; var ser = new XmlSerializer(typeof(InventoryStatus)); try { using (FileStream stream = new FileStream(file, FileMode.Open, FileAccess.Read)) { var list = ser.Deserialize(stream) as InventoryStatus; var hashFile = stream.GetSHA1Hash(); var hashSave = PlayerPrefs.GetString("inventory"); if (!String.IsNullOrEmpty(hashSave) && hashFile == hashSave) { if (list != null) status = list; } else { LogController.Instance.AddString("<color=red>Ошибка инвентаря</color>: файл инвентаря повреждён - загрузка невозможна."); } } } catch { return false; } return true; }
private void OnApplicationQuit() { var status = new InventoryStatus(Cells); status.Save(); }