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(); } } RedEnvelopeModel envelopeModel { get { return ModelCenter.Instance.GetModel(); } } 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); } } }