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