using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using LitJson;
|
using System;
|
using vnxbqy.UI;
|
|
public class ILDayOnlineModel : ILModel<ILDayOnlineModel>
|
{
|
|
float recvTime; // 接收时的时间 用于计算时间差
|
int seconds; //接收时的在线秒
|
|
public event Action OnGetGiftUpdateEvent;
|
int DayOnlineAwardState; //每日在线奖励
|
|
public int[] timeArr; //原时间列表
|
public List<int> indexSort; //排序后的时间列表
|
//索引从1开始
|
public Dictionary<int, List<List<int>>> awards = new Dictionary<int, List<List<int>>>();
|
|
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 (OnlineAwardNewConfig.Has(0))
|
{
|
day = 0;
|
}
|
if (!OnlineAwardNewConfig.Has(day))
|
return;
|
|
var awardJson = JsonMapper.ToObject(OnlineAwardNewConfig.Get(day).Reward);
|
foreach (var _key in awardJson.Keys)
|
{
|
List<List<int>> info = new List<List<int>>();
|
var index = int.Parse(_key);
|
awards.Add(index, info);
|
for (int i = 0; i < awardJson[_key].Count; i++)
|
{
|
List<int> info2 = new List<int>();
|
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<int[]>(OnlineAwardNewConfig.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<int>(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 (OnlineAwardNewConfig.Has(0))
|
return true;
|
|
if (!OnlineAwardNewConfig.Has(TimeUtility.CreateDays))
|
return false;
|
|
return true;
|
}
|
|
public bool HasAwardGet()
|
{
|
return redpoint.state == RedPointState.GetReward;
|
}
|
}
|