74 lines
1.9 KiB
C#
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
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
}
|
||
|
|
}
|