//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Wednesday, July 18, 2018 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; //限时礼包 namespace vnxbqy.UI { public class LimitedTimePackageWin : Window { [SerializeField] Text m_Text_PackageName;//礼包名 [SerializeField] Button m_Close_Btn;//关闭按钮 [SerializeField] Button m_Buy_Btn;//购买按钮 [SerializeField] GameObject m_BoughtObj;//已购买 [SerializeField] Transform m_Horizontal; [SerializeField] ScrollerController m_ScrollerControl; [SerializeField] Text m_Money1;//原价 [SerializeField] Text m_Money2;//现价 [SerializeField] Text m_Text_ActivityTimeTo;//活动时间 public int CDTIME = 1; private float time = 0; #region Built-in LimitedTimePackageItemClassModel limitedTimePackageItemModel { get { return ModelCenter.Instance.GetModel(); } } VipModel vipModel { get { return ModelCenter.Instance.GetModel(); } } protected override void BindController() { } protected override void AddListeners() { m_Close_Btn.AddListener(() => { Close(); if (!WindowCenter.Instance.IsOpen()) { WindowCenter.Instance.Open(); } }); } protected override void OnPreOpen() { m_ScrollerControl.OnRefreshCell += OnRefreshCell; limitedTimePackageItemModel.selectIndex = GetSelect(); OperationTimeHepler.Instance.operationTimeUpdateEvent += OperationTimeUpdateEvent; limitedTimePackageItemModel.UpdateLimitedTimePackageItem += UpdateLimitedTimePackageItem; GlobalTimeEvent.Instance.secondEvent += secondEvent; limitedTimePackageItemModel.selectUpdate += SelectChanged; time = 0; m_Buy_Btn.interactable = true; DisPlay(limitedTimePackageItemModel.selectIndex); } private void SelectChanged(int select) { DisPlay(select, true); } protected override void OnAfterOpen() { if (limitedTimePackageItemModel.redPointStre1.state == RedPointState.Simple) { int GetDayOfYear = DateTime.Now.DayOfYear; LocalSave.SetInt("IsOpenLimitedTime", GetDayOfYear); limitedTimePackageItemModel.IsShowTip(); } } private void UpdateLimitedTimePackageItem() { DisPlay(limitedTimePackageItemModel.selectIndex, true); } private void OperationTimeUpdateEvent(Operation type) { if (type == Operation.GiftPackage) { DisPlay(); } } private int GetSelect() { OperationBase operationBase; if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.GiftPackage, out operationBase)) { GiftPackageClass operation = operationBase as GiftPackageClass; GiftPackageClass.Gift_Package gift; if (operation.TryGetGift(TimeUtility.ServerNow, out gift)) { for (int i = 0; i < gift.gifts.Length; i++) { int BuyCountLimit = gift.gifts[i].limitNum;//限购数量 int GiftID = gift.gifts[i].id;//礼包ID if (limitedTimePackageItemModel.DicBuyPackage.ContainsKey(GiftID) && limitedTimePackageItemModel.DicBuyPackage[GiftID] >= BuyCountLimit) { continue; } return i; } } } return 0; } private void DisPlay(int _index = 0, bool refreshScroll = false) { for (int i = 0; i < m_Horizontal.childCount; i++) { m_Horizontal.GetChild(i).SetActive(false); } OperationBase operationBase; if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.GiftPackage, out operationBase)) { GiftPackageClass operation = operationBase as GiftPackageClass; GiftPackageClass.Gift_Package gift; if (operation.TryGetGift(TimeUtility.ServerNow, out gift)) { if (gift.gifts.Length > 0 && _index < gift.gifts.Length) { string str = string.Empty; int rmb = gift.gifts[_index].rmb; if (PlayerDatas.Instance.baseData.IsActive90Off) { OrderInfoConfig orderInfo = null; vipModel.TryGetOrderInfoByOrderInfo(gift.gifts[_index].OrderInfo, out orderInfo); rmb = orderInfo.PayRMBNum; } var curMoneyStr = UIHelper.GetMoneyFormat(rmb); var orgMoneyStr = UIHelper.GetMoneyFormat(gift.gifts[_index].rmbOriginal); str = Language.Get("TimeLimitGoods", curMoneyStr); m_Text_PackageName.text = str; m_Money1.text = Language.Get("PayMoneyNum", orgMoneyStr);//原价 m_Money2.text = Language.Get("PayMoneyNum", curMoneyStr);//现价 int BuyCountLimit = gift.gifts[_index].limitNum;//限购数量 int GiftID = gift.gifts[_index].id;//礼包ID m_Buy_Btn.RemoveAllListeners(); m_Buy_Btn.AddListener(() => { if (!limitedTimePackageItemModel.IsExpired()) { if (OperationTimeHepler.Instance.SatisfyAdvanceCondition(Operation.GiftPackage)) { var seconds = 0; if (operationBase != null) { if (operationBase.InAdvanceTime(TimeUtility.ServerNow)) { seconds = operationBase.GetSecondsBeforeStart(TimeUtility.ServerNow); } } SysNotifyMgr.Instance.ShowTip("LimitGilt1", TimeUtility.SecondsToDHMSCHS(seconds)); return; } else { m_Buy_Btn.interactable = false; time = 0; vipModel.OpenFreePlat(str, rmb, gift.gifts[_index].OrderInfo); return; } } else { SysNotifyMgr.Instance.ShowTip("LimitGift9"); return; } }); if (limitedTimePackageItemModel.DicBuyPackage.ContainsKey(GiftID) && limitedTimePackageItemModel.DicBuyPackage[GiftID] >= BuyCountLimit) { m_Buy_Btn.SetActive(false); m_BoughtObj.SetActive(true); GetWidgt("GameObject").SetActive(false); } else { m_Buy_Btn.SetActive(true); m_BoughtObj.SetActive(false); int count = 0; limitedTimePackageItemModel.DicBuyPackage.TryGetValue(GiftID, out count); GetWidgt("GameObject").SetActive(true); GetWidgt("Text").text = Language.Get("LimitGiftCnt", BuyCountLimit - count); ; } var items = gift.gifts[_index].items; for (int i = 0; i < items.Length; i++) { int type = i; if (type < m_Horizontal.childCount) { var LimitedTimeItem_Info = m_Horizontal.GetChild(type); LimitedTimeItem_Info.SetActive(true); LimitedTimeItemInfo limitedTimeItemInfo = LimitedTimeItem_Info.GetComponent(); if (items[type].isMainItem) { limitedTimeItemInfo.Uieffect.SetActive(true); limitedTimeItemInfo.Uieffect.Play(); } else { limitedTimeItemInfo.Uieffect.SetActive(false); } var ItemCell = limitedTimeItemInfo.Item_Cell; var Item = ItemConfig.Get(items[type].itemId); ItemCellModel cellModel = new ItemCellModel(items[type].itemId, true, (ulong)items[type].itemCount); ItemCell.Init(cellModel); ItemCell.button.RemoveAllListeners(); ItemCell.button.AddListener(() => { ItemTipUtility.Show(items[type].itemId); }); } } } } } DisplaySurplusTime(); if (refreshScroll) m_ScrollerControl.m_Scorller.RefreshActiveCellViews(); else { DisplayRewards(); } } private void DisplayRewards() { OperationBase operationBase; GiftPackageClass.Gift_Package reward = default(GiftPackageClass.Gift_Package); if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.GiftPackage, out operationBase)) { var operation = operationBase as GiftPackageClass; operation.TryGetGift(TimeUtility.ServerNow, out reward); } m_ScrollerControl.Refresh(); for (int i = 0; i < reward.gifts.Length; i++) { m_ScrollerControl.AddCell(ScrollerDataType.Header, i); } m_ScrollerControl.Restart(); m_ScrollerControl.JumpIndex(limitedTimePackageItemModel.selectIndex); } protected override void OnPreClose() { OperationTimeHepler.Instance.operationTimeUpdateEvent -= OperationTimeUpdateEvent; limitedTimePackageItemModel.UpdateLimitedTimePackageItem -= UpdateLimitedTimePackageItem; GlobalTimeEvent.Instance.secondEvent -= secondEvent; limitedTimePackageItemModel.selectUpdate -= SelectChanged; m_ScrollerControl.OnRefreshCell -= OnRefreshCell; } protected override void OnAfterClose() { } protected override void LateUpdate() { if (!m_Buy_Btn.interactable) { time += Time.deltaTime; if (time >= CDTIME) { m_Buy_Btn.interactable = true; time = 0; } } } private void secondEvent() { DisplaySurplusTime(); } private void DisplaySurplusTime() { OperationBase operationBase; OperationTimeHepler.Instance.TryGetOperationTime(Operation.GiftPackage, out operationBase); var seconds = 0; var inAdvance = false; if (operationBase != null) { if (operationBase.InAdvanceTime(TimeUtility.ServerNow)) { inAdvance = true; seconds = operationBase.GetSecondsBeforeStart(TimeUtility.ServerNow); } else { GiftPackageClass operation = operationBase as GiftPackageClass; seconds = operation.GetResetSurplusTime(); } } if (seconds > 0) { if (inAdvance) { m_Text_ActivityTimeTo.text = Language.Get("OperationAdvanceOpen", TimeUtility.SecondsToDHMSCHS(seconds)); } else { m_Text_ActivityTimeTo.text = Language.Get("LimitGift1", TimeUtility.SecondsToDHMSCHS(seconds)); } } else { m_Text_ActivityTimeTo.text = Language.Get("ActivityEnd"); } } #endregion void OnRefreshCell(ScrollerDataType type, CellView cell) { var index = cell.index; var item = cell.GetComponent(); item.Display(index); } } }