//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Tuesday, December 11, 2018 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using EnhancedUI.EnhancedScroller; namespace Snxxz.UI { //段位奖励 [XLua.Hotfix] public class SegmentRewardWin : Window { [SerializeField] ScrollerController m_ScrollerController; CrossServerOneVsOneRewardModel m_CrossServerRewardModel; CrossServerOneVsOneRewardModel crossServerRewardModel { get { return m_CrossServerRewardModel ?? (m_CrossServerRewardModel = ModelCenter.Instance.GetModel()); } } List ListSort = new List(); #region Built-in protected override void BindController() { m_ScrollerController.OnRefreshCell += OnRefreshGridCell; } protected override void AddListeners() { } protected override void OnPreOpen() { crossServerRewardModel.GetSeasonAward(); ToAddSorting(); OnCreateGridLineCell(m_ScrollerController); m_ScrollerController.JumpIndex(JumpIndex()); } protected override void OnAfterOpen() { crossServerRewardModel.CrossRealmPKAwardStateUpdate += CrossRealmPKAwardStateUpdate; CrossServerOneVsOnePlayerInfo.Instance.UpdatePlayerInfoEvent += UpdatePlayerInfoEvent; } protected override void OnPreClose() { crossServerRewardModel.CrossRealmPKAwardStateUpdate -= CrossRealmPKAwardStateUpdate; CrossServerOneVsOnePlayerInfo.Instance.UpdatePlayerInfoEvent -= UpdatePlayerInfoEvent; } protected override void OnAfterClose() { } #endregion private void UpdatePlayerInfoEvent() { m_ScrollerController.m_Scorller.RefreshActiveCellViews();//刷新可见 } private void CrossRealmPKAwardStateUpdate() { m_ScrollerController.m_Scorller.RefreshActiveCellViews();//刷新可见 } void OnCreateGridLineCell(ScrollerController gridCtrl) { gridCtrl.Refresh(); for (int i = 0; i < ListSort.Count; i++) { gridCtrl.AddCell(ScrollerDataType.Header, ListSort[i].DanLv); } gridCtrl.Restart(); } private void OnRefreshGridCell(ScrollerDataType type, CellView cell) { int Index = cell.index; SegmentRewardCell segmentRewardCell = cell.GetComponent(); segmentRewardCell.SetReceive(Index); } private void ToAddSorting() { if (ListSort.Count <= 0) { foreach (var key in crossServerRewardModel.SegmentRewardDic.Keys) { ListSort.Add(crossServerRewardModel.SegmentRewardDic[key]); } } ListSort.Sort(Compare); } int Compare(SeasonAwardClass x, SeasonAwardClass y)//数组排列 { bool havex1 = IsReceive(x); bool havey1 = IsReceive(y); if (havex1.CompareTo(havey1) != 0) { return -havex1.CompareTo(havey1); } bool havex2 = IsReach(x); bool havey2 = IsReach(y); if (havex2.CompareTo(havey2) != 0) { return -havex2.CompareTo(havey2); } bool havex3 = IsDraw(x); bool havey3 = IsDraw(y); if (havex3.CompareTo(havey3) != 0) { return -havex3.CompareTo(havey3); } if (x.DanLv.CompareTo(y.DanLv) != 0) { return x.DanLv.CompareTo(y.DanLv); } return 1; } private bool IsReceive(SeasonAwardClass _seasonAwardClass)//未领取 { bool Bool = false; if (CrossServerOneVsOnePlayerInfo.Instance.DanLV >= _seasonAwardClass.DanLv && !crossServerRewardModel.IsAwardState(CrossRealmPKAwardStateEnum.DanLVAwardState, _seasonAwardClass.DanLv)) { Bool = true; } return Bool; } private bool IsReach(SeasonAwardClass _seasonAwardClass)//未达到 { bool Bool = false; if (_seasonAwardClass.DanLv > CrossServerOneVsOnePlayerInfo.Instance.DanLV) { Bool = true; } return Bool; } private bool IsDraw(SeasonAwardClass _seasonAwardClass)//已领取 { bool Bool = crossServerRewardModel.IsAwardState(CrossRealmPKAwardStateEnum.DanLVAwardState, _seasonAwardClass.DanLv); return Bool; } private int JumpIndex() { int Index = 0; for (int i = 0; i < ListSort.Count; i++) { if (IsReceive(ListSort[i])) { Index = i; return Index; } } return Index; } } }