using System.Collections; using System.Collections.Generic; using UnityEngine; using LitJson; using System; namespace Snxxz.UI { public class DayOnlineModel : Model { float recvTime; // 接收时的时间 用于计算时间差 int seconds; //接收时的在线秒 public event Action OnGetGiftUpdateEvent; int DayOnlineAwardState; //每日在线奖励 public int[] timeArr; //原时间列表 public List indexSort; //排序后的时间列表 //索引从1开始 public Dictionary>> awards = new Dictionary>>(); public override void Init() { TimeMgr.Instance.OnMinuteEvent += UpdateRedpoint; awards.Clear(); var awardJson = JsonMapper.ToObject(OnlineAwardConfig.Get(0).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(0).Time); } public struct awardItem { public int itemID; public int itemCount; } public override void UnInit() { TimeMgr.Instance.OnMinuteEvent -= UpdateRedpoint; } public void UpdateGetGift(HA308_tagMCOnlinePrize _package) { //awards.Clear(); //int day = 0; //if (OnlineAwardConfig.Has(0)) // day = 0; //else // 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, 20112); public void UpdateRedpoint() { redpoint.state = RedPointState.None; for (int i = 0; i < timeArr.Length; i++) { if (GetAwardState(i) == 0) { redpoint.state = RedPointState.GetReward; break; } } } } }