//--------------------------------------------------------  
 | 
//    [Author]:           第二世界  
 | 
//    [  Date ]:           Monday, January 07, 2019  
 | 
//--------------------------------------------------------  
 | 
  
 | 
using System;  
 | 
using System.Collections;  
 | 
using System.Collections.Generic;  
 | 
using UnityEngine;  
 | 
using UnityEngine.UI;  
 | 
  
 | 
using EnhancedUI.EnhancedScroller;  
 | 
  
 | 
namespace Snxxz.UI  
 | 
{  
 | 
    //开服成就(8-14天)  
 | 
      
 | 
    public class OpenServiceAchievementWin : Window  
 | 
    {  
 | 
        [SerializeField] ScrollerController m_ScrollerController1;//天  
 | 
        [SerializeField] ScrollerController m_ScrollerController2;//列表  
 | 
        [SerializeField] Button m_CloseBtn;  
 | 
        [SerializeField] Text m_TextIntegral;//当前积分  
 | 
        [SerializeField] GameObject m_One;  
 | 
        [SerializeField] GameObject m_Two;  
 | 
  
 | 
        [SerializeField] OpenServiceItem m_OpenServiceItemA;  
 | 
        [SerializeField] OpenServiceItem m_OpenServiceItemA1;  
 | 
        [SerializeField] OpenServiceItem m_OpenServiceItemB1;  
 | 
  
 | 
        #region Built-in  
 | 
        OpenServiceAchievementModel model { get { return ModelCenter.Instance.GetModel<OpenServiceAchievementModel>(); } }  
 | 
        DailyQuestModel dailymodel { get { return ModelCenter.Instance.GetModel<DailyQuestModel>(); } }  
 | 
        List<int> SortList = new List<int>();  
 | 
        List<WeekPartyItemClass> ItemDayList = new List<WeekPartyItemClass>();  
 | 
        protected override void BindController()  
 | 
        {  
 | 
            m_ScrollerController1.OnRefreshCell += OnRefreshGridCell_1;  
 | 
            m_ScrollerController2.OnRefreshCell += OnRefreshGridCell_2;  
 | 
        }  
 | 
  
 | 
  
 | 
        protected override void AddListeners()  
 | 
        {  
 | 
            m_CloseBtn.AddListener(() => { Close(); });  
 | 
        }  
 | 
  
 | 
        protected override void OnPreOpen()  
 | 
        {  
 | 
            ChooseDay();  
 | 
            SetTextIntegral();  
 | 
            OnCreateGridLineCell1(m_ScrollerController1);  
 | 
            OnCreateGridLineCell2(m_ScrollerController2);  
 | 
            if (model.SelectedNow >= 5)  
 | 
            {  
 | 
                m_ScrollerController1.JumpIndex(5);  
 | 
            }  
 | 
        }  
 | 
  
 | 
        protected override void OnAfterOpen()  
 | 
        {  
 | 
            model.WeekPartyDayInfoUpdate += WeekPartyDayInfoUpdate;  
 | 
        }  
 | 
  
 | 
        protected override void OnPreClose()  
 | 
        {  
 | 
            model.JumpIndex = -1;  
 | 
            model.WeekPartyDayInfoUpdate -= WeekPartyDayInfoUpdate;  
 | 
        }  
 | 
  
 | 
  
 | 
  
 | 
        protected override void OnAfterClose()  
 | 
        {  
 | 
        }  
 | 
        private void WeekPartyDayInfoUpdate()//列表刷新  
 | 
        {  
 | 
            GetPointRewardObj();//获取积分领奖信息  
 | 
            OnCreateGridLineCell2(m_ScrollerController2);  
 | 
            m_ScrollerController1.m_Scorller.RefreshActiveCellViews();//刷新可见  
 | 
            m_ScrollerController2.m_Scorller.RefreshActiveCellViews();//刷新可见  
 | 
            SetTextIntegral();  
 | 
        }  
 | 
        #endregion  
 | 
        void OnCreateGridLineCell1(ScrollerController gridCtrl)  
 | 
        {  
 | 
            gridCtrl.Refresh();  
 | 
            foreach (var key in model.WeekPartyDayDic.Keys)  
 | 
            {  
 | 
                gridCtrl.AddCell(ScrollerDataType.Header, key);  
 | 
            }  
 | 
            gridCtrl.Restart();  
 | 
        }  
 | 
        private void OnRefreshGridCell_1(ScrollerDataType type, CellView cell)  
 | 
        {  
 | 
            int Index = cell.index;  
 | 
            ButtonEx Btn = cell.GetComponent<ButtonEx>();  
 | 
            GameObject SelectedObj = cell.transform.Find("Image_XZ").gameObject;//选中  
 | 
            GameObject SelectedObj1 = cell.transform.Find("Image_XZ1").gameObject;//选中  
 | 
            ImageEx SelectedImageEx = SelectedObj.GetComponent<ImageEx>();  
 | 
  
 | 
  
 | 
            GameObject Unselected = cell.transform.Find("Image_WXZ").gameObject;//未选中  
 | 
            ImageEx UnselectedIm = Unselected.GetComponent<ImageEx>();  
 | 
            GameObject Lock = cell.transform.Find("Lock").gameObject;//锁  
 | 
  
 | 
            GameObject IsNotGary = cell.transform.Find("Obj1").gameObject;  
 | 
            Text IsNotGary_text = IsNotGary.transform.Find("DayText").GetComponent<Text>();  
 | 
            GameObject Gary = cell.transform.Find("Obj2").gameObject;  
 | 
            Text Gary_text = Gary.transform.Find("DayText").GetComponent<Text>();  
 | 
  
 | 
            RedpointBehaviour redPoint = cell.transform.Find("RedPoint").GetComponent<RedpointBehaviour>();//红点  
 | 
            if (model.RedPointDic.ContainsKey(Index))  
 | 
            {  
 | 
                redPoint.redpointId = model.RedPointDic[Index].id;  
 | 
            }  
 | 
            if (Index <= model.DayNow)  
 | 
            {  
 | 
                SelectedImageEx.gray = false;  
 | 
                Unselected.SetActive(true);  
 | 
                UnselectedIm.gray = false;  
 | 
                SelectedObj.SetActive(false);  
 | 
                SelectedObj1.SetActive(false);  
 | 
                Lock.SetActive(false);  
 | 
                IsNotGary.SetActive(true);  
 | 
                Gary.SetActive(false);  
 | 
                IsNotGary_text.text = (Index + 1).ToString();  
 | 
            }  
 | 
            else  
 | 
            {  
 | 
                Unselected.SetActive(true);  
 | 
                UnselectedIm.gray = true;  
 | 
                SelectedObj.SetActive(false);  
 | 
                SelectedObj1.SetActive(false);  
 | 
                Lock.SetActive(true);  
 | 
                IsNotGary.SetActive(false);  
 | 
                Gary.SetActive(true);  
 | 
                Gary_text.text = (Index + 1).ToString();  
 | 
            }  
 | 
  
 | 
            if (Index == model.SelectedNow)  
 | 
            {  
 | 
                if (Index > model.DayNow)  
 | 
                {  
 | 
                    SelectedImageEx.gray = true;  
 | 
                    IsNotGary.SetActive(false);  
 | 
                    Gary.SetActive(true);  
 | 
                    Lock.SetActive(true);  
 | 
                }  
 | 
                else  
 | 
                {  
 | 
                    SelectedImageEx.gray = false;  
 | 
                    IsNotGary.SetActive(true);  
 | 
                    Gary.SetActive(false);  
 | 
                    Lock.SetActive(false);  
 | 
                }  
 | 
                SelectedObj.SetActive(true);  
 | 
                SelectedObj1.SetActive(true);  
 | 
                Unselected.SetActive(false);  
 | 
  
 | 
                IsNotGary_text.text = (Index + 1).ToString();  
 | 
            }  
 | 
            Btn.SetListener(() =>  
 | 
            {  
 | 
                if (Index != model.SelectedNow)  
 | 
                {  
 | 
                    model.SelectedNow = Index;//选中天  
 | 
                    SetTextIntegral();  
 | 
                    OnCreateGridLineCell2(m_ScrollerController2);  
 | 
                    m_ScrollerController1.m_Scorller.RefreshActiveCellViews();//刷新可见  
 | 
                }  
 | 
            });  
 | 
        }  
 | 
  
 | 
        private string InDayStr(int Day)  
 | 
        {  
 | 
            string DaySte = string.Empty;  
 | 
            DaySte = Language.Get("SignIn_4", Day);  
 | 
            return DaySte;  
 | 
        }  
 | 
        //-------------------------------  
 | 
        void OnCreateGridLineCell2(ScrollerController gridCtrl)  
 | 
        {  
 | 
            ToAddSorting();//排序  
 | 
            GetPointRewardObj();//获取积分领奖信息  
 | 
            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)  
 | 
        {  
 | 
  
 | 
        }  
 | 
  
 | 
        private void ToAddSorting()  
 | 
        {  
 | 
            SortList.Clear();  
 | 
            int Weekday = model.GetWeekDay(model.SelectedNow);  
 | 
            var quests = dailymodel.GetQuestByWeekTime(Weekday);  
 | 
            List<int> dailyIdlist = new List<int>();  
 | 
            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 model.WeekPartyDayDic.Keys)  
 | 
            {  
 | 
                if (key == model.SelectedNow)  
 | 
                {  
 | 
                    for (int i = 0; i < model.WeekPartyDayDic[key].TemplateList.Length; i++)  
 | 
                    {  
 | 
                        var TemplateId = model.WeekPartyDayDic[key].TemplateList[i];  
 | 
                        var config = WeekPartyConfig.Get(TemplateId);  
 | 
                        if (config == null)  
 | 
                        {  
 | 
                            continue;  
 | 
                        }  
 | 
                        if (config.DailyQusetId != 0)  
 | 
                        {  
 | 
                            if (dailyIdlist.Contains(config.DailyQusetId))  
 | 
                            {  
 | 
                                SortList.Add(TemplateId);  
 | 
                            }  
 | 
                            // var Dailyquse = DailyQuestConfig.Get(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 (model.WeekPartyActionDic.ContainsKey(ID))  
 | 
            {  
 | 
                var WeekPartyAction = model.WeekPartyActionDic[ID];  
 | 
                int number = WeekPartyAction.TotalTimes / WeekPartyAction.SingleTimes;  
 | 
                int rewardNum = model.GetRewardNumber(model.SelectedNow, ID);//已领奖次数  
 | 
                int carryOutNum = model.GetCarryOutNum(model.SelectedNow, ID);//已完成次数  
 | 
                int TaypeNumber = 0;  
 | 
                if (carryOutNum - rewardNum > 0)  
 | 
                {  
 | 
                    TaypeNumber = (carryOutNum - rewardNum) / WeekPartyAction.SingleTimes;  
 | 
                }  
 | 
                if (TaypeNumber > 0)  
 | 
                {  
 | 
                    Bool = true;  
 | 
                }  
 | 
            }  
 | 
            return Bool;  
 | 
        }  
 | 
        private bool Undone(int ID)//未完成  
 | 
        {  
 | 
            bool Bool = false;  
 | 
            if (model.WeekPartyActionDic.ContainsKey(ID))  
 | 
            {  
 | 
                var WeekPartyAction = model.WeekPartyActionDic[ID];  
 | 
                int number = WeekPartyAction.TotalTimes / WeekPartyAction.SingleTimes;  
 | 
                int rewardNum = model.GetRewardNumber(model.SelectedNow, ID);//已领奖次数  
 | 
                int carryOutNum = model.GetCarryOutNum(model.SelectedNow, ID);//已完成次数  
 | 
                if (WeekPartyAction.TotalTimes> rewardNum)  
 | 
                {  
 | 
                    Bool = true;  
 | 
                }                
 | 
            }  
 | 
            return Bool;  
 | 
        }  
 | 
        private bool Completed(int ID)//已领取  
 | 
        {  
 | 
            bool Bool = false;  
 | 
            if (model.WeekPartyActionDic.ContainsKey(ID))  
 | 
            {  
 | 
                var WeekPartyAction = model.WeekPartyActionDic[ID];  
 | 
                int rewardNum = model.GetRewardNumber(model.SelectedNow, ID);//已领奖次数  
 | 
                int carryOutNum = model.GetCarryOutNum(model.SelectedNow, ID);//已完成次数  
 | 
                if (rewardNum >= WeekPartyAction.TotalTimes)  
 | 
                {  
 | 
                    Bool = true;  
 | 
                }  
 | 
            }  
 | 
            return Bool;  
 | 
        }  
 | 
        private int SizeId(int ID)  
 | 
        {  
 | 
            int index = 1;  
 | 
            var config = WeekPartyConfig.Get(ID);  
 | 
            if (config != null)  
 | 
            {  
 | 
                index = config.order;  
 | 
            }  
 | 
            return index;  
 | 
        }  
 | 
  
 | 
        private void SetTextIntegral()//获取当前积分  
 | 
        {  
 | 
            int Point = model.GetPoint(model.SelectedNow);  
 | 
            m_TextIntegral.text = Point.ToString();  
 | 
        }  
 | 
  
 | 
        private void GetPointRewardObj()  
 | 
        {  
 | 
            ItemDayList.Clear();  
 | 
            foreach (var key in model.WeekPartyDayDic.Keys)  
 | 
            {  
 | 
                if (key == model.SelectedNow)  
 | 
                {  
 | 
                    for (int i = 0; i < model.WeekPartyDayDic[key].WeekPartyItem.Length; i++)  
 | 
                    {  
 | 
                        ItemDayList.Add(model.WeekPartyDayDic[key].WeekPartyItem[i]);  
 | 
                    }  
 | 
                }  
 | 
            }  
 | 
            if (ItemDayList.Count > 1)  
 | 
            {  
 | 
                m_One.SetActive(false);  
 | 
                m_Two.SetActive(true);  
 | 
                if (ItemDayList[0].NeedPoint > ItemDayList[1].NeedPoint)  
 | 
                {  
 | 
                    m_OpenServiceItemA1.SetReward(model.SelectedNow, ItemDayList[1], 0, 2);  
 | 
                    m_OpenServiceItemB1.SetReward(model.SelectedNow, ItemDayList[0], 1, 2);                     
 | 
                }  
 | 
                else  
 | 
                {  
 | 
                    m_OpenServiceItemA1.SetReward(model.SelectedNow, ItemDayList[0], 0, 2);  
 | 
                    m_OpenServiceItemB1.SetReward(model.SelectedNow, ItemDayList[1], 1, 2);  
 | 
                }               
 | 
            }  
 | 
            else  
 | 
            {  
 | 
                m_One.SetActive(true);  
 | 
                m_Two.SetActive(false);  
 | 
                m_OpenServiceItemA.SetReward(model.SelectedNow, ItemDayList[0], 0, 1);  
 | 
            }  
 | 
        }  
 | 
  
 | 
        private void ChooseDay()//选择天  
 | 
        {  
 | 
            if (model.JumpIndex != -1)//跳转选择的天  
 | 
            {  
 | 
                model.SelectedNow = model.JumpIndex;  
 | 
                return;  
 | 
            }  
 | 
            foreach (var key in model.RedPointDic.Keys)//红点选择可领取的天  
 | 
            {  
 | 
                if (model.RedPointDic[key].state == RedPointState.GetReward)  
 | 
                {  
 | 
                    model.SelectedNow = key;  
 | 
                    return;  
 | 
                }  
 | 
            }  
 | 
            model.SelectedNow = model.DayNow;  
 | 
        }  
 | 
    }  
 | 
  
 | 
}  
 | 
  
 | 
  
 | 
  
 | 
  
 |