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": {