//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Thursday, May 10, 2018 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using TableConfig; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class OpenServerGiftWin : Window { [SerializeField] RectTransform m_ContainerDisplay; [SerializeField] Button[] m_CloseBtns; [SerializeField] OSGiftBehaviour[] m_OSGifts; [SerializeField] RectTransform m_ContainerTime; [SerializeField] Text m_Overdue; [SerializeField] Text m_Timer; StoreModel m_Model; StoreModel model { get { return m_Model ?? (m_Model = ModelCenter.Instance.GetModel()); } } int currentSelectId = 0; OSGiftModel giftModel { get { return ModelCenter.Instance.GetModel(); } } #region Built-in protected override void BindController() { } protected override void AddListeners() { for (int i = 0; i < m_CloseBtns.Length; i++) { m_CloseBtns[i].onClick.AddListener(OnCloseClick); } } protected override void OnPreOpen() { WindowCenter.Instance.windowAfterOpenEvent += WindowAfterOpenEvent; WindowCenter.Instance.windowAfterCloseEvent += windowAfterCloseEvent; model.RefreshBuyShopLimitEvent += RefreshBuyShopLimitEvent; TimeUtility.OnServerOpenDayRefresh += OnServerOpenDayRefresh; GlobalTimeEvent.Instance.secondEvent += SecondEvent; giftModel.timeLimitUpdate += TimeLimitUpdate; giftModel.SetDayRemind(); Display(); m_ContainerDisplay.gameObject.SetActive(!WindowCenter.Instance.CheckOpen()); } protected override void OnAfterOpen() { } protected override void OnPreClose() { WindowCenter.Instance.windowAfterOpenEvent -= WindowAfterOpenEvent; WindowCenter.Instance.windowAfterCloseEvent -= windowAfterCloseEvent; model.RefreshBuyShopLimitEvent -= RefreshBuyShopLimitEvent; TimeUtility.OnServerOpenDayRefresh -= OnServerOpenDayRefresh; GlobalTimeEvent.Instance.secondEvent -= SecondEvent; giftModel.timeLimitUpdate -= TimeLimitUpdate; } protected override void OnAfterClose() { } #endregion private void WindowAfterOpenEvent(Window _win) { if(_win is OffLineOnHookWin) { m_ContainerDisplay.gameObject.SetActive(false); } } private void windowAfterCloseEvent(Window _win) { if (_win is OffLineOnHookWin) { m_ContainerDisplay.gameObject.SetActive(true); } } private void RefreshBuyShopLimitEvent() { Display(); } private void OnServerOpenDayRefresh() { Display(); } private void SecondEvent() { DisplayTimer(); } private void TimeLimitUpdate() { Display(); } void DisplayTimer() { var seconds = (int)(giftModel.overDueTime - TimeUtility.ServerNow).TotalSeconds; if (giftModel.IsGiftOverdue(currentSelectId) || seconds <= 0) { m_ContainerTime.gameObject.SetActive(false); m_Overdue.gameObject.SetActive(true); } else { m_ContainerTime.gameObject.SetActive(true); m_Overdue.gameObject.SetActive(false); m_Timer.text = TimeUtility.SecondsToDHMSCHS(seconds); m_Timer.color = UIHelper.GetUIColor(TextColType.Green); } } private void Display() { List _list = null; StoreConfig.TryGetStoreConfigs((int)StoreFunc.OSGift, out _list); var _index = 0; for (int i = 0; i < _list.Count; i++) { if (!giftModel.IsGiftOverdue(_list[i].ID)) { var _storeConfig = Config.Instance.Get(_list[i].ID); var _limit = model.GetBuyShopLimit((uint)_list[i].ID); if (_limit == null || _limit.BuyCnt < _storeConfig.PurchaseNumber[0]) { _index = i; currentSelectId = _list[i].ID; m_OSGifts[i].Display(_list[i].ID); break; } } _index = i; } for (int i = 0; i < m_OSGifts.Length; i++) { m_OSGifts[i].gameObject.SetActive(_index == i); } DisplayTimer(); } private void OnCloseClick() { CloseImmediately(); } } }