Files
taptap2024_GJ_chidouren/Assets/Scripts/System/Account/Account.cs
2024-10-16 00:03:41 +08:00

243 lines
8.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using System.Collections.Generic;
using System.Game.Account;
// using com.taptap.tapsdk.bindings.csharp;
using FJson;
using Framework.Save;
using Framework.Utils;
using Framework.Utils.Extend;
using Framework.Utils.SingletonTemplate;
// using LeanCloud.Storage;
using ToffeeHttp.Runtime;
using ToffeeHttp.Runtime.Core;
using UnityEditor;
using UnityEngine;
public class Account : MgrBase<Account>
{
//单存档模式, 开启后只以本地存档作为唯一存档数据并只会建立一份存档如果为false这会根据不同账号创建对应账号的本地存档数据本地存放并根据账号自动切换。
//此选项不建议后期频繁改动
private const bool SAVE_SINGE_MODEL = true;
public AccountGameData AccountGameData;
public AccountSystemData AccountSystemData;
public string UserID
{
get
{
if (this.IsLogin)
return this.Token;
return this.LocalId;
}
}
public string LocalId
{
get
{
if (this.LocalUserID == null) LoadLocalUserID();
return this.LocalUserID;
}
}
private string SaveToken
{
get
{
#pragma warning disable CS0162
if (SAVE_SINGE_MODEL)
{
return this.LocalId;
}
else
{
return this.UserID;
}
#pragma warning restore CS0162
}
}
public string LocalUserID { get; private set; }
public int LoginChannel { get; private set; }
public bool IsLogin { get; private set; }
public string Token { get; private set; }
private const string LastTable = "Last";
private static string LastSaveToken(string table) => table + LastTable;
protected override void OnCreateMge()
{
SetLogout();
}
public void SetLogin(string token, int channel)
{
this.Token = token;
this.LoginChannel = channel;
this.IsLogin = true;
LoadLocation();
}
public void SetLogout()
{
this.Token = null;
this.LocalUserID = null;
this.LoginChannel = -1;
this.IsLogin = false;
// this.NetUser = null;
LoadLocation();
}
private void LoadLocalUserID()
{
if (PlayerPrefs.HasKey("LOCALUSERID"))
{
this.LocalUserID = PlayerPrefs.GetString("LOCALUSERID");
}
else
{
this.LocalUserID = Guid.NewGuid().ToString();
PlayerPrefs.SetString("LOCALUSERID", this.LocalUserID);
}
}
/// <summary>
/// 加载本地指定token的资源
/// </summary>
private void LoadLocation()
{
if (SaveManager.Instance.HasSave(SaveData.Game, this.SaveToken) == false)
{
if (SaveManager.Instance.HasSave(SaveData.Game, LastSaveToken(this.SaveToken)))
{
this.AccountGameData = SaveManager.Instance.Load<AccountGameData>(SaveData.Game, LastSaveToken(this.SaveToken));
}
}
else
{
try
{
this.AccountGameData = SaveManager.Instance.Load<AccountGameData>(SaveData.Game, this.SaveToken);
if (this.AccountGameData == null || this.AccountGameData.IsNull())
{
//如果主存档为空,尝试读取备用存档
this.AccountGameData = SaveManager.Instance.Load<AccountGameData>(SaveData.Game, LastSaveToken(this.SaveToken));
}
else
{
//缓存到备用存档中
SaveManager.Instance.Save(SaveData.Game , this.AccountGameData,LastSaveToken(this.SaveToken));
}
}
catch (Exception e)
{
Debug.LogError("主存档异常!激活备份存档 " + e);
//如果主存档为空,尝试读取备用存档
this.AccountGameData = SaveManager.Instance.Load<AccountGameData>(SaveData.Game, LastSaveToken(this.SaveToken));
}
}
if (this.AccountGameData == null)
{
this.AccountGameData = new AccountGameData();
SaveManager.Instance.Save(SaveData.Game , this.AccountGameData,LastSaveToken(this.SaveToken));
}
if (SaveManager.Instance.HasSave(SaveData.System, this.SaveToken) == false)
{
if (SaveManager.Instance.HasSave(SaveData.System, LastSaveToken(this.SaveToken)))
{
this.AccountSystemData = SaveManager.Instance.Load<AccountSystemData>(SaveData.System, LastSaveToken(this.SaveToken));
}
}
else
{
try
{
this.AccountSystemData = SaveManager.Instance.Load<AccountSystemData>(SaveData.System, this.SaveToken);
if (this.AccountSystemData == null || this.AccountSystemData.IsNull())
{
//如果主存档为空,尝试读取备用存档
this.AccountSystemData = SaveManager.Instance.Load<AccountSystemData>(SaveData.System, LastSaveToken(this.SaveToken));
}
else
{
//缓存到备用存档中
SaveManager.Instance.Save(SaveData.System , this.AccountSystemData,LastSaveToken(this.SaveToken));
}
}
catch (Exception e)
{
//如果主存档为空,尝试读取备用存档
this.AccountSystemData = SaveManager.Instance.Load<AccountSystemData>(SaveData.System, LastSaveToken(this.SaveToken));
}
}
if (this.AccountSystemData == null)
{
this.AccountSystemData = new AccountSystemData();
SaveManager.Instance.Save(SaveData.System , this.AccountSystemData,LastSaveToken(this.SaveToken));
}
this.AccountGameData.NullCheck();
this.AccountSystemData.NullCheck();
SaveManager.Instance.Save(SaveData.Game, this.AccountGameData, this.SaveToken);
SaveManager.Instance.Save(SaveData.System, this.AccountSystemData, this.SaveToken);
}
public void Save()
{
SaveManager.Instance.Save(SaveData.Game, this.AccountGameData, this.SaveToken);
SaveManager.Instance.Save(SaveData.System, this.AccountSystemData, this.SaveToken);
}
public void Save(SaveData saveData)
{
#if UNITY_EDITOR
Debug.Log("游戏存档更新: " + saveData);
#endif
switch (saveData)
{
case SaveData.Game:
SaveManager.Instance.Save(SaveData.Game, this.AccountGameData, this.SaveToken);
break;
case SaveData.System:
SaveManager.Instance.Save(SaveData.System, this.AccountSystemData, this.SaveToken);
break;
default:
break;
}
}
#if UNITY_EDITOR
[MenuItem("Tools/ClearData")]
public static void ClearData()
{
SaveManager.Instance.DeleteSave(SaveData.Game , Instance.SaveToken);
SaveManager.Instance.DeleteSave(SaveData.System, Instance.SaveToken);
Debug.Log("删除存档:" + SaveManager.Instance.BaseConfig.RootPath);
}
#endif
/// <summary>
/// 此处用于每次进入游戏后 将获取到的离线时长用于游戏内其他需要被显示时间影响的数据
/// </summary>
/// <param name="offlineTimeSpan"></param>
public void OfflineControl (TimeSpan offlineTimeSpan)
{
// Account.Instance.AccountGameData.OncePriceRaffleDuration
// = Account.Instance.AccountGameData.OncePriceRaffleDuration.Overly_Min (0 , -(float)offlineTimeSpan.TotalSeconds);
// Account.Instance.AccountGameData.OncePriceRaffleDurationTenText
// = Account.Instance.AccountGameData.OncePriceRaffleDurationTenText.Overly_Min (0 , -(float)offlineTimeSpan.TotalSeconds);
Account.Instance.Save(SaveData.Game);
}
}