com.guru.unity.sdk/Runtime/Code/Model/GuruModelBase.cs

74 lines
1.9 KiB
C#

namespace Guru
{
using UnityEngine;
public abstract class GuruModelBase
{
#region DataIO
private double _lastSavedTime = 0;
protected double _saveInterval = 3;
protected string DefaultSaveKey => GetType().Name;
/// <summary>
/// 加载数据 IO 接口
/// </summary>
/// <param name="saveKey"></param>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
internal static T LoadIO<T>(string saveKey = "") where T : GuruModelBase, new()
{
if (string.IsNullOrEmpty(saveKey)) saveKey = typeof(T).Name;
if (PlayerPrefs.HasKey(saveKey))
{
var json = PlayerPrefs.GetString(saveKey, "");
if (!string.IsNullOrEmpty(json))
{
// return JsonUtility.FromJson<T>(json);
return JsonParser.ToObject<T>(json);
}
}
return new T();
}
/// <summary>
/// 保存数据 IO 接口
/// </summary>
/// <param name="saveKey"></param>
protected void SaveIO(string saveKey = "")
{
if (string.IsNullOrEmpty(saveKey)) saveKey = DefaultSaveKey;
var json = JsonParser.ToJson(this);
PlayerPrefs.SetString(saveKey, json);
PlayerPrefs.Save();
}
/// <summary>
/// 保存数据
/// </summary>
/// <param name="force"></param>
public virtual void Save(bool force = false)
{
bool save = force || (Time.realtimeSinceStartup - _lastSavedTime>= _saveInterval);
if (save)
{
_lastSavedTime = Time.realtimeSinceStartup;
SaveIO();
}
}
#endregion
}
}