| using System.Collections.Generic;  | 
| using UnityEngine.UI;  | 
| using System.Linq;  | 
| using LitJson;  | 
| using System;  | 
|   | 
|   | 
| public class DailySpecialsModel  : GameSystemManager<DailySpecialsModel>  | 
| {  | 
|     public uint PackBuyTime;    // 打包购买的时间戳,如果有该值,代表已经一次性打包购买了,可根据次时间戳算出当前是第几天  | 
|     public uint BuyStateToday;    // 今日礼包购买状态,按礼包索引二进制位计算代表是否已购买,仅非打包购买状态下有用  | 
|     public uint AwardState;    // 今日礼包领奖状态,按礼包索引二进制位计算代表是否已领取  | 
|     public int maxDay; //总共可以领取几天  | 
|     public int giftLvRestrict; //礼包等级限制  | 
|   | 
|     public Dictionary<int, List<List<int>>> giftInfoDict = new Dictionary<int, List<List<int>>>();  | 
|     public Dictionary<int, List<int>> ctgIdDict = new Dictionary<int, List<int>>();  | 
|     public List<int> packRechargeIdList = new List<int>();  | 
|     public List<List<Item>> itemAllList = new List<List<Item>>();  | 
|     Redpoint redpoint = new Redpoint(MainRedDot.DailySpecialsRedpoint);  | 
|     Dictionary<int, Redpoint> childRedpointDict = new Dictionary<int, Redpoint>();  | 
|     public event Action UpdateGiftStateEvent;  | 
|   | 
|     public override void Init()  | 
|     {  | 
|         DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnbeforePlayerDataInitialize;  | 
|         FuncOpen.Instance.OnFuncStateChangeEvent += OnFunctionStateChange;  | 
|         var tempDict = JsonMapper.ToObject(FuncConfigConfig.Get("DailyPackBuyGift").Numerical1);  | 
|         var keyList = tempDict.Keys.ToList();  | 
|         for (int i = 0; i < keyList.Count; i++)  | 
|         {  | 
|             List<List<int>> giftInfoList = new List<List<int>>();  | 
|             for (int j = 0; j < tempDict[i].Count; j++)  | 
|             {  | 
|                 List<int> giftInfo = JsonMapper.ToObject<List<int>>(tempDict[keyList[i]][j].ToJson());  | 
|                 giftInfoList.Add(giftInfo);  | 
|             }  | 
|             giftInfoDict.Add(int.Parse(keyList[i]), giftInfoList);  | 
|         }  | 
|   | 
|         tempDict = JsonMapper.ToObject(FuncConfigConfig.Get("DailyPackBuyGift").Numerical2);  | 
|         keyList = tempDict.Keys.ToList();  | 
|         for (int i = 0; i < keyList.Count; i++)  | 
|         {  | 
|             ctgIdDict[int.Parse(keyList[i])] = JsonMapper.ToObject<List<int>>(tempDict[keyList[i]].ToJson());  | 
|         }  | 
|   | 
|         packRechargeIdList = JsonMapper.ToObject<List<int>>(FuncConfigConfig.Get("DailyPackBuyGift").Numerical3);  | 
|         maxDay = int.Parse(FuncConfigConfig.Get("DailyPackBuyGift").Numerical4);  | 
|   | 
|         List<int> giftInfokeyList = giftInfoDict.Keys.ToList();  | 
|         for (int i = 0; i < giftInfoDict.Count; i++)  | 
|         {  | 
|             List<Item> itemList = new List<Item>();  | 
|             for (int j = 0; j < giftInfoDict[giftInfokeyList[i]].Count; j++)  | 
|             {  | 
|                 Item item = new Item(giftInfoDict[giftInfokeyList[i]][j][0], giftInfoDict[giftInfokeyList[i]][j][1]);  | 
|                 itemList.Add(item);  | 
|             }  | 
|             itemAllList.Add(itemList);  | 
|         }  | 
|         List<int> keyList2 = giftInfoDict.Keys.ToList();  | 
|         for (int i = 0; i < giftInfoDict.Count; i++)  | 
|         {  | 
|             childRedpointDict[keyList2[i]] = new Redpoint(MainRedDot.DailySpecialsRedpoint, MainRedDot.DailySpecialsRedpoint * 100 + i);  | 
|         }  | 
|   | 
|     }  | 
|   | 
|     public override void Release()  | 
|     {  | 
|         DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= OnbeforePlayerDataInitialize;  | 
|         FuncOpen.Instance.OnFuncStateChangeEvent -= OnFunctionStateChange;  | 
|     }  | 
|   | 
|     public void OnbeforePlayerDataInitialize()  | 
|     {  | 
|         PackBuyTime = 0;  | 
|         BuyStateToday = 0;  | 
|         AwardState = 0;  | 
|     }  | 
|   | 
|   | 
|     private void OnFunctionStateChange(int id)  | 
|     {  | 
|         if (id == 222)  | 
|         {  | 
|             UpdateRedpoint();  | 
|         }  | 
|     }  | 
|   | 
|   | 
|     public void UpdateGiftState(HAA03_tagMCDailyPackBuyGiftInfo vNetData)  | 
|     {  | 
|         this.PackBuyTime = vNetData.PackBuyTime;  | 
|         this.BuyStateToday = vNetData.BuyStateToday;  | 
|         this.AwardState = vNetData.AwardState;  | 
|         UpdateGiftStateEvent?.Invoke();  | 
|         UpdateRedpoint();  | 
|   | 
|     }  | 
|   | 
|     // 在功能开启的时候判断是否每日特惠开启, 触发UpdateRedpoint  | 
|   | 
|     //每日特惠  | 
|     //1. 功能是否开启  | 
|     //2. 免费是否已领取  | 
|     //3. 购买后是否可领取  | 
|     void UpdateRedpoint()  | 
|     {  | 
|         redpoint.state = RedPointState.None;  | 
|         if (!FuncOpen.Instance.IsFuncOpen(222))  | 
|             return;  | 
|   | 
|         List<int> keyList = childRedpointDict.Keys.ToList();  | 
|   | 
|         for (int i = 0; i < childRedpointDict.Count; i++)  | 
|         {  | 
|             childRedpointDict[keyList[i]].state = RedPointState.None;  | 
|             if (GetGiftState(i) == 2)  | 
|             {  | 
|                 childRedpointDict[keyList[i]].state = RedPointState.Simple;  | 
|             }  | 
|         }  | 
|     }  | 
|   | 
|     //获得按钮状态  | 
|     //0 未购买 1 已购买 2 可领取 3 已领取  | 
|     public int GetGiftState(int index)  | 
|     {  | 
|         if (index == 0)  | 
|         {  | 
|             return IsHavePack(index) ? 3 : 2;  | 
|         }  | 
|         else  | 
|         {  | 
|             if (IsBuyAllPack())  | 
|             {  | 
|                 return IsHavePack(index) ? 3 : 2;  | 
|             }  | 
|             else  | 
|             {  | 
|                 if (IsBuyPack(index))  | 
|                 {  | 
|                     return IsHavePack(index) ? 3 : 2;  | 
|                 }  | 
|                 else  | 
|                 {  | 
|                     return 0;  | 
|                 }  | 
|             }  | 
|         }  | 
|     }  | 
|   | 
|     //是否购买总包  | 
|     public bool IsBuyAllPack()  | 
|     {  | 
|   | 
|         if (PackBuyTime == 0)  | 
|         {  | 
|             return false;  | 
|         }  | 
|         else  | 
|         {  | 
|             return (TimeUtility.ServerNow - TimeUtility.GetTime(PackBuyTime)).Days < maxDay;  | 
|         }  | 
|     }  | 
|   | 
|     //是否购买分包  | 
|     public bool IsBuyPack(int index)  | 
|     {  | 
|         return ((int)Math.Pow(2, index) & BuyStateToday) != 0;  | 
|     }  | 
|   | 
|     //分包是否已领取  | 
|     public bool IsHavePack(int index)  | 
|     {  | 
|         return ((int)Math.Pow(2, index) & AwardState) != 0;  | 
|     }  | 
|   | 
| }  | 
|   |