//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Thursday, July 12, 2018 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class ConsumeRebateWin : Window { [SerializeField] Text m_OperationSurplusTime; [SerializeField] Text m_OperationOpenTime; [SerializeField] Text m_OperationSurplusTimeTitle; [SerializeField] Text m_Rule; [SerializeField] ScrollerController m_Controller; int rebateOpenDayIndex = -1; ConsumeRebateModel model { get { return ModelCenter.Instance.GetModel(); } } #region Built-in protected override void BindController() { } protected override void AddListeners() { m_Controller.OnRefreshCell += OnRefreshCell; m_Controller.lockType = EnhanceLockType.KeepVertical; } protected override void OnPreOpen() { Display(); rebateOpenDayIndex = OperationTimeHepler.Instance.IndexOfOperationDays(Operation.ConsumeRebate); TimeUtility.OnServerOpenDayRefresh += OnServerOpenDayRefresh; GlobalTimeEvent.Instance.secondEvent += SecondEvent; model.consumeRebateUpdateEvent += ConsumeRebateUpdateEvent; OperationTimeHepler.Instance.operationTimeUpdateEvent += OperationTimeUpdateEvent; } protected override void OnAfterOpen() { } protected override void OnPreClose() { GlobalTimeEvent.Instance.secondEvent -= SecondEvent; TimeUtility.OnServerOpenDayRefresh -= OnServerOpenDayRefresh; model.consumeRebateUpdateEvent -= ConsumeRebateUpdateEvent; OperationTimeHepler.Instance.operationTimeUpdateEvent -= OperationTimeUpdateEvent; } protected override void OnAfterClose() { } float timer = 0f; float delay = 0.5f; protected override void LateUpdate() { base.LateUpdate(); timer += Time.deltaTime; if (timer >= delay) { timer = 0f; DisplayOperationSurplusTime(); } } #endregion private void OperationTimeUpdateEvent(Operation type) { if (type == Operation.ConsumeRebate) { Display(); } } private void ConsumeRebateUpdateEvent() { m_Controller.m_Scorller.RefreshActiveCellViews(); } private void SecondEvent() { var index = OperationTimeHepler.Instance.IndexOfOperationDays(Operation.ConsumeRebate); if (index != rebateOpenDayIndex) { rebateOpenDayIndex = index; DisplayRebate(); } } private void OnServerOpenDayRefresh() { var index = OperationTimeHepler.Instance.IndexOfOperationDays(Operation.ConsumeRebate); if (index != rebateOpenDayIndex) { rebateOpenDayIndex = index; DisplayRebate(); } } private void Display() { OperationBase operationBase; if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.ConsumeRebate, out operationBase)) { OperationConsumeRebate operation = operationBase as OperationConsumeRebate; m_OperationOpenTime.text = StringUtility.Contact(Language.Get("ExpActivity_Text1"), operation.ToDisplayTime()); } DisplayOperationSurplusTime(true); DisplayRebate(); } private void DisplayRebate() { m_Controller.Refresh(); OperationBase operationBase; if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.ConsumeRebate, out operationBase)) { OperationConsumeRebate operation = operationBase as OperationConsumeRebate; var rebate = operation.GetRebate(TimeUtility.ServerNow); if (rebate != null) { model.displayIndex = operation.rebates.IndexOf(rebate); for (int i = 0; i < rebate.rebateGrades.Count; i++) { m_Controller.AddCell(ScrollerDataType.Header, i); } } m_Rule.gameObject.SetActive(operation.dayReset); } m_Controller.Restart(); } private void OnRefreshCell(ScrollerDataType type, CellView cell) { ConsumeRebateCell consumeRebate = cell as ConsumeRebateCell; consumeRebate.Display(cell.index); } private void DisplayOperationSurplusTime(bool _force = false) { var seconds = OperationTimeHepler.Instance.GetOperationSurplusTime(Operation.ConsumeRebate); if (seconds > 0) { m_OperationSurplusTime.text = TimeUtility.SecondsToConsumeRebate(seconds); m_OperationSurplusTime.color = UIHelper.GetUIColor(TextColType.Green); if (!m_OperationSurplusTimeTitle.gameObject.activeSelf) { m_OperationSurplusTimeTitle.gameObject.SetActive(true); } } else { if (_force || m_OperationSurplusTime.color.Equals(UIHelper.GetUIColor(TextColType.Green))) { m_OperationSurplusTime.text = Language.Get("ActivityEnd"); m_OperationSurplusTime.color = UIHelper.GetUIColor(TextColType.Red); m_OperationSurplusTimeTitle.gameObject.SetActive(false); } } } } }