//--------------------------------------------------------  
 | 
//    [Author]:           第二世界  
 | 
//    [  Date ]:           Tuesday, December 11, 2018  
 | 
//--------------------------------------------------------  
 | 
  
 | 
using System;  
 | 
using System.Collections;  
 | 
using System.Collections.Generic;  
 | 
using UnityEngine;  
 | 
using UnityEngine.UI;  
 | 
  
 | 
using EnhancedUI.EnhancedScroller;  
 | 
  
 | 
namespace vnxbqy.UI  
 | 
{  
 | 
    //段位奖励  
 | 
      
 | 
    public class SegmentRewardWin : Window  
 | 
    {  
 | 
        [SerializeField] ScrollerController m_ScrollerController;  
 | 
        CrossServerOneVsOneRewardModel m_CrossServerRewardModel;  
 | 
        CrossServerOneVsOneRewardModel crossServerRewardModel { get { return m_CrossServerRewardModel ?? (m_CrossServerRewardModel = ModelCenter.Instance.GetModel<CrossServerOneVsOneRewardModel>()); } }  
 | 
        List<SeasonAwardClass> ListSort = new List<SeasonAwardClass>();  
 | 
        #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>();  
 | 
            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;  
 | 
        }  
 | 
    }  
 | 
  
 | 
}  
 | 
  
 | 
  
 | 
  
 | 
  
 |