//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Friday, December 07, 2018 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { [XLua.Hotfix] public class LoginRewardWin : Window { //登录奖励 #region Built-in [SerializeField] ScrollerController m_ScrollerController_1; [SerializeField] ScrollerController m_ScrollerController_2; [SerializeField] Text m_Time; LoginRewardModel m_LoginRewardModel; LoginRewardModel loginRewardModel { get { return m_LoginRewardModel ?? (m_LoginRewardModel = ModelCenter.Instance.GetModel()); } } OpenServiceAchievementModel OpenServicemodel { get { return ModelCenter.Instance.GetModel(); } } DailyQuestModel dailymodel { get { return ModelCenter.Instance.GetModel(); } } List SortList = new List(); protected override void BindController() { m_ScrollerController_1.OnRefreshCell += OnRefreshGridCell_1; m_ScrollerController_2.OnRefreshCell += OnRefreshGridCell_2; } protected override void AddListeners() { } protected override void OnPreOpen() { ChooseDay(); DisplayTime(); OnCreateGridLineCell_1(m_ScrollerController_1); OnCreateGridLineCell_2(m_ScrollerController_2); if (loginRewardModel.SelectedNow >= 3) { m_ScrollerController_1.JumpIndex(loginRewardModel.SelectedNow); } } protected override void OnAfterOpen() { OperationTimeHepler.Instance.operationStartEvent += OperationStartEvent; OperationTimeHepler.Instance.dayResetEvent += DayResetEvent; loginRewardModel.LoginAwardInfoUpdate += LoginAwardInfoUpdate; } protected override void OnPreClose() { } protected override void OnAfterClose() { OperationTimeHepler.Instance.operationStartEvent -= OperationStartEvent; OperationTimeHepler.Instance.dayResetEvent -= DayResetEvent; loginRewardModel.LoginAwardInfoUpdate -= LoginAwardInfoUpdate; } private void OperationStartEvent(Operation arg1, int arg2) { if (arg1 == Operation.LoginReward) { loginRewardModel.GetDay(); m_ScrollerController_1.m_Scorller.RefreshActiveCellViews();//刷新可见 m_ScrollerController_2.m_Scorller.RefreshActiveCellViews();//刷新可见 } } private void DayResetEvent(int obj) { if (obj == (int)Operation.LoginReward) { loginRewardModel.GetDay(); m_ScrollerController_1.m_Scorller.RefreshActiveCellViews();//刷新可见 m_ScrollerController_2.m_Scorller.RefreshActiveCellViews();//刷新可见 } } private void LoginAwardInfoUpdate() { loginRewardModel.GetDay(); m_ScrollerController_1.m_Scorller.RefreshActiveCellViews(); m_ScrollerController_2.m_Scorller.RefreshActiveCellViews(); } #endregion void OnCreateGridLineCell_1(ScrollerController gridCtrl) { gridCtrl.Refresh(); foreach (var key in loginRewardModel.LoginAwardDayDic.Keys) { gridCtrl.AddCell(ScrollerDataType.Header, key); } gridCtrl.Restart(); } private void OnRefreshGridCell_1(ScrollerDataType type, CellView cell) { int Index = cell.index; LogInDayNumber logInDayNumber = cell.GetComponent(); logInDayNumber.SetInDayNumber(Index, loginRewardModel.SelectedNow); logInDayNumber.DayNumberBtn.SetListener(() => { if (loginRewardModel.SelectedNow != Index) { loginRewardModel.SelectedNow = Index; m_ScrollerController_1.m_Scorller.RefreshActiveCellViews();//刷新可见 OnCreateGridLineCell_2(m_ScrollerController_2); } }); } void OnCreateGridLineCell_2(ScrollerController gridCtrl) { ToAddSorting(); gridCtrl.Refresh(); for (int i = 0; i < SortList.Count; i++) { gridCtrl.AddCell(ScrollerDataType.Header, SortList[i]); } gridCtrl.Restart(); } private void OnRefreshGridCell_2(ScrollerDataType type, CellView cell) { int Index = cell.index; EntryInformationCell entryInformationCell = cell.GetComponent(); entryInformationCell.GetDisplayInformation(Index); } public void ChooseDay()//选择天 { foreach (var key in loginRewardModel.RedPointDic.Keys)//红点选择可领取的天 { if (loginRewardModel.RedPointDic[key].state == RedPointState.GetReward) { loginRewardModel.SelectedNow = key; return; } } loginRewardModel.SelectedNow = loginRewardModel.DayNow; } private void ToAddSorting() { SortList.Clear(); int Weekday = OpenServicemodel.GetWeekDay(loginRewardModel.SelectedNow); var quests = dailymodel.GetQuestByWeekTime(Weekday); List dailyIdlist = new List(); foreach (var key in quests.Keys) { var _list = quests[key]; for (int i = 0; i < _list.Count; i++) { dailyIdlist.Add(_list[i]); } } foreach (var key in loginRewardModel.LoginAwardDayDic.Keys) { if (key == loginRewardModel.SelectedNow) { var loginReward = loginRewardModel.LoginAwardDayDic[key]; for (int i = 0; i < loginReward.TemplateList.Length; i++) { var TemplateId = loginReward.TemplateList[i]; var config = LoginRewardConfig.Get(TemplateId); if (config == null) { continue; } if (config.DailyQusetId != 0) { if (dailyIdlist.Contains(config.DailyQusetId)) { SortList.Add(TemplateId); } } else { SortList.Add(TemplateId); } } } } SortList.Sort(Compare); } int Compare(int x, int y)//数组排列 { bool havex1 = IsReceive(x); bool havey1 = IsReceive(y); if (havex1.CompareTo(havey1) != 0) { return -havex1.CompareTo(havey1); } bool havex2 = Undone(x); bool havey2 = Undone(y); if (havex2.CompareTo(havey2) != 0) { return -havex2.CompareTo(havey2); } bool havex3 = Completed(x); bool havey3 = Completed(y); if (havex3.CompareTo(havey3) != 0) { return -havex3.CompareTo(havey3); } int havex4 = SizeId(x); int havey4 = SizeId(y); if (havex4.CompareTo(havey4) != 0) { return havex4.CompareTo(havey4); } return 1; } private bool IsReceive(int ID)//可领取 { bool Bool = false; if (loginRewardModel.LoginAwardDic.ContainsKey(ID)) { var loginAward = loginRewardModel.LoginAwardDic[ID]; int number = loginAward.TotalTimes / loginAward.SingleTimes; int rewardNum = loginRewardModel.GetRewardNumber(loginRewardModel.SelectedNow, ID);//已领奖次数 int carryOutNum = loginRewardModel.GetCarryOutNum(loginRewardModel.SelectedNow, ID);//已完成次数 int TaypeNumber = 0; if (carryOutNum - rewardNum > 0) { TaypeNumber = (carryOutNum - rewardNum) / loginAward.SingleTimes; } if (TaypeNumber > 0) { Bool = true; } } return Bool; } private bool Undone(int ID)//未完成 { bool Bool = false; if (loginRewardModel.LoginAwardDic.ContainsKey(ID)) { var loginAward = loginRewardModel.LoginAwardDic[ID]; int number = loginAward.TotalTimes / loginAward.SingleTimes; int rewardNum = loginRewardModel.GetRewardNumber(loginRewardModel.SelectedNow, ID);//已领奖次数 int carryOutNum = loginRewardModel.GetCarryOutNum(loginRewardModel.SelectedNow, ID);//已完成次数 if (loginAward.TotalTimes > rewardNum) { Bool = true; } } return Bool; } private bool Completed(int ID)//已领取 { bool Bool = false; if (loginRewardModel.LoginAwardDic.ContainsKey(ID)) { var loginAward = loginRewardModel.LoginAwardDic[ID]; int rewardNum = loginRewardModel.GetRewardNumber(loginRewardModel.SelectedNow, ID);//已领奖次数 int carryOutNum = loginRewardModel.GetCarryOutNum(loginRewardModel.SelectedNow, ID);//已完成次数 if (rewardNum >= loginAward.TotalTimes) { Bool = true; } } return Bool; } private int SizeId(int ID) { int index = 1; var config = LoginRewardConfig.Get(ID); if (config != null) { index = config.order; } return index; } private void DisplayTime() { OperationBase operationBase; if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.LoginReward, out operationBase)) { var textBuilder = OperationTimeHepler.textBuilder; textBuilder.Length = 0; textBuilder.Append(operationBase.startDate.ToDisplay()); if (operationBase.startDate != operationBase.endDate) { textBuilder.Append("—"); textBuilder.Append(operationBase.endDate.ToDisplay()); } m_Time.text = textBuilder.ToString(); } } } }