using System; using System.Collections; using System.Collections.Generic; using TableConfig; using UnityEngine; namespace Snxxz.UI { public class OSGiftModel : Model, IPlayerLoginOk, IBeforePlayerDataInitialize, IOpenServerActivity { public override void Init() { ParseConfig(); storeModel.RefreshBuyShopLimitEvent += RefreshBuyShopLimitEvent; OpenServerActivityCenter.Instance.Register(6, this); } public override void UnInit() { } public void OnBeforePlayerDataInitialize() { startSeconds = 0; } public void OnPlayerLoginOk() { if (onStateUpate != null) { onStateUpate(6); } UpdateRedpoint(); } public event Action onStateUpate; public event Action onSelectUpdate; StoreModel storeModel { get { return ModelCenter.Instance.GetModel(); } } public bool IsOpen { get { return IsExist(); } } public bool priorityOpen { get { for (int i = 0; i < redpoints.Count; i++) { if (redpoints[i].state == RedPointState.Simple) { return true; } } return false; } } public bool IsAdvance { get { return false; } } int m_SelectIndex = 0; public int selectIndex { get { return m_SelectIndex; } set { if (value != m_SelectIndex) { m_SelectIndex = value; if (onSelectUpdate != null) { onSelectUpdate(); } } m_SelectIndex = value; } } public int jumpGiftId { get; set; } public List gifts { get; private set; } public List alreadyOpens { get; private set; } void ParseConfig() { gifts = new List(); alreadyOpens = new List(); var config = Config.Instance.Get("SuperGiftTimeList"); var array = LitJson.JsonMapper.ToObject(config.Numerical1); for (int i = 0; i < array.Length; i++) { gifts.Add(new SuperValueGift() { giftId = array[i][0], openDays = array[i][1], }); } for (int i = 0; i < gifts.Count; i++) { redpoints.Add(new Redpoint(MainRedDot.REDPOINT_OPENSERVER, 20906 * 100 + i)); } } private void RefreshBuyShopLimitEvent() { UpdateRedpoint(); } public uint startSeconds { get; private set; } public void UpdateTime(HAA16_tagMCSuperGiftInfo package) { startSeconds = package.StartTime; if (onStateUpate != null) { onStateUpate(6); } UpdateRedpoint(); } public bool IsExist() { for (int i = 0; i < gifts.Count; i++) { if (!IsGiftExist(gifts[i].giftId)) { continue; } return true; } return false; } public bool IsGiftExist(int _id) { if (startSeconds == 0) { return false; } var gift = gifts.Find((x) => { return x.giftId == _id; }); if (!gift.Equals(default(SuperValueGift))) { var startTime = TimeUtility.GetTime(startSeconds); var endTime = startTime.AddDays(gift.openDays); endTime = new DateTime(endTime.Year, endTime.Month, endTime.Day, 0, 0, 0); return TimeUtility.ServerNow < endTime; } return true; } public bool IsGiftBuy(int _id) { var _limit = storeModel.GetBuyShopLimit((uint)_id); var config = Config.Instance.Get(_id); if (_limit != null && config != null && _limit.BuyCnt >= config.PurchaseNumber[0]) { return true; } return false; } public void SetAreadyOpens() { alreadyOpens.Clear(); for (int i = 0; i < gifts.Count; i++) { if (IsGiftExist(gifts[i].giftId)) { alreadyOpens.Add(i); } } } public int GetDefaultSelect() { for (int i = 0; i < alreadyOpens.Count; i++) { if (gifts[i].giftId == jumpGiftId) { jumpGiftId = 0; return alreadyOpens[i]; } } jumpGiftId = 0; for (int i = 0; i < alreadyOpens.Count; i++) { if (redpoints[alreadyOpens[i]].state == RedPointState.Simple) { return alreadyOpens[i]; } } return alreadyOpens[0]; } bool GetDayRemind(int index) { return LocalSave.GetInt(StringUtility.Contact("OSGift_", index, "_", PlayerDatas.Instance.baseData.PlayerID), 0) == TimeUtility.Day; } public void SetDayRemind(int index) { if (redpoints[index].state == RedPointState.Simple) { LocalSave.SetInt(StringUtility.Contact("OSGift_", index, "_", PlayerDatas.Instance.baseData.PlayerID), TimeUtility.Day); UpdateRedpoint(); } } List redpoints = new List(); void UpdateRedpoint() { for (int i = 0; i < redpoints.Count; i++) { redpoints[i].state = RedPointState.None; if (IsGiftExist(gifts[i].giftId) && !IsGiftBuy(gifts[i].giftId) && !GetDayRemind(i)) { redpoints[i].state = RedPointState.Simple; } } } public struct SuperValueGift { public int giftId; public int openDays; } } }