//-------------------------------------------------------- // [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(); } } PackModel packModel { get { return ModelCenter.Instance.GetModel(); } } #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(); } } }