diff --git a/README.md b/README.md index 4c6bfca..9b0fd86 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,11 @@

Gameframe.SaveLoad 👋

+ Serialization helper utility that supports save, load and encryption. @@ -12,7 +17,7 @@ Serialization helper utility that supports save, load and encryption. #### Using UnityPackageManager (for Unity 2019.3 or later) Open the package manager window (menu: Window > Package Manager)
Select "Add package from git URL...", fill in the pop-up with the following link:
-https://github.com/coryleach/UnitySaveLoad.git#1.0.8
+https://github.com/coryleach/UnitySaveLoad.git#1.0.9
#### Using UnityPackageManager (for Unity 2019.1 or later) @@ -20,7 +25,7 @@ Find the manifest.json file in the Packages folder of your project and edit it t ```js { "dependencies": { - "com.gameframe.saveload": "https://github.com/coryleach/UnitySaveLoad.git#1.0.8", + "com.gameframe.saveload": "https://github.com/coryleach/UnitySaveLoad.git#1.0.9", ... }, } @@ -82,7 +87,7 @@ In player settings add the string 'JSON_DOT_NET' to Scripting Define Symbols. 👤 **Cory Leach** -* Mastodon: [@coryleach@mastodon.gamedev.place](https://mastodon.gamedev.place/@coryleach) +* Twitter: [@coryleach](https://twitter.com/coryleach) * Github: [@coryleach](https://github.com/coryleach) diff --git a/Runtime/SaveLoadManager.cs b/Runtime/SaveLoadManager.cs index a0ccd58..2700177 100644 --- a/Runtime/SaveLoadManager.cs +++ b/Runtime/SaveLoadManager.cs @@ -140,6 +140,20 @@ public T Copy(T obj) return (T)saveLoadMethod.Copy(obj); } + /// + /// Get the full path to a save file + /// + /// Name of file + /// Name of folder containing file + /// true if saves are from streaming assets + /// full path to the file on disk + public string GetPath(string filename, string folderName = null, bool streamingAssets = false) + { + var savePath = SaveLoadUtility.GetSavePath(folderName, baseFolder, streamingAssets); + var saveFilename = savePath + filename; + return saveFilename; + } + /// /// Load an object from disk /// diff --git a/Tests/Runtime/SaveLoadManagerTests.cs b/Tests/Runtime/SaveLoadManagerTests.cs index 11f397e..6746109 100644 --- a/Tests/Runtime/SaveLoadManagerTests.cs +++ b/Tests/Runtime/SaveLoadManagerTests.cs @@ -24,14 +24,14 @@ public class SaveLoadTestUnityObject : ScriptableObject public Vector3 pt; public Quaternion rot; } - + [Serializable] public class SaveLoadDictionaryTestObject { public Dictionary dict = new Dictionary(); public string name = ""; } - + private static readonly string BaseDirectory = "GameData"; private static readonly string SaveDirectory = "SaveData"; private static readonly string TestEncryptionKey = "SaveLoadTestEncryptionKey"; @@ -57,19 +57,19 @@ private static void CleanupFiles() File.Delete(filepath); } } - + [SetUp] public void Setup() { CleanupFiles(); } - + [TearDown] public void Teardown() { CleanupFiles(); } - + [Test] public void CanCreateManager([Values] SerializationMethodType method) { @@ -90,18 +90,25 @@ public void CanSave([Values] SerializationMethodType method) }; const string filename = "Testfile"; - + manager.Save(testObject,filename); var filepath = $"{SaveLoadUtility.GetSavePath(SaveDirectory, BaseDirectory)}/{filename}"; Assert.IsTrue(File.Exists(filepath)); - + manager.DeleteSave(filename); Assert.IsFalse(File.Exists(filepath)); - + Object.Destroy(manager); } - + + [Test] + public void GetPath([Values] SerializationMethodType method) + { + var manager = CreateManager(method); + Debug.Log(manager.GetPath("MyFile.sav")); + } + [Test] public void GetFiles([Values] SerializationMethodType method) { @@ -114,7 +121,7 @@ public void GetFiles([Values] SerializationMethodType method) }; const string filename = "Testfile"; - + manager.Save(testObject,filename); var filepath = $"{SaveLoadUtility.GetSavePath(SaveDirectory, BaseDirectory)}/{filename}"; @@ -123,15 +130,15 @@ public void GetFiles([Values] SerializationMethodType method) var files = manager.GetFiles(); Assert.IsTrue(files.Length == 1,$"Expected 1 file but found {files.Length}"); Assert.IsTrue(files[0] == filename); - + manager.DeleteSave(filename); Assert.IsFalse(File.Exists(filepath)); - + Object.Destroy(manager); } - - + + [Test] public void CanSaveAndLoad([Values] SerializationMethodType method) { @@ -144,29 +151,29 @@ public void CanSaveAndLoad([Values] SerializationMethodType method) }; const string filename = "Testfile"; - + manager.Save(testObject,filename); var filepath = $"{SaveLoadUtility.GetSavePath(SaveDirectory, BaseDirectory)}/{filename}"; Assert.IsTrue(File.Exists(filepath)); var loadedObject = manager.Load(filename); - + Assert.IsTrue(loadedObject.listOfStrings.Count == testObject.listOfStrings.Count); for (int i = 0; i < testObject.listOfStrings.Count; i++) { Assert.IsTrue(testObject.listOfStrings[i] == loadedObject.listOfStrings[i]); } - + Assert.IsTrue(testObject.count == loadedObject.count); - + manager.DeleteSave(filename); Assert.IsFalse(File.Exists(filepath)); - + Object.Destroy(manager); } - + [Test] public void CanCopy([Values] SerializationMethodType method) { @@ -179,7 +186,7 @@ public void CanCopy([Values] SerializationMethodType method) }; var loadedObject = manager.Copy(testObject); - + Assert.NotNull(loadedObject); Assert.IsFalse(ReferenceEquals(testObject,loadedObject)); Assert.NotNull(loadedObject.listOfStrings); @@ -189,12 +196,12 @@ public void CanCopy([Values] SerializationMethodType method) { Assert.IsTrue(testObject.listOfStrings[i] == loadedObject.listOfStrings[i]); } - + Assert.IsTrue(testObject.count == loadedObject.count); - + Object.Destroy(manager); } - + [Test] public void LoadReturnsNullWhenFileDoesnotExist([Values] SerializationMethodType method) { @@ -203,7 +210,7 @@ public void LoadReturnsNullWhenFileDoesnotExist([Values] SerializationMethodType var loadedObject = manager.Load(filename); Assert.IsTrue(loadedObject == null); - + Object.Destroy(manager); } @@ -218,17 +225,17 @@ public void CanSaveUnityObject([Values] SerializationMethodType method) testObj.textValue = "MyValue"; manager.SaveUnityObject(testObj,filename); - + var filepath = $"{SaveLoadUtility.GetSavePath(SaveDirectory, BaseDirectory)}/{filename}"; Assert.IsTrue(File.Exists(filepath)); - + manager.DeleteSave(filename); Assert.IsFalse(File.Exists(filepath)); - + Object.Destroy(testObj); Object.Destroy(manager); } - + [Test] public void CanSaveLoadUnityObject([Values] SerializationMethodType method) { @@ -241,16 +248,16 @@ public void CanSaveLoadUnityObject([Values] SerializationMethodType method) testObj.textValue = "MyValue"; manager.SaveUnityObject(testObj,filename); - + var filepath = $"{SaveLoadUtility.GetSavePath(SaveDirectory, BaseDirectory)}/{filename}"; Assert.IsTrue(File.Exists(filepath)); - + manager.LoadUnityObjectOverwrite(loadedTestObj,filename); Assert.IsTrue(loadedTestObj.textValue == testObj.textValue); - + manager.DeleteSave(filename); Assert.IsFalse(File.Exists(filepath)); - + Object.Destroy(testObj); Object.Destroy(loadedTestObj); Object.Destroy(manager); @@ -264,16 +271,16 @@ public void CanCopyUnityObject([Values] SerializationMethodType method) var loadedTestObj = ScriptableObject.CreateInstance(); testObj.textValue = "MyValue"; - + manager.CopyUnityObjectOverwrite(testObj,loadedTestObj); Assert.IsTrue(loadedTestObj.textValue == testObj.textValue); - + Object.Destroy(testObj); Object.Destroy(loadedTestObj); Object.Destroy(manager); } - + [Test] public void CopyThrowsArgumentExceptionOnUnityObject([Values] SerializationMethodType method) { @@ -284,7 +291,7 @@ public void CopyThrowsArgumentExceptionOnUnityObject([Values] SerializationMetho { manager.Copy(testObj); }); - + Object.Destroy(testObj); Object.Destroy(manager); } @@ -305,21 +312,21 @@ public void CanSaveAndLoadDictionary([Values( { dict = new Dictionary { - {"one", 1}, + {"one", 1}, {"two", 2} }, name = "Test", }; const string filename = "Testfile"; - + manager.Save(testObject,filename); var filepath = $"{SaveLoadUtility.GetSavePath(SaveDirectory, BaseDirectory)}/{filename}"; Assert.IsTrue(File.Exists(filepath)); var loadedObject = manager.Load(filename); - + Assert.IsTrue(loadedObject.name == testObject.name); Assert.IsTrue(loadedObject.dict.Count == testObject.dict.Count); Assert.IsTrue(loadedObject.dict.ContainsKey("one")); @@ -329,9 +336,9 @@ public void CanSaveAndLoadDictionary([Values( manager.DeleteSave(filename); Assert.IsFalse(File.Exists(filepath)); - + Object.Destroy(manager); } - + } } diff --git a/package.json b/package.json index bfcde8b..b0b9698 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "com.gameframe.saveload", "displayName": "Gameframe.SaveLoad", - "version": "1.0.8", + "version": "1.0.9", "description": "Serialization helper utility that supports save, load and encryption.", "keywords": [], "author": {