Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@
</p>
<h1 align="center">Gameframe.SaveLoad 👋</h1>

<!-- BADGE-START ->
<img align="center" src="https://raw.githubusercontent.com/coryleach/UnityPackages/master/Documentation/GameframeFace.gif" />
</p>
<h1 align="center">Gameframe.SaveLoad 👋</h1>

<!-- BADGE-START -<!-- BADGE-END -->

Serialization helper utility that supports save, load and encryption.
Expand All @@ -12,15 +17,15 @@ 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)<br/>
Select "Add package from git URL...", fill in the pop-up with the following link:<br/>
https://github.com/coryleach/UnitySaveLoad.git#1.0.8<br/>
https://github.com/coryleach/UnitySaveLoad.git#1.0.9<br/>

#### Using UnityPackageManager (for Unity 2019.1 or later)

Find the manifest.json file in the Packages folder of your project and edit it to look like this:
```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",
...
},
}
Expand Down Expand Up @@ -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)


Expand Down
14 changes: 14 additions & 0 deletions Runtime/SaveLoadManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,20 @@ public T Copy<T>(T obj)
return (T)saveLoadMethod.Copy(obj);
}

/// <summary>
/// Get the full path to a save file
/// </summary>
/// <param name="filename">Name of file</param>
/// <param name="folderName">Name of folder containing file</param>
/// <param name="streamingAssets">true if saves are from streaming assets</param>
/// <returns>full path to the file on disk</returns>
public string GetPath(string filename, string folderName = null, bool streamingAssets = false)
{
var savePath = SaveLoadUtility.GetSavePath(folderName, baseFolder, streamingAssets);
var saveFilename = savePath + filename;
return saveFilename;
}

/// <summary>
/// Load an object from disk
/// </summary>
Expand Down
91 changes: 49 additions & 42 deletions Tests/Runtime/SaveLoadManagerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,14 @@ public class SaveLoadTestUnityObject : ScriptableObject
public Vector3 pt;
public Quaternion rot;
}

[Serializable]
public class SaveLoadDictionaryTestObject
{
public Dictionary<string, int> dict = new Dictionary<string, int>();
public string name = "";
}

private static readonly string BaseDirectory = "GameData";
private static readonly string SaveDirectory = "SaveData";
private static readonly string TestEncryptionKey = "SaveLoadTestEncryptionKey";
Expand All @@ -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)
{
Expand All @@ -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)
{
Expand All @@ -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}";
Expand All @@ -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)
{
Expand All @@ -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<SaveLoadTestObject>(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)
{
Expand All @@ -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);
Expand All @@ -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)
{
Expand All @@ -203,7 +210,7 @@ public void LoadReturnsNullWhenFileDoesnotExist([Values] SerializationMethodType

var loadedObject = manager.Load<SaveLoadTestObject>(filename);
Assert.IsTrue(loadedObject == null);

Object.Destroy(manager);
}

Expand All @@ -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)
{
Expand All @@ -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);
Expand All @@ -264,16 +271,16 @@ public void CanCopyUnityObject([Values] SerializationMethodType method)
var loadedTestObj = ScriptableObject.CreateInstance<SaveLoadTestUnityObject>();

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)
{
Expand All @@ -284,7 +291,7 @@ public void CopyThrowsArgumentExceptionOnUnityObject([Values] SerializationMetho
{
manager.Copy(testObj);
});

Object.Destroy(testObj);
Object.Destroy(manager);
}
Expand All @@ -305,21 +312,21 @@ public void CanSaveAndLoadDictionary([Values(
{
dict = new Dictionary<string,int>
{
{"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<SaveLoadDictionaryTestObject>(filename);

Assert.IsTrue(loadedObject.name == testObject.name);
Assert.IsTrue(loadedObject.dict.Count == testObject.dict.Count);
Assert.IsTrue(loadedObject.dict.ContainsKey("one"));
Expand All @@ -329,9 +336,9 @@ public void CanSaveAndLoadDictionary([Values(

manager.DeleteSave(filename);
Assert.IsFalse(File.Exists(filepath));

Object.Destroy(manager);
}

}
}
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -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": {
Expand Down