/// <summary> /// Load the given persistable. /// </summary> /// <param name="p">Persistable to laod.</param> public static void Load(Persistable p) { string data = PlayerPrefs.GetString(p.UniqueSaveKey, ""); if (data.Length > 0) { using (StringReader reader = new StringReader(data)){ XmlSerializer serializer = new XmlSerializer(p.SavedObjectType); object savedObject = serializer.Deserialize(reader); p.SaveData = savedObject; p.PostLoadAction(); } } else { p.PostResetAction(); } }
/// <summary> /// Save the given persistable. /// </summary> /// <param name="p">Persistable to save.</param> public static void Save(Persistable p) { object saveData = p.SaveData; // We assume all saveData is annotated with [Serializable] we could add a condition for ISeriazable too. if (saveData.GetType() == p.SavedObjectType && p.SavedObjectType.IsSerializable) { using (StringWriter writer = new StringWriter()) { XmlSerializer serializer = new XmlSerializer(p.SavedObjectType); serializer.Serialize(writer, saveData); PlayerPrefs.SetString(p.UniqueSaveKey, writer.ToString()); } } else { Debug.LogError("Save data for " + p + " is not serializable or of the wrong type."); } }
/// <summary> /// Resets the given persistable. /// </summary> /// <param name="p">Persistable to reset.</param> public static void Reset(Persistable p) { PlayerPrefs.DeleteKey(p.UniqueSaveKey); p.PostResetAction(); }