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