NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/BattlePass/MonthlyPassManager.cs

306 lines
9.3 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using cfg.ChargeCfg;
using Framework;
using Gameplay;
using Gameplay.Net;
using NLDPB;
using PhxhSDK;
using System;
using static Gameplay.CommonUtils;
public class MonthlyPassManager : Singlenton<MonthlyPassManager>,IInitable
{
public class MonthlyPassService
{
public bool IsPassUnlock { get; private set; }
public DateTime Endtime { get; private set; }
public bool TodayHasClaimed { get; private set; }
public delegate void RefreshDelegate();
public event RefreshDelegate OnRefresh;
public MonthlyPassService()
{
IsPassUnlock = false;
Endtime = DateTime.MinValue;
TodayHasClaimed = false;
}
/// <summary>
/// 数据同步
/// </summary>
public void Refresh()
{
IsPassUnlock = Actor.Instance.Logic.GetCount((uint)LogicID.MonthlyPassId) > 0;
//if (IsPassUnlock)
//{
// Instance.UpdatePassService((int)Actor.Instance.Logic.GetCount((uint)LogicID.MonthlyPassId));
//}
var EndTime = Actor.Instance.Logic.GetCount((uint)LogicID.MonthlyPassValidity);
if (EndTime > 0)
{
Endtime = CommonUtils.GetTimeByTimestamp(EndTime);
}
else
{
Endtime = DateTime.MinValue;
}
TodayHasClaimed = Actor.Instance.Logic.GetCount((uint)LogicID.MonthlyPassRewardStatus) == 1;
var RemainingDays = Endtime - CommonUtils.GetCurTime(E_TimeType.Server);
DebugUtil.Log("当前月卡状态: IsPassUnlock = " + IsPassUnlock + "\n RemainingDays = " + RemainingDays.TotalDays + "\n TodayHasClaimed = " + TodayHasClaimed);
OnRefresh?.Invoke();
}
}
private MonthlyPassService PassService;
public bool needPrompt { get; private set;}
public void AddMonthlyPassRefreshListener(MonthlyPassService.RefreshDelegate listener)
{
PassService.OnRefresh += listener;
}
public void RemoveMonthlyPassRefreshListener(MonthlyPassService.RefreshDelegate listener)
{
PassService.OnRefresh -= listener;
}
//private DataMonthlyPass CurrentPass = null;
public void Init()
{
PassService = new MonthlyPassService();
needPrompt = false;
EventManager.Instance.Register<uint>(EventManager.EventName.PartLogicUpdate, LogicListener);
EventManager.Instance.Register(EventManager.EventName.MonthlyPassBuySuccess, PassService.Refresh);
EventManager.Instance.Register(EventManager.EventName.MonthlyPassGetReward, PassService.Refresh);
}
///// <summary>
///// 根据服务器信息更新当月月卡内容
///// </summary>
///// <param name="PassID"></param>
//public void UpdatePassService(int PassID)
//{
// //var table = TableManager.Instance.Tables.MonthlyPass;
// //if (table.DataMap.TryGetValue(PassID, out DataMonthlyPass data))
// //{
// // CurrentPass = data;
// //}
// //else
// //{
// // CurrentPass = null;
// // DebugUtil.LogError("MonthlyPassManager UpdatePassService Error: {0} not found", PassID);
// //}
//}
public void Release()
{
EventManager.Instance.Unregister<uint>(EventManager.EventName.PartLogicUpdate, LogicListener);
EventManager.Instance.Unregister(EventManager.EventName.MonthlyPassBuySuccess, PassService.Refresh);
EventManager.Instance.Unregister(EventManager.EventName.MonthlyPassGetReward, PassService.Refresh);
}
void LogicListener(uint Logic)
{
if (Logic == (uint)LogicID.MonthlyPassId || Logic == (uint)LogicID.MonthlyPassRewardStatus || Logic == (uint)LogicID.MonthlyPassValidity)
{
PassService.Refresh();
if (Logic == (uint)LogicID.MonthlyPassId)
{
var tag = StorageMgr.Instance.GetStorage<MonthlyPassSaveData>("MonthlyPassUnlock");
if (PassService.IsPassUnlock)
{
if (!tag.IsPassUnlock)
{
tag.IsPassUnlock = true;
StorageMgr.Instance.SyncForce = true;
}
}
else
{
if(tag.IsPassUnlock)
{
tag.IsPassUnlock = false;
StorageMgr.Instance.SyncForce = true;
needPrompt = true;
//DebugUtil.Log("MonthlyPass is over");
}
}
}
}
}
class MonthlyPassSaveData
{
public bool IsPassUnlock;
}
//DataMonthlyPass GetCurPass()
//{
// if (CurrentPass != null)
// return CurrentPass;
//
// var time = CommonUtils.GetCurTime(E_TimeType.Server);
// var year = time.Year;
// var month = time.Month;
// string date = year + "-" + month;
// Debug.Log("MonthlyPass init, Today: " + date);
//
// var table = TableManager.Instance.Tables.MonthlyPass;
// foreach (var data in table.DataList)
// {
// var startTime = CommonUtils.GetTimeByTimestamp((uint)data.StarTime);
// var endTime = CommonUtils.GetTimeByTimestamp((uint)data.EndTime);
// DebugUtil.Log("MonthlyPass init, startTime: " + startTime + " start stamp: " + data.StarTime + " endTime: " + endTime + " time: " + time);
// if (startTime <= time && endTime >= time)
// {
// CurrentPass = data;
// break;
// }
// }
// return CurrentPass;
//}
/// <summary>
/// 可领取状态
/// </summary>
/// <returns></returns>
public bool TodayCanClaim()
{
var remains = GetRemainsTime();
return !PassService.TodayHasClaimed && PassService.IsPassUnlock && remains.TotalSeconds > 0;
}
#region 交互
public bool IsPassUnlock()
{
return PassService.IsPassUnlock;
}
/// <summary>
/// 购买月卡请求
/// </summary>
public void Purchase()
{
if (PassService.IsPassUnlock)
{
DebugUtil.Log("MonthlyPassManager Purchase Error: Pass is already unlocked");
return;
}
var currencyData = TableManager.Instance.Tables.CurrencyShopCfg.DataMap;
var currencyID = 10;
//GetCurPass();
//if (CurrentPass == null)
//{
// DebugUtil.LogError("月卡购买错误无法获取当期月卡使用默认内购ID");
//}
//else
// currencyID = CurrentPass.PassProductID;
if (!currencyData.TryGetValue(currencyID, out var dataCurrencyShopCfg))
{
DebugUtil.LogError("CurrencyShopCfg 没有 {0} 配置的内购商品", currencyID);
return;
}
OnPurchase(dataCurrencyShopCfg);
}
/// <summary>
/// 领取月卡奖励服务器请求
/// </summary>
public void Claim()
{
if (TodayCanClaim())
{
var id = Actor.Instance.Logic.GetCount((uint)LogicID.MonthlyPassId);
NetHelper.MonthlyPassGetReward(id);
}
else
{
DebugUtil.Log("Cannot claim today");
}
}
#endregion
#region 界面
public TimeSpan GetRemainsTime()
{
return PassService.Endtime - CommonUtils.GetCurTime(E_TimeType.Server);
}
/// <summary>
/// 获取当前月卡图片路径
/// </summary>
/// <returns></returns>
public string GetPassPicPath()
{
var defaultPath = "";//TODO:后续补充默认图片路径
//GetCurPass();
//if (CurrentPass != null)
//{
// return CurrentPass.ProductPath;
//}
//else
//{
// DebugUtil.LogError("MonthlyPassManager GetPassPicPath Error: CurrentPass is null");
//}
return defaultPath;
}
/// <summary>
/// 获取月卡描述
/// </summary>
/// <returns></returns>
public string GetPassDesc()
{
var defaultDesc = "";//TODO:后续补充默认描述
//GetCurPass();
//if (CurrentPass != null)
//{
// var key = CurrentPass.ProductDescription;
// return CommonUtils.GetLocalizeText(key);
//}
//else
//{
// DebugUtil.LogError("MonthlyPassManager GetPassDesc Error: CurrentPass is null");
//}
return GetLocalizeText(defaultDesc);
}
#endregion
private async void OnPurchase(DataCurrencyShopCfg cfg)
{
#if UNITY_EDITOR
NetHelper.InAppPurchaseTest((uint)cfg.Id);
return;
#endif
try
{
#if UNITY_IOS
// ios 只走苹果内购
IAPManager.Instance.SetCurrentPayChannel(IAPManager.PayChannel.Apple);
IAPManager.Instance.CheckAndBuyGoods(cfg.Id);
#elif SDK_BILIBILI
IAPManager.Instance.SetCurrentPayChannel(IAPManager.PayChannel.Bilibili);
IAPManager.Instance.CheckAndBuyGoods(cfg.Id);
#else
await UI_PayWindowController.Open(cfg);
#endif
}
catch (Exception e)
{
DebugUtil.LogError("MonthlyPass OnPurchase Error: {0}", e);
CommonUtils.ShowMessageTips("Purchase failed, please try again later.");//TODO:后续补充本地化
}
}
}