Rei's Save Manager
unknown
csharp
3 years ago
5.7 kB
5
Indexable
using System.IO; using System.Runtime.Serialization.Formatters.Binary; using UnityEngine; public static class SaveManager { public enum FileStreamType { Binary = 0, FileStream = 1 , PlayerPref =2 }; public static void SaveFile<T>(T objectT, string fileName, FileStreamType fileStreamType ,bool toPersistantDataPath = true, string fileType = "txt", string PathFolders = "") { switch (fileStreamType) { case FileStreamType.Binary: SaveToFilePathAndConvertItToBinary(objectT, fileName, fileType, PathFolders, toPersistantDataPath); break; case FileStreamType.FileStream: SaveToFilePathAndDontConvertItToBinary(objectT, fileName, fileType, PathFolders,toPersistantDataPath); break; case FileStreamType.PlayerPref: SaveToPlayerPref(objectT, fileName); break; default: throw new System.Exception("Save method was not assigned!"); } } private static void SaveToFilePathAndConvertItToBinary<T>(T objectT, string fileName, string fileType, string PathFolders,bool isPersistantDataPath) { string persistantDataPath = isPersistantDataPath ? Application.persistentDataPath : Application.dataPath; string path = string.Concat(persistantDataPath, "/", PathFolders, fileName, ".", fileType); if (!Directory.Exists(string.Concat(persistantDataPath, "/", PathFolders))) Directory.CreateDirectory(string.Concat(persistantDataPath, "/", PathFolders)); BinaryFormatter binaryFormatter = new BinaryFormatter(); FileStream fileStream = new FileStream(path, FileMode.Create); binaryFormatter.Serialize(fileStream, objectT); fileStream.Close(); } private static void SaveToFilePathAndDontConvertItToBinary<T>(T objectT, string fileName, string fileType, string PathFolders, bool isPersistantDataPath) { string dataPath = isPersistantDataPath ? Application.persistentDataPath : Application.dataPath; string windowPath = string.Concat(dataPath, "/", PathFolders, fileName, ".", fileType); if (!Directory.Exists(string.Concat(dataPath, "/", PathFolders))) Directory.CreateDirectory(string.Concat(dataPath, "/", PathFolders)); var streamWriter = File.CreateText(windowPath); streamWriter.Write(JsonUtilityHandler.ConvertObjectToJson(objectT)); streamWriter.Close(); } private static void SaveToPlayerPref<T>(T objectT, string fileName) { PlayerPrefs.SetString(fileName, JsonUtilityHandler.ConvertObjectToJson(objectT)); PlayerPrefs.Save(); } public static T Load<T>(string fileName, FileStreamType fileStream, string fileType = "txt",bool fromApplicationPersistantDataPath = true, string PathFolders = "") where T : class { T objectLoaded = null; switch (fileStream) { case FileStreamType.Binary: objectLoaded = LoadFromBinaryFilePath<T>(fileName, fileType, PathFolders, fromApplicationPersistantDataPath); break; case FileStreamType.FileStream: objectLoaded = LoadFromFilePath<T>(fileName, fileType, PathFolders, fromApplicationPersistantDataPath); break; case FileStreamType.PlayerPref: objectLoaded = LoadFromPlayerPref<T>(fileName); break; default: throw new System.Exception("FileStreamType is not valid!"); } if (objectLoaded == null) Debug.Log("No Save File"); return objectLoaded; } private static T LoadFromPlayerPref<T>(string fileName) where T : class { if (PlayerPrefs.HasKey(fileName)) return JsonUtilityHandler.LoadFromJson<T>(PlayerPrefs.GetString(fileName)); return null; } private static T LoadFromFilePath<T>(string fileName, string fileType, string PathFolders , bool fromPersistantDataPath) where T : class { string dataPAth = fromPersistantDataPath ? Application.persistentDataPath : Application.dataPath; string path = string.Concat(dataPAth, "/", PathFolders, fileName, ".", fileType); if (File.Exists(path)) { string txt = File.ReadAllText (path); T loadedObject = JsonUtilityHandler.LoadFromJson<T>(txt); return loadedObject; } return null; } private static T LoadFromBinaryFilePath<T>(string fileName, string fileType, string PathFolders, bool fromPersistantDataPath) where T : class { string dataPath = fromPersistantDataPath ? Application.persistentDataPath : Application.dataPath; string path = string.Concat(dataPath, "/", PathFolders, fileName, ".", fileType); if (File.Exists(path)) { BinaryFormatter formatter = new BinaryFormatter(); FileStream fileStream = new FileStream(path, FileMode.Open); T loadedObject =(T)formatter.Deserialize(fileStream) ; fileStream.Close(); return loadedObject; } return null; } } public static class JsonUtilityHandler { public static string ConvertObjectToJson (object data) => JsonUtility.ToJson(data); public static void LoadOverrideFromJson(string json, object data) => JsonUtility.FromJsonOverwrite(json, data); public static T LoadFromJson<T>(string json) =>JsonUtility.FromJson<T>(json); }
Editor is loading...