using System; using System.Collections.Generic; using System.Linq; using System.Text; using UnityEngine; namespace vnxbqy.UI { public class FBHelpPointExchageModel : Model,IBeforePlayerDataInitialize,IPlayerLoginOk { public List todayShoplist { get; private set; } public List lifeShoplist { get; private set; } public List helpPointShoplist = new List(); public string shopDayLocalSave { get; private set;} public string shopLifeLocalSave { get; private set;} public string curDayLocalSave { get; private set; } public int currentShopId { get; private set; } public event Action UpdateHelpPointShopEvent; StoreModel storeModel { get { return ModelCenter.Instance.GetModel(); } } public override void Init() { } public void OnBeforePlayerDataInitialize() { currentShopId = 0; helpPointShoplist.Clear(); PlayerDatas.Instance.playerDataRefreshEvent -= UpdateFBHelpPoint; storeModel.RefreshBuyShopLimitEvent -= UpdateBuyShop; TimeMgr.Instance.OnDayEvent -= UpdateDay; } public void OnPlayerLoginOk() { int playerId = (int)PlayerDatas.Instance.baseData.PlayerID; shopDayLocalSave = StringUtility.Contact("ShopDayLocalSave",playerId); shopLifeLocalSave = StringUtility.Contact("ShopLifeLocalSave",playerId); curDayLocalSave = StringUtility.Contact("CurDayLocalSave",playerId); PlayerDatas.Instance.playerDataRefreshEvent += UpdateFBHelpPoint; storeModel.RefreshBuyShopLimitEvent += UpdateBuyShop; TimeMgr.Instance.OnDayEvent += UpdateDay; GetLocalSaveData(); } public override void UnInit() { } #region 本地记录数据的存储 private bool IsNewDay() { if(!PlayerPrefs.HasKey(curDayLocalSave)) { return true; } int saveDay = LocalSave.GetInt(curDayLocalSave); int serverDay = TimeUtility.ServerNow.Day; return serverDay != saveDay ? true : false; } private void SetCurDayLocalSave() { LocalSave.SetInt(curDayLocalSave,TimeUtility.ServerNow.Day); } /// /// 获取本地记录数据 /// private void GetLocalSaveData() { int[] dayShops = LocalSave.GetIntArray(shopDayLocalSave); todayShoplist = dayShops == null ? null : dayShops.ToList(); int[] lifeShops = LocalSave.GetIntArray(shopLifeLocalSave); lifeShoplist = lifeShops == null ? null : lifeShops.ToList(); if(IsNewDay()) { ClearShopDayLocalSave(); SetCurDayLocalSave(); } } public void SetLocalSaveData(int type,int shopId) { switch(type) { case 1: todayShoplist = todayShoplist == null ? new List() : todayShoplist; if(!todayShoplist.Contains(shopId)) { todayShoplist.Add(shopId); LocalSave.SetIntArray(shopDayLocalSave,todayShoplist.ToArray()); } break; case 2: lifeShoplist = lifeShoplist == null ? new List() : lifeShoplist; if (!lifeShoplist.Contains(shopId)) { lifeShoplist.Add(shopId); LocalSave.SetIntArray(shopLifeLocalSave, lifeShoplist.ToArray()); } break; } } public void ClearShopDayLocalSave() { PlayerPrefs.DeleteKey(shopDayLocalSave); if(todayShoplist != null) { todayShoplist.Clear(); } } #endregion private void UpdateDay() { ClearShopDayLocalSave(); } private void UpdateBuyShop() { UpdateFBHelpPoint(PlayerDataType.FBHelpPoint); } private void UpdateFBHelpPoint(PlayerDataType type) { if (type != PlayerDataType.FBHelpPoint || !FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Store)) return; var storeDatas = storeModel.TryGetStoreDatas(StoreFunc.IntegralStore); if(storeDatas != null) { for(int i = 0; i < storeDatas.Count; i++) { var storeData = storeDatas[i]; int pushType = 0; storeModel.TryGetPushTypeByShopId(storeData.shopId,out pushType); if(pushType != 0) { int remainNum = 0; bool isSellOut = storeModel.TryGetIsSellOut(storeData.storeConfig,out remainNum); ulong haveMoney = UIHelper.GetMoneyCnt(storeData.storeConfig.MoneyType); bool isEnoughMoney = haveMoney >= (ulong)storeData.storeConfig.MoneyNumber ? true : false; if(!isSellOut && isEnoughMoney) { UpdateHelpPointShop(storeData.shopId); } } } } for(int i = 0; i < helpPointShoplist.Count; i++) { var shopId = helpPointShoplist[i]; StoreConfig storeConfig = StoreConfig.Get(shopId); int remainNum = 0; ulong haveMoney = UIHelper.GetMoneyCnt(storeConfig.MoneyType); bool isEnoughMoney = haveMoney >= (ulong)storeConfig.MoneyNumber ? true : false; if (storeModel.TryGetIsSellOut(storeConfig,out remainNum) || !isEnoughMoney) { GetNextHelpPointShop(shopId); } } } public void AddHelpPointShop(int shopId) { if(!helpPointShoplist.Contains(shopId)) { helpPointShoplist.Add(shopId); } } public void RemoveHelpPointShop(int shopId) { if (helpPointShoplist.Contains(shopId)) { helpPointShoplist.Remove(shopId); } int type = 0; bool isPush = storeModel.TryGetPushTypeByShopId(shopId, out type); if(isPush) { SetLocalSaveData(type, shopId); } } private void UpdateHelpPointShop(int shopId) { StoreConfig storeConfig = StoreConfig.Get(shopId); if (storeConfig == null) return; if(!IsAlreadPush(shopId)) { currentShopId = shopId; AddHelpPointShop(shopId); if (UpdateHelpPointShopEvent != null) { UpdateHelpPointShopEvent(); } } } public void GetNextHelpPointShop(int shopId) { RemoveHelpPointShop(shopId); int length = helpPointShoplist.Count; currentShopId = length == 0 ? 0 : helpPointShoplist[length - 1]; if (UpdateHelpPointShopEvent != null) { UpdateHelpPointShopEvent(); } } public bool IsAlreadPush(int shopId) { int type = 0; storeModel.TryGetPushTypeByShopId(shopId, out type); switch (type) { case 1: if(todayShoplist != null && todayShoplist.Contains(shopId)) { return true; } break; case 2: if (lifeShoplist != null && lifeShoplist.Contains(shopId)) { return true; } break; } return false; } } }