using System.Collections; using System.Collections.Generic; using UnityEngine; using LitJson; using System; using vnxbqy.UI; public class ILDayOnlineModel : ILModel { float recvTime; // 接收时的时间 用于计算时间差 int seconds; //接收时的在线秒 public event Action OnGetGiftUpdateEvent; int DayOnlineAwardState; //每日在线奖励 public int[] timeArr; //原时间列表 public List indexSort; //排序后的时间列表 //索引从1开始 public Dictionary>> awards = new Dictionary>>(); protected override void Init() { TimeMgr.Instance.OnMinuteEvent += UpdateRedpoint; } public struct awardItem { public int itemID; public int itemCount; } protected override void UnInit() { TimeMgr.Instance.OnMinuteEvent -= UpdateRedpoint; } public void UpdateGetGift(IL_HB113_tagMCOnlinePrizeNew _package) { awards.Clear(); int day = TimeUtility.CreateDays; if (!OnlineAwardConfig.Has(day)) return; var awardJson = JsonMapper.ToObject(OnlineAwardConfig.Get(day).Reward); foreach (var _key in awardJson.Keys) { List> info = new List>(); var index = int.Parse(_key); awards.Add(index, info); for (int i = 0; i < awardJson[_key].Count; i++) { List info2 = new List(); info.Add(info2); for (int j = 0; j < awardJson[_key][i].Count; j++) { info2.Add(int.Parse(awardJson[_key][i][j].ToString())); } } } timeArr = JsonMapper.ToObject(OnlineAwardConfig.Get(day).Time); recvTime = Time.realtimeSinceStartup; seconds = (int)_package.OnlineTime / 1000; if (_package.PrizeInfo.Length != 0) DayOnlineAwardState = (int)_package.PrizeInfo[0]; SortIndexs(); UpdateRedpoint(); if (OnGetGiftUpdateEvent != null) { OnGetGiftUpdateEvent(); } } //计时 public string GetTimeStr() { return TimeUtility.SecondsToHMS(seconds + (int)(Time.realtimeSinceStartup - recvTime)); } public int GetOnlineMinute() { return (seconds + (int)(Time.realtimeSinceStartup - recvTime)) / 60; } //0 可领取 1不可领取 2已领取 public int GetAwardState(int index) { if ((DayOnlineAwardState & (1 << index)) != 0) { return 2; } if (GetOnlineMinute() < timeArr[index]) { return 1; } return 0; } public void SortIndexs() { indexSort = new List(timeArr); indexSort.Sort(compareEx); } //根据领奖情况排序 private int compareEx(int x, int y) { int xindex = Array.IndexOf(timeArr, x); int yindex = Array.IndexOf(timeArr, y); int xresult = GetAwardState(xindex); int yresult = GetAwardState(yindex); if (xresult != yresult) return xresult.CompareTo(yresult); return xindex.CompareTo(yindex); } public Redpoint redpoint = new Redpoint(201, 201121); public void UpdateRedpoint() { if (timeArr == null) return; redpoint.state = RedPointState.None; for (int i = 0; i < timeArr.Length; i++) { if (GetAwardState(i) == 0) { redpoint.state = RedPointState.GetReward; break; } } } //未开启且 非指定天内 则关闭 public bool IsOpen() { if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.DayOnline)) return false; if (!OnlineAwardConfig.Has(TimeUtility.CreateDays)) return false; return true; } public bool HasAwardGet() { return redpoint.state == RedPointState.GetReward; } }