130 lines
3.9 KiB
C#
130 lines
3.9 KiB
C#
////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// @module Quick Save for Unity3D
|
|
// @author Michael Clayton
|
|
// @support clayton.inds+support@gmail.com
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
using System;
|
|
using CI.QuickSave.Core.Serialisers;
|
|
|
|
namespace CI.QuickSave
|
|
{
|
|
public class QuickSaveReader : QuickSaveBase
|
|
{
|
|
private QuickSaveReader(string root, QuickSaveSettings settings)
|
|
{
|
|
_root = root;
|
|
_settings = settings;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Creates a QuickSaveReader on the specified root
|
|
/// </summary>
|
|
/// <param name="root">The root to read from</param>
|
|
/// <returns>A QuickSaveReader instance</returns>
|
|
public static QuickSaveReader Create(string root)
|
|
{
|
|
return Create(root, new QuickSaveSettings());
|
|
}
|
|
|
|
/// <summary>
|
|
/// Creates a QuickSaveReader on the specified root using the specified settings
|
|
/// </summary>
|
|
/// <param name="root">The root to read from</param>
|
|
/// <param name="settings">Settings</param>
|
|
/// <returns>A QuickSaveReader instance</returns>
|
|
public static QuickSaveReader Create(string root, QuickSaveSettings settings)
|
|
{
|
|
QuickSaveReader quickSaveReader = new QuickSaveReader(root, settings);
|
|
quickSaveReader.Load(false);
|
|
return quickSaveReader;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Reads an object under the specified key
|
|
/// </summary>
|
|
/// <typeparam name="T">The type of object to read</typeparam>
|
|
/// <param name="key">The key this object was saved under</param>
|
|
/// <returns>The object that was loaded</returns>
|
|
public T Read<T>(string key)
|
|
{
|
|
if (!Exists(key))
|
|
{
|
|
throw new QuickSaveException("Key does not exists");
|
|
}
|
|
|
|
try
|
|
{
|
|
return JsonSerialiser.DeserialiseKey<T>(key, _items);
|
|
}
|
|
catch
|
|
{
|
|
throw new QuickSaveException("Deserialisation failed");
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Reads an object under the specified key
|
|
/// </summary>
|
|
/// <typeparam name="T">The type of object to read</typeparam>
|
|
/// <param name="key">The key this object was saved under</param>
|
|
/// <param name="result">An action to be called when the read completes</param>
|
|
/// <returns>The QuickSaveReader</returns>
|
|
public QuickSaveReader Read<T>(string key, Action<T> result)
|
|
{
|
|
if (!Exists(key))
|
|
{
|
|
throw new QuickSaveException("Key does not exists");
|
|
}
|
|
|
|
try
|
|
{
|
|
result(JsonSerialiser.DeserialiseKey<T>(key, _items));
|
|
}
|
|
catch
|
|
{
|
|
throw new QuickSaveException("Deserialisation failed");
|
|
}
|
|
|
|
return this;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Attempts to read an object under the specified key
|
|
/// </summary>
|
|
/// <typeparam name="T">The type of object to read</typeparam>
|
|
/// <param name="key">The key this object was saved under</param>
|
|
/// <param name="result">The object that was loaded</param>
|
|
/// <returns>Was the read successful</returns>
|
|
public bool TryRead<T>(string key, out T result)
|
|
{
|
|
result = default(T);
|
|
|
|
if (!Exists(key))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
try
|
|
{
|
|
result = JsonSerialiser.DeserialiseKey<T>(key, _items);
|
|
|
|
return true;
|
|
}
|
|
catch
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Reloads data from the root
|
|
/// </summary>
|
|
public void Reload()
|
|
{
|
|
Load(false);
|
|
}
|
|
}
|
|
} |