using cfg.ActorCfg; using cfg.ChargeCfg; using Framework; using Gameplay; using Gameplay.Net; using NLDPB; using PhxhSDK; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using static Gameplay.CommonUtils; public class MonthlyPassManager : Singlenton,IInitable { class MonthlyPassService { public bool IsPassUnlock { get; private set; } public int RemainingDays { get; private set; } public bool TodayHasClaimed { get; private set; } public MonthlyPassService() { IsPassUnlock = false; RemainingDays = 0; TodayHasClaimed = false; } /// /// 数据同步 /// public void Refresh() { //TODO //IsPassUnlock = Actor.Instance.Logic.GetCount((uint)LogicID.MonthlyPassUnlock) > 0; //RemainingDays = (int)Actor.Instance.Logic.GetCount(); //TodayHasClaimed= } } private MonthlyPassService PassService; private DataMonthlyPass CurrentPass = null; public void Init() { 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); PassService = new MonthlyPassService(); DebugUtil.Log("MonthlyPass status: " + PassService.RemainingDays + " days left, today has claimed: " + PassService.TodayHasClaimed); EventManager.Instance.Register(EventManager.EventName.MonthlyPassBuySuccess, PassService.Refresh); EventManager.Instance.Register(EventManager.EventName.MonthlyPassGetReward, PassService.Refresh); } /// /// 根据服务器信息更新当月月卡内容 /// /// 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(EventManager.EventName.MonthlyPassBuySuccess, PassService.Refresh); EventManager.Instance.Unregister(EventManager.EventName.MonthlyPassGetReward, PassService.Refresh); } /// /// 可领取状态 /// /// public bool TodayCanClaim() { return !PassService.TodayHasClaimed && PassService.IsPassUnlock && PassService.RemainingDays > 0; } #region 交互 /// /// 购买月卡请求 /// public void Purchase() { if(PassService.IsPassUnlock) { DebugUtil.Log("MonthlyPassManager Purchase Error: Pass is already unlocked"); return; } var currencyData = TableManager.Instance.Tables.CurrencyShopCfg.DataMap; if (CurrentPass == null) { DebugUtil.LogError("MonthlyPassManager Purchase Error: CurrentPass is null"); return; } var currencyID = CurrentPass.PassProductID; if (!currencyData.TryGetValue(currencyID, out var dataCurrencyShopCfg)) { DebugUtil.LogError("CurrencyShopCfg 没有 {0} 配置的内购商品", currencyID); return; } OnPurchase(dataCurrencyShopCfg); } /// /// 领取月卡奖励服务器请求 /// public void Claim() { if (TodayCanClaim()) { NetHelper.MonthlyPassGetReward(); } else { DebugUtil.Log("Cannot claim today"); //CommonUtils.ShowMessageTips } } #endregion #region 界面 /// /// 获取当前月卡图片路径 /// /// public string GetPassPicPath() { var defaultPath = "";//TODO:后续补充默认图片路径 if (CurrentPass != null) { return CurrentPass.ProductPath; } else { DebugUtil.LogError("MonthlyPassManager GetPassPicPath Error: CurrentPass is null"); } return defaultPath; } /// /// 获取月卡描述 /// /// public string GetPassDesc() { var defaultDesc = "";//TODO:后续补充默认描述 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) { 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.IAPBuyGoods(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:后续补充本地化 } } }