using System; using System.Globalization; using System.IO; using System.Text; using UnityEngine; namespace I2.Loc { public static class PersistentStorage { static I2CustomPersistentStorage mStorage; public enum eFileType { Raw, Persistent, Temporal, Streaming } #region PlayerPrefs public static void SetSetting_String(string key, string value) { if (mStorage == null) mStorage = new I2CustomPersistentStorage(); mStorage.SetSetting_String(key, value); } public static string GetSetting_String(string key, string defaultValue) { if (mStorage == null) mStorage = new I2CustomPersistentStorage(); return mStorage.GetSetting_String(key, defaultValue); } public static void DeleteSetting(string key) { if (mStorage == null) mStorage = new I2CustomPersistentStorage(); mStorage.DeleteSetting(key); } public static bool HasSetting( string key ) { if (mStorage == null) mStorage = new I2CustomPersistentStorage(); return mStorage.HasSetting(key); } public static void ForceSaveSettings() { if (mStorage == null) mStorage = new I2CustomPersistentStorage(); mStorage.ForceSaveSettings(); } #endregion #region File Management public static bool CanAccessFiles() { if (mStorage == null) mStorage = new I2CustomPersistentStorage(); return mStorage.CanAccessFiles(); } public static bool SaveFile(eFileType fileType, string fileName, string data, bool logExceptions = true) { if (mStorage == null) mStorage = new I2CustomPersistentStorage(); return mStorage.SaveFile(fileType, fileName, data, logExceptions); } public static string LoadFile(eFileType fileType, string fileName, bool logExceptions=true) { if (mStorage == null) mStorage = new I2CustomPersistentStorage(); return mStorage.LoadFile(fileType, fileName, logExceptions); } public static bool DeleteFile(eFileType fileType, string fileName, bool logExceptions = true) { if (mStorage == null) mStorage = new I2CustomPersistentStorage(); return mStorage.DeleteFile(fileType, fileName, logExceptions); } public static bool HasFile(eFileType fileType, string fileName, bool logExceptions = true) { if (mStorage == null) mStorage = new I2CustomPersistentStorage(); return mStorage.HasFile(fileType, fileName, logExceptions); } #endregion } public abstract class I2BasePersistentStorage { #region PlayerPrefs public virtual void SetSetting_String(string key, string value) { try { // Use PlayerPrefs, but if the data is bigger than the limit, split it into multiple entries var len = value.Length; int maxLength = 8000; if (len<=maxLength) { PlayerPrefs.SetString(key, value); } else { int numSections = Mathf.CeilToInt(len / (float)maxLength); for (int i=0; i