Degulleo3D/Assets/StoreAssets/QuickSave/QuickSaveReader.cs
2025-04-16 12:18:34 +09:00

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);
}
}
}