| using System;  | 
| using System.Collections;  | 
| using System.Collections.Generic;  | 
| using UnityEngine;  | 
| namespace vnxbqy.UI  | 
| {  | 
|       | 
|     public class FestivalRedpackSystemBehaviour : MonoBehaviour  | 
|     {  | 
|         [SerializeField] Transform m_ContainerEmpty;  | 
|         [SerializeField] ScrollerController m_DateController;  | 
|         [SerializeField] ScrollerController m_RedpackController;  | 
|         [SerializeField] int m_LineCount = 5;  | 
|   | 
|         FestivalRedpackModel model { get { return ModelCenter.Instance.GetModel<FestivalRedpackModel>(); } }  | 
|         RedEnvelopeModel envelopeModel { get { return ModelCenter.Instance.GetModel<RedEnvelopeModel>(); } }  | 
|   | 
|         private void Awake()  | 
|         {  | 
|             m_DateController.lockType = EnhanceLockType.KeepHorizon;  | 
|             m_DateController.OnRefreshCell += OnRefreshDateCell;  | 
|   | 
|             m_RedpackController.lockType = EnhanceLockType.KeepVertical;  | 
|             m_RedpackController.OnRefreshCell += OnRefreshRedpackCell;  | 
|         }  | 
|   | 
|         public void Display()  | 
|         {  | 
|             model.selectDateIndex = model.festivalDay;  | 
|             OperationTimeHepler.Instance.dayResetEvent -= DayResetEvent;  | 
|             model.selectDateIndexRefresh -= SelectDateIndexRefresh;  | 
|             TimeMgr.Instance.OnMinuteEvent -= PerMinute;  | 
|             envelopeModel.EnvelopeUpdateEvent -= RedpackRefresh;  | 
|             envelopeModel.EnvelopeDelEvent -= EnvelopeDelEvent;  | 
|             OperationTimeHepler.Instance.dayResetEvent += DayResetEvent;  | 
|             model.selectDateIndexRefresh += SelectDateIndexRefresh;  | 
|             TimeMgr.Instance.OnMinuteEvent += PerMinute;  | 
|             envelopeModel.EnvelopeUpdateEvent += RedpackRefresh;  | 
|             envelopeModel.EnvelopeDelEvent += EnvelopeDelEvent;  | 
|             DisplayDates();  | 
|             DisplayRedpacks();  | 
|   | 
|             m_DateController.JumpIndex(0);  | 
|             m_RedpackController.JumpIndex(0);  | 
|         }  | 
|   | 
|         public void Dispose()  | 
|         {  | 
|             OperationTimeHepler.Instance.dayResetEvent -= DayResetEvent;  | 
|             model.selectDateIndexRefresh -= SelectDateIndexRefresh;  | 
|             TimeMgr.Instance.OnMinuteEvent -= PerMinute;  | 
|             envelopeModel.EnvelopeUpdateEvent -= RedpackRefresh;  | 
|             envelopeModel.EnvelopeDelEvent -= EnvelopeDelEvent;  | 
|         }  | 
|   | 
|         private void SelectDateIndexRefresh()  | 
|         {  | 
|             m_DateController.m_Scorller.RefreshActiveCellViews();  | 
|             DisplayRedpacks();  | 
|         }  | 
|   | 
|         private void RedpackRefresh()  | 
|         {  | 
|             m_RedpackController.m_Scorller.RefreshActiveCellViews();  | 
|         }  | 
|   | 
|         private void EnvelopeDelEvent()  | 
|         {  | 
|             DisplayRedpacks();  | 
|         }  | 
|   | 
|         private void PerMinute()  | 
|         {  | 
|             var count = 0;  | 
|             OperationFestivalRedpack operation;  | 
|             if (OperationTimeHepler.Instance.TryGetOperation(Operation.FestivalRedpack, out operation))  | 
|             {  | 
|                 var index = model.selectDateIndex;  | 
|                 var systemRedpacks = index < operation.redpacks.Count && index >= 0 ?  | 
|                     operation.redpacks[index].redpacks : operation.redpacks[0].redpacks;  | 
|                 var list = model.systemDisplayRedpacks;  | 
|                 for (int i = 0; i < systemRedpacks.Count; i++)  | 
|                 {  | 
|                     if (model.IsSystemRedpackOverdue(systemRedpacks[i]))  | 
|                     {  | 
|                         count++;  | 
|                     }  | 
|                 }  | 
|             }  | 
|             if (count != model.systemOverdueCount)  | 
|             {  | 
|                 DisplayRedpacks();  | 
|             }  | 
|         }  | 
|   | 
|         private void DayResetEvent(int resetType)  | 
|         {  | 
|             OperationFestivalRedpack operation;  | 
|             if (OperationTimeHepler.Instance.TryGetOperation(Operation.FestivalRedpack, out operation))  | 
|             {  | 
|                 if (operation.resetType == resetType  | 
|                     || resetType == 0)  | 
|                 {  | 
|                     if (model.selectDateIndex < model.festivalDay)  | 
|                     {  | 
|                         model.selectDateIndex = model.festivalDay;  | 
|                     }  | 
|                     DisplayDates();  | 
|                 }  | 
|             }  | 
|         }  | 
|   | 
|         public void DisplayDates()  | 
|         {  | 
|             m_DateController.Refresh();  | 
|             OperationFestivalRedpack operation;  | 
|             if (OperationTimeHepler.Instance.TryGetOperation(Operation.FestivalRedpack, out operation))  | 
|             {  | 
|                 var index = model.festivalDay;  | 
|                 var totalDays = operation.totalDays + 1;  | 
|                 for (int i = index; i < totalDays; i++)  | 
|                 {  | 
|                     m_DateController.AddCell(ScrollerDataType.Header, i);  | 
|                 }  | 
|             }  | 
|             m_DateController.Restart();  | 
|         }  | 
|   | 
|         public void DisplayRedpacks()  | 
|         {  | 
|             m_RedpackController.Refresh();  | 
|             model.systemDisplayRedpacks.Clear();  | 
|             model.systemOverdueCount = 0;  | 
|             OperationFestivalRedpack operation;  | 
|             if (OperationTimeHepler.Instance.TryGetOperation(Operation.FestivalRedpack, out operation))  | 
|             {  | 
|                 var index = model.selectDateIndex;  | 
|                 var systemRedpacks = index < operation.redpacks.Count && index >= 0 ?  | 
|                     operation.redpacks[index].redpacks : operation.redpacks[0].redpacks;  | 
|                 var list = model.systemDisplayRedpacks;  | 
|                 for (int i = 0; i < systemRedpacks.Count; i++)  | 
|                 {  | 
|                     if (model.IsSystemRedpackOverdue(systemRedpacks[i]))  | 
|                     {  | 
|                         model.systemOverdueCount++;  | 
|                     }  | 
|                     list.Add(systemRedpacks[i]);  | 
|                 }  | 
|   | 
|                 list.Sort(model.SystemRedpackSort);  | 
|   | 
|                 var line = Mathf.CeilToInt((float)list.Count / m_LineCount);  | 
|                 for (int i = 0; i < line; i++)  | 
|                 {  | 
|                     m_RedpackController.AddCell(ScrollerDataType.Header, i);  | 
|                 }  | 
|             }  | 
|             m_RedpackController.Restart();  | 
|   | 
|             m_ContainerEmpty.SetActive(model.systemDisplayRedpacks.Count == 0);  | 
|         }  | 
|   | 
|         private void OnRefreshRedpackCell(ScrollerDataType type, CellView cell)  | 
|         {  | 
|             var redpackCell = cell as FestivalRedpackCell;  | 
|             redpackCell.DisplaySystemRedpacks(cell.index);  | 
|         }  | 
|   | 
|         private void OnRefreshDateCell(ScrollerDataType type, CellView cell)  | 
|         {  | 
|             var dateCell = cell as FestivalRedpackDate;  | 
|             dateCell.Display(cell.index);  | 
|         }  | 
|     }  | 
| }  | 
|   |