| | |
| | | public class FestivalRedpackWin : Window
|
| | | {
|
| | | [SerializeField] FestivalRedpackSystemBehaviour m_FestivalSystemBehaviour;
|
| | | [SerializeField] Transform m_ContainerAchievement;
|
| | | [SerializeField] ScrollerController m_AchievementController;
|
| | | [SerializeField] Transform m_ContainerRedEnvelope;
|
| | | [SerializeField] ScrollerController m_RedEnvelopeControl;
|
| | | [SerializeField] Transform m_ContainerNoEnvelope;
|
| | | [SerializeField] Text m_OpenTime;
|
| | | [SerializeField] Transform m_ContainerGrab;
|
| | | [SerializeField] Text m_GrabCount;
|
| | | [SerializeField] Text m_GrabJade;
|
| | |
|
| | | FestivalRedpackModel model { get { return ModelCenter.Instance.GetModel<FestivalRedpackModel>(); } }
|
| | |
|
| | | AchievementModel achieveModel
|
| | | {
|
| | | get { return ModelCenter.Instance.GetModel<AchievementModel>(); }
|
| | | }
|
| | |
|
| | | RedEnvelopeModel envelopeModel { get { return ModelCenter.Instance.GetModel<RedEnvelopeModel>(); } }
|
| | |
|
| | | #region Built-in
|
| | | protected override void BindController()
|
| | | {
|
| | |
| | |
|
| | | protected override void AddListeners()
|
| | | {
|
| | | m_AchievementController.OnRefreshCell += OnRefreshAchievementCell;
|
| | | m_RedEnvelopeControl.OnRefreshCell += OnRefreshRedEnvelopeCell;
|
| | | }
|
| | |
|
| | | protected override void OnPreOpen()
|
| | | {
|
| | | model.selectTypeRefresh += SelectTypeRefresh;
|
| | | model.redpackGrabRefresh += RedpackGrabRefresh;
|
| | | WindowCenter.Instance.windowAfterOpenEvent += WindowAfterOpenEvent;
|
| | | OperationTimeHepler.Instance.dayResetEvent += DayResetEvent;
|
| | | achieveModel.achievementCompletedEvent += FestivalAchievementRefresh;
|
| | | achieveModel.achievementProgressUpdateEvent += FestivalAchievementRefresh;
|
| | | model.taskRedpackRefresh += TaskRedpackRefresh;
|
| | | Display();
|
| | | }
|
| | |
|
| | | protected override void OnAfterOpen()
|
| | |
| | |
|
| | | protected override void OnPreClose()
|
| | | {
|
| | | model.selectTypeRefresh -= SelectTypeRefresh;
|
| | | model.redpackGrabRefresh -= RedpackGrabRefresh;
|
| | | WindowCenter.Instance.windowAfterOpenEvent -= WindowAfterOpenEvent;
|
| | | OperationTimeHepler.Instance.dayResetEvent -= DayResetEvent;
|
| | | achieveModel.achievementCompletedEvent -= FestivalAchievementRefresh;
|
| | | achieveModel.achievementProgressUpdateEvent -= FestivalAchievementRefresh;
|
| | | model.taskRedpackRefresh -= TaskRedpackRefresh;
|
| | | m_FestivalSystemBehaviour.Dispose();
|
| | | }
|
| | |
|
| | | protected override void OnAfterClose()
|
| | |
| | | }
|
| | | #endregion
|
| | |
|
| | | void Display()
|
| | | {
|
| | | DisplayType();
|
| | | DisplayOpenTime();
|
| | | }
|
| | |
|
| | | void DisplayType()
|
| | | {
|
| | | m_FestivalSystemBehaviour.gameObject.SetActive(model.selectType == 1);
|
| | | m_ContainerAchievement.gameObject.SetActive(model.selectType == 2);
|
| | | m_ContainerRedEnvelope.gameObject.SetActive(model.selectType == 3);
|
| | | m_ContainerGrab.gameObject.SetActive(model.selectType != 2);
|
| | | switch (model.selectType)
|
| | | {
|
| | | case 1:
|
| | | m_FestivalSystemBehaviour.Display();
|
| | | break;
|
| | | case 2:
|
| | | m_FestivalSystemBehaviour.Dispose();
|
| | | DisplayAchievements();
|
| | | break;
|
| | | case 3:
|
| | | m_FestivalSystemBehaviour.Dispose();
|
| | | DisplayRedpacks();
|
| | | break;
|
| | | }
|
| | | }
|
| | |
|
| | | void DisplayAchievements()
|
| | | {
|
| | | m_AchievementController.Refresh();
|
| | | model.displayAchievements.Clear();
|
| | | List<FestivalRedpackAchievement> list;
|
| | | if (model.TryGetAchievements(model.festivalDay + 1, out list))
|
| | | {
|
| | | model.displayAchievements.AddRange(list);
|
| | | model.displayAchievements.Sort(model.AchievementSort);
|
| | | }
|
| | | for (int i = 0; i < model.displayAchievements.Count; i++)
|
| | | {
|
| | | m_AchievementController.AddCell(ScrollerDataType.Header, i);
|
| | | }
|
| | | m_AchievementController.Restart();
|
| | | }
|
| | |
|
| | | void DisplayRedpacks()
|
| | | {
|
| | | m_RedEnvelopeControl.Refresh();
|
| | | model.taskDisplayRedpacks.Clear();
|
| | | List<int> list;
|
| | | if (envelopeModel.TryGetEnvelopes(FestivalRedpackModel.FESTIVALTASKREDPACKTYPE, out list))
|
| | | {
|
| | | model.taskDisplayRedpacks.AddRange(list);
|
| | | }
|
| | | model.taskDisplayRedpacks.Sort(model.CompareEnvelope);
|
| | | var _line = Mathf.CeilToInt((float)model.taskDisplayRedpacks.Count / 5);
|
| | | for (int i = 0; i < _line; i++)
|
| | | {
|
| | | m_RedEnvelopeControl.AddCell(ScrollerDataType.Header, i);
|
| | | }
|
| | | m_RedEnvelopeControl.Restart();
|
| | | m_ContainerNoEnvelope.gameObject.SetActive(model.taskDisplayRedpacks.Count == 0);
|
| | | }
|
| | |
|
| | | void DisplayOpenTime()
|
| | | {
|
| | | OperationFestivalRedpack operation;
|
| | | if (OperationTimeHepler.Instance.TryGetOperation(Operation.FestivalRedpack, out operation))
|
| | | {
|
| | | m_OpenTime.text = StringUtility.Contact(Language.Get("ExpActivity_Text1"), operation.ToDisplayTime());
|
| | | }
|
| | | }
|
| | |
|
| | | void DisplayGrab()
|
| | | {
|
| | | m_GrabCount.text = Mathf.Max(0, model.grabRedpackLimitTimes - model.grabRedpackTimes).ToString();
|
| | | m_GrabJade.text = model.grabTotalJade.ToString();
|
| | | }
|
| | |
|
| | | private void OnRefreshAchievementCell(ScrollerDataType type, CellView cell)
|
| | | {
|
| | | var achievementCell = cell as FestivalAchievementCell;
|
| | | achievementCell.Display(cell.index);
|
| | | }
|
| | |
|
| | | private void OnRefreshRedEnvelopeCell(ScrollerDataType type, CellView cell)
|
| | | {
|
| | | var redpackCell = cell as OSRedEnvelopeCell;
|
| | | redpackCell.Display(cell.index);
|
| | | }
|
| | |
|
| | | private void SelectTypeRefresh()
|
| | | {
|
| | | DisplayType();
|
| | | }
|
| | |
|
| | | private void RedpackGrabRefresh()
|
| | | {
|
| | | DisplayGrab();
|
| | | }
|
| | |
|
| | | private void WindowAfterOpenEvent(Window win)
|
| | | {
|
| | | if (win is OpenServerActivityWin)
|
| | | {
|
| | | AutoOpenRedpack();
|
| | | }
|
| | | }
|
| | |
|
| | | void AutoOpenRedpack()
|
| | | {
|
| | | if (model.autoOpen && model.selectType == 3)
|
| | | {
|
| | | for (int i = 0; i < model.taskDisplayRedpacks.Count; i++)
|
| | | {
|
| | | RedEnvelopeModel.RedEnvelope envelope;
|
| | | if (envelopeModel.TryGetEnvelope(model.taskDisplayRedpacks[i], out envelope)
|
| | | && envelope.state == 1)
|
| | | {
|
| | | if (PlayerDatas.Instance.PlayerId == envelope.player
|
| | | || model.grabRedpackLimitTimes - model.grabRedpackTimes > 0)
|
| | | {
|
| | | ModelCenter.Instance.GetModel<PlayerRedPacketDatas>().RedBagId = envelope.id;
|
| | | WindowCenter.Instance.Open<RedpackOpenWin>();
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | model.autoOpen = false;
|
| | | }
|
| | |
|
| | | private void DayResetEvent(int resetType)
|
| | | {
|
| | | OperationFestivalRedpack operation;
|
| | | if (OperationTimeHepler.Instance.TryGetOperation(Operation.FestivalRedpack, out operation))
|
| | | {
|
| | | if (resetType == operation.resetType)
|
| | | {
|
| | | if (model.selectType == 2)
|
| | | {
|
| | | DisplayAchievements();
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | private void FestivalAchievementRefresh(int id)
|
| | | {
|
| | | if (model.selectType != 2)
|
| | | {
|
| | | return;
|
| | | }
|
| | | Achievement achievement;
|
| | | if (model.IsContainsAchievement(model.displayAchievements, id))
|
| | | {
|
| | | FestivalRedpackAchievement festivalRedpackAchievement = model.displayAchievements.Find((x) =>
|
| | | {
|
| | | return x.Contains(id);
|
| | | });
|
| | | if (festivalRedpackAchievement != null)
|
| | | {
|
| | | if (achieveModel.TryGetAchievement(festivalRedpackAchievement.CurrentAchieve, out achievement))
|
| | | {
|
| | | if (Achievement.IsReach(achievement.id, achievement.progress))
|
| | | {
|
| | | DisplayAchievements();
|
| | | return;
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | m_AchievementController.m_Scorller.RefreshActiveCellViews();
|
| | | }
|
| | |
|
| | | private void TaskRedpackRefresh()
|
| | | {
|
| | | if (model.selectType == 3)
|
| | | {
|
| | | DisplayRedpacks();
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | }
|