From bb98d8ae9ff4d799bd8e2c11ddf3335ab4e0b017 Mon Sep 17 00:00:00 2001
From: client_linchunjie <461730578@qq.com>
Date: 星期二, 29 一月 2019 14:09:29 +0800
Subject: [PATCH] 6086 【前端】【1.5.200】春节红包雨活动
---
System/OpenServerActivity/FestivalRedpackWin.cs | 218 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 218 insertions(+), 0 deletions(-)
diff --git a/System/OpenServerActivity/FestivalRedpackWin.cs b/System/OpenServerActivity/FestivalRedpackWin.cs
index 602f65c..6c02673 100644
--- a/System/OpenServerActivity/FestivalRedpackWin.cs
+++ b/System/OpenServerActivity/FestivalRedpackWin.cs
@@ -15,6 +15,25 @@
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()
{
@@ -22,10 +41,20 @@
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()
@@ -34,6 +63,14 @@
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()
@@ -41,6 +78,187 @@
}
#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();
+ }
+ }
}
}
--
Gitblit v1.8.0