| //--------------------------------------------------------  | 
| //    [Author]:           第二世界  | 
| //    [  Date ]:           Tuesday, November 06, 2018  | 
| //--------------------------------------------------------  | 
|   | 
| using System;  | 
| using System.Collections;  | 
| using System.Collections.Generic;  | 
| using UnityEngine;  | 
| using UnityEngine.UI;  | 
|   | 
| namespace vnxbqy.UI  | 
| {  | 
|   | 
|     public class AccumulateRechargeWin : Window  | 
|     {  | 
|         [SerializeField] Text m_Money;  | 
|         [SerializeField] ItemCell[] m_Items;  | 
|         [SerializeField] Image[] m_ItemGotSigns;  | 
|         [SerializeField] Text m_Recharge;  | 
|         [SerializeField] Button m_Func;  | 
|         [SerializeField] Button m_GetReward;  | 
|         [SerializeField] Text m_GetRewardBtnTxt;  | 
|         [SerializeField] ScrollerController m_ScrollerControl;  | 
|   | 
|         [SerializeField] RectTransform m_ContaienrOpen;  | 
|         [SerializeField] RectTransform m_ConatinerOverdue;  | 
|         [SerializeField] Text m_Time;  | 
|   | 
|         AccumulateRechargeModel model  | 
|         {  | 
|             get { return ModelCenter.Instance.GetModel<AccumulateRechargeModel>(); }  | 
|         }  | 
|   | 
|         PackModel packModel  | 
|         {  | 
|             get { return ModelCenter.Instance.GetModel<PackModel>(); }  | 
|         }  | 
|         #region Built-in  | 
|         protected override void BindController()  | 
|         {  | 
|         }  | 
|   | 
|         protected override void AddListeners()  | 
|         {  | 
|             m_Func.onClick.AddListener(OnFunc);  | 
|             m_GetReward.onClick.AddListener(GetReward);  | 
|             m_ScrollerControl.OnRefreshCell += OnRefreshCell;  | 
|         }  | 
|   | 
|         protected override void OnPreOpen()  | 
|         {  | 
|             model.selectIndex = GetSelect();  | 
|             model.selectUpdate += SelectUpdate;  | 
|             model.accumulateRechargeUpdate += AccumulateRechargeUpdate;  | 
|             OperationTimeHepler.Instance.dayResetEvent += DayResetEvent;  | 
|             TimeUtility.OnServerOpenDayRefresh += OnServerOpenDayRefresh;  | 
|             OperationTimeHepler.Instance.operationEndEvent += OperationEndEvent;  | 
|             OperationTimeHepler.Instance.operationStartEvent += OperationStartEvent;  | 
|   | 
|             Dipslay();  | 
|         }  | 
|   | 
|         protected override void OnAfterOpen()  | 
|         {  | 
|         }  | 
|   | 
|         protected override void OnPreClose()  | 
|         {  | 
|             model.selectUpdate -= SelectUpdate;  | 
|             model.accumulateRechargeUpdate -= AccumulateRechargeUpdate;  | 
|             OperationTimeHepler.Instance.dayResetEvent -= DayResetEvent;  | 
|             TimeUtility.OnServerOpenDayRefresh -= OnServerOpenDayRefresh;  | 
|             OperationTimeHepler.Instance.operationEndEvent -= OperationEndEvent;  | 
|             OperationTimeHepler.Instance.operationStartEvent -= OperationStartEvent;  | 
|         }  | 
|   | 
|         protected override void OnAfterClose()  | 
|         {  | 
|         }  | 
|         #endregion  | 
|   | 
|         private void Dipslay()  | 
|         {  | 
|             DisplayMoney(model.selectIndex);  | 
|             DisplayItems(model.selectIndex);  | 
|             DisplayFunc(model.selectIndex);  | 
|             DisplayRecharge();  | 
|             DisplayRewards();  | 
|             DisplayTime();  | 
|         }  | 
|   | 
|         private void OnFunc()  | 
|         {  | 
|             WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.VipRechargeFunc1);  | 
|         }  | 
|   | 
|         private void GetReward()  | 
|         {  | 
|             OperationBase operationBase;  | 
|             OperationAccumulateRecharge.Recharge recharge = null;  | 
|             if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.AccumulateRecharge, out operationBase))  | 
|             {  | 
|                 OperationAccumulateRecharge operation = operationBase as OperationAccumulateRecharge;  | 
|                 var reward = operation.GetReward(TimeUtility.ServerNow);  | 
|                 if (model.selectIndex >= 0 && model.selectIndex < reward.recharges.Count)  | 
|                 {  | 
|                     recharge = reward.recharges[model.selectIndex];  | 
|                 }  | 
|             }  | 
|             if (recharge != null)  | 
|             {  | 
|                 var count = packModel.GetEmptyGridCount(PackType.Item);  | 
|                 if (count < recharge.items.Count)  | 
|                 {  | 
|                     SysNotifyMgr.Instance.ShowTip("BagFull");  | 
|                     return;  | 
|                 }  | 
|                 if (model.SatisfyGetReward(recharge))  | 
|                 {  | 
|                     model.GetAccumulateRechargeReward(recharge);  | 
|                 }  | 
|             }  | 
|         }  | 
|   | 
|         private int GetSelect()  | 
|         {  | 
|             OperationBase operationBase;  | 
|             if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.AccumulateRecharge, out operationBase))  | 
|             {  | 
|                 OperationAccumulateRecharge operation = operationBase as OperationAccumulateRecharge;  | 
|                 var reward = operation.GetReward(TimeUtility.ServerNow);  | 
|                 for (int i = 0; i < reward.recharges.Count; i++)  | 
|                 {  | 
|                     var recharge = reward.recharges[i];  | 
|                     if (model.SatisfyGetReward(recharge))  | 
|                     {  | 
|                         return i;  | 
|                     }  | 
|                 }  | 
|                 for (int i = 0; i < reward.recharges.Count; i++)  | 
|                 {  | 
|                     var recharge = reward.recharges[i];  | 
|                     if (!model.IsRewardGot(recharge) && !model.SatisfyGetReward(recharge))  | 
|                     {  | 
|                         return i;  | 
|                     }  | 
|                 }  | 
|             }  | 
|             return 0;  | 
|         }  | 
|   | 
|         private void DisplayMoney(int index)  | 
|         {  | 
|             OperationBase operationBase;  | 
|             if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.AccumulateRecharge, out operationBase))  | 
|             {  | 
|                 OperationAccumulateRecharge operation = operationBase as OperationAccumulateRecharge;  | 
|                 var reward = operation.GetReward(TimeUtility.ServerNow);  | 
|                 if (index >= 0 && index < reward.recharges.Count)  | 
|                 {  | 
|                     var recharge = reward.recharges[index];  | 
|                     m_Money.text = UIHelper.GetMoneyFormat(recharge.requireGold);  | 
|                 }  | 
|             }  | 
|         }  | 
|   | 
|         private void DisplayItems(int index)  | 
|         {  | 
|             OperationBase operationBase;  | 
|             OperationAccumulateRecharge.Recharge recharge = null;  | 
|             if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.AccumulateRecharge, out operationBase))  | 
|             {  | 
|                 OperationAccumulateRecharge operation = operationBase as OperationAccumulateRecharge;  | 
|                 var reward = operation.GetReward(TimeUtility.ServerNow);  | 
|                 if (index >= 0 && index < reward.recharges.Count)  | 
|                 {  | 
|                     recharge = reward.recharges[index];  | 
|                 }  | 
|             }  | 
|             for (int i = 0; i < m_Items.Length; i++)  | 
|             {  | 
|                 m_Items[i].button.RemoveAllListeners();  | 
|                 if (recharge != null && i < recharge.items.Count)  | 
|                 {  | 
|                     var item = recharge.items[i];  | 
|                     m_Items[i].SetActive(true);  | 
|                     ItemCellModel itemCellModel = new ItemCellModel(item.id, true, (ulong)item.count);  | 
|                     m_Items[i].Init(itemCellModel);  | 
|                     m_Items[i].button.AddListener(() =>  | 
|                     {  | 
|                         ItemTipUtility.Show( item.id);  | 
|                     });  | 
|                 }  | 
|                 else  | 
|                 {  | 
|                     m_Items[i].SetActive(false);  | 
|                 }  | 
|             }  | 
|         }  | 
|   | 
|         private void DisplayRecharge()  | 
|         {  | 
|             m_Recharge.text = Language.Get("rechargeYet", UIHelper.GetMoneyFormat(model.rechargeTotal));  | 
|         }  | 
|   | 
|         private void DisplayFunc(int index)  | 
|         {  | 
|             OperationBase operationBase;  | 
|             OperationAccumulateRecharge.Recharge recharge = null;  | 
|             if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.AccumulateRecharge, out operationBase))  | 
|             {  | 
|                 OperationAccumulateRecharge operation = operationBase as OperationAccumulateRecharge;  | 
|                 var reward = operation.GetReward(TimeUtility.ServerNow);  | 
|                 if (index >= 0 && index < reward.recharges.Count)  | 
|                 {  | 
|                     recharge = reward.recharges[index];  | 
|                 }  | 
|             }  | 
|             for (int i = 0; i < m_ItemGotSigns.Length; i++)  | 
|             {  | 
|                 m_ItemGotSigns[i].SetActive(recharge != null && model.IsRewardGot(recharge));  | 
|             }  | 
|             m_GetReward.SetActive(true);  | 
|             m_Func.SetActive(true);  | 
|             if (recharge == null)  | 
|             {  | 
|                 m_GetReward.SetActive(false);  | 
|                 return;  | 
|             }  | 
|             if (model.IsRewardGot(recharge))  | 
|             {  | 
|                 m_GetReward.SetInteractable(m_GetRewardBtnTxt, false);  | 
|                 m_GetRewardBtnTxt.text = Language.Get("AccumulateRecharge_Got");  | 
|                 m_Func.SetActive(false);  | 
|                 return;  | 
|             }  | 
|             if (model.SatisfyGetReward(recharge))  | 
|             {  | 
|                 m_GetReward.SetInteractable(m_GetRewardBtnTxt, true);  | 
|                 m_GetRewardBtnTxt.color = UIHelper.GetUIColor(TextColType.LightYellow);  | 
|                 m_Func.SetActive(false);  | 
|                 m_GetRewardBtnTxt.text = Language.Get("AccumulateRecharge_GetReward");  | 
|             }  | 
|             else  | 
|             {  | 
|                 m_GetReward.SetActive(false);  | 
|             }  | 
|         }  | 
|   | 
|         private void DisplayRewards()  | 
|         {  | 
|             OperationBase operationBase;  | 
|             OperationAccumulateRecharge.Reward reward = null;  | 
|             if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.AccumulateRecharge, out operationBase))  | 
|             {  | 
|                 OperationAccumulateRecharge operation = operationBase as OperationAccumulateRecharge;  | 
|                 reward = operation.GetReward(TimeUtility.ServerNow);  | 
|             }  | 
|   | 
|             if (reward != null)  | 
|             {  | 
|                 m_ScrollerControl.Refresh();  | 
|                 for (int i = 0; i < reward.recharges.Count; i++)  | 
|                 {  | 
|                     m_ScrollerControl.AddCell(ScrollerDataType.Header, i);  | 
|                 }  | 
|                 m_ScrollerControl.Restart();  | 
|                 m_ScrollerControl.JumpIndex(model.selectIndex);  | 
|             }  | 
|         }  | 
|   | 
|         private void DisplayTime()  | 
|         {  | 
|             m_ContaienrOpen.SetActive(model.IsOpen);  | 
|             m_ConatinerOverdue.SetActive(!model.IsOpen);  | 
|             OperationBase operationBase;  | 
|             if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.AccumulateRecharge, out operationBase))  | 
|             {  | 
|                 OperationAccumulateRecharge operation = operationBase as OperationAccumulateRecharge;  | 
|                 m_Time.text = StringUtility.Contact(Language.Get("ExpActivity_Text1"),  | 
|                     UIHelper.AppendColor(TextColType.Green, operation.ToDisplayTime()));  | 
|             }  | 
|         }  | 
|   | 
|         private void SelectUpdate(int index)  | 
|         {  | 
|             DisplayMoney(index);  | 
|             DisplayItems(index);  | 
|             DisplayFunc(index);  | 
|         }  | 
|   | 
|         private void AccumulateRechargeUpdate()  | 
|         {  | 
|             DisplayRecharge();  | 
|             DisplayFunc(model.selectIndex);  | 
|         }  | 
|   | 
|         private void OnRefreshCell(ScrollerDataType type, CellView cell)  | 
|         {  | 
|             var accumulateRechargeCell = cell as AccumulateRechargeCell;  | 
|             accumulateRechargeCell.Display(cell.index);  | 
|         }  | 
|   | 
|         private void DayResetEvent(int resetType)  | 
|         {  | 
|             OperationBase operationBase;  | 
|             if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.AccumulateRecharge, out operationBase))  | 
|             {  | 
|                 if (resetType == operationBase.resetType)  | 
|                 {  | 
|                     model.selectIndex = GetSelect();  | 
|                     Dipslay();  | 
|                 }  | 
|             }  | 
|         }  | 
|   | 
|         private void OperationEndEvent(Operation operation, int state)  | 
|         {  | 
|             if (operation == Operation.AccumulateRecharge && state == 0)  | 
|             {  | 
|                 DisplayTime();  | 
|             }  | 
|         }  | 
|   | 
|         private void OperationStartEvent(Operation operation, int state)  | 
|         {  | 
|             if (operation == Operation.AccumulateRecharge && state == 0)  | 
|             {  | 
|                 model.selectIndex = GetSelect();  | 
|                 Dipslay();  | 
|             }  | 
|         }  | 
|   | 
|         private void OnServerOpenDayRefresh()  | 
|         {  | 
|             model.selectIndex = GetSelect();  | 
|             Dipslay();  | 
|         }  | 
|     }  | 
|   | 
| }  | 
|   | 
|   | 
|   | 
|   |