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);
|
}
|
}
|
}
|
|