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() { PlayerDatas.Instance.PlayerDataRefreshInfoEvent += PlayerDataRefreshInfoEvent; storeModel.RefreshBuyShopLimitEvent += RefreshBuyShopLimitEvent; vipModel.firstChargeRewardEvent += FirstChargeRewardEvent; OpenServerActivityCenter.Instance.Register(6, this); } public override void UnInit() { } public void OnPlayerLoginOk() { activate = CheckActivate(); if (onStateUpate != null) { onStateUpate(6); } UpdateRedpoint(); } public event Action onStateUpate; public event Action timeLimitUpdate; public bool activate { get; private set; } StoreModel storeModel { get { return ModelCenter.Instance.GetModel(); } } VipModel vipModel { get { return ModelCenter.Instance.GetModel(); } } public bool IsOpen { get { return CheckActivate(); } } public bool priorityOpen { get { return OSGiftRedpoint.state == RedPointState.Simple; } } private void RefreshBuyShopLimitEvent() { bool _activate = CheckActivate(); if (activate != _activate) { activate = _activate; if (onStateUpate != null) { onStateUpate(6); } UpdateRedpoint(); } } public int timeOverdueGiftId { get; private set; } public DateTime overDueTime = DateTime.Now; public bool allOverdue { get; private set; } public void UpdateTime(HAA16_tagMCSuperGiftInfo package) { timeOverdueGiftId = (int)package.GiftID; var _time = new DateTime(TimeUtility.Year, TimeUtility.Month, TimeUtility.Day, 0, 0, 0); overDueTime = _time.AddDays(package.RemainDay); allOverdue = package.RemainDay == 0; bool _activate = CheckActivate(); if (activate != _activate) { activate = _activate; if (onStateUpate != null) { onStateUpate(6); } } if (timeLimitUpdate != null) { timeLimitUpdate(); } UpdateRedpoint(); } private void FirstChargeRewardEvent() { bool _activate = CheckActivate(); if (activate != _activate) { activate = _activate; if (onStateUpate != null) { onStateUpate(6); } } UpdateRedpoint(); } public bool CheckActivate() { if (PlayerDatas.Instance.baseData.coinPointTotal == 0 || !ModelCenter.Instance.GetModel().firstChargeRewardGet) { return false; } if (allOverdue) { return false; } List _list = null; StoreConfig.TryGetStoreConfigs((int)StoreFunc.OSGift,out _list); for (int i = 0; i < _list.Count; i++) { if (IsGiftOverdue(_list[i].ID)) { continue; } var _limit = storeModel.GetBuyShopLimit((uint)_list[i].ID); if (_limit == null || _limit.BuyCnt < _list[i].PurchaseNumber[0]) { return true; } } return false; } public bool IsGiftOverdue(int _id) { if (allOverdue || _id < timeOverdueGiftId) { return true; } if (_id == timeOverdueGiftId) { return TimeUtility.ServerNow >= overDueTime; } return false; } private void PlayerDataRefreshInfoEvent(PlayerDataRefresh _type) { bool _activate = CheckActivate(); if (_type == PlayerDataRefresh.ChangeCoinPointTotal && activate != _activate) { activate = _activate; if (onStateUpate != null) { onStateUpate(6); } } } public void OnBeforePlayerDataInitialize() { allOverdue = false; timeOverdueGiftId = 0; } public void SetDayRemind() { if (OSGiftRedpoint.state == RedPointState.Simple) { DayRemind.Instance.SetDayRemind(DayRemind.OSGIFT_REDPOINT, true); UpdateRedpoint(); } } void UpdateRedpoint() { OSGiftRedpoint.state = RedPointState.None; if (CheckActivate() && !DayRemind.Instance.GetDayRemind(DayRemind.OSGIFT_REDPOINT)) { OSGiftRedpoint.state = RedPointState.Simple; } } public Redpoint OSGiftRedpoint = new Redpoint(MainRedDot.REDPOINT_OPENSERVER, 20906); } }