//--------------------------------------------------------  
 | 
//    [Author]:           第二世界  
 | 
//    [  Date ]:           Tuesday, October 31, 2017  
 | 
//--------------------------------------------------------  
 | 
  
 | 
using System;  
 | 
using System.Collections;  
 | 
using System.Collections.Generic;  
 | 
using UnityEngine;  
 | 
using UnityEngine.UI;  
 | 
  
 | 
namespace Snxxz.UI  
 | 
{  
 | 
    public class PersonalBossWin : Window  
 | 
    {  
 | 
        [SerializeField] CyclicScroll m_Bosses;  
 | 
        [SerializeField] BossIntroduceBehaviour m_BossIntroduce;  
 | 
        [SerializeField] Text m_Times;  
 | 
        [SerializeField] Button m_Goto;  
 | 
        [SerializeField] RectTransform m_NoDamageTip;  
 | 
        [SerializeField] Text m_ButtonName;  
 | 
        [SerializeField] Button m_BuyTimes;  
 | 
        [SerializeField] Text m_WipeText;  
 | 
          
 | 
        PersonalBossModel model { get { return ModelCenter.Instance.GetModel<PersonalBossModel>(); } }  
 | 
        FindPreciousModel findPreciousModel { get { return ModelCenter.Instance.GetModel<FindPreciousModel>(); } }  
 | 
        DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }  
 | 
  
 | 
        int enterTimes = 0;  
 | 
        int totalTimes = 0;  
 | 
        #region Built-in  
 | 
        protected override void BindController()  
 | 
        {  
 | 
        }  
 | 
  
 | 
        protected override void AddListeners()  
 | 
        {  
 | 
            m_Goto.AddListener(GotoKillBoss);  
 | 
            m_BuyTimes.AddListener(BuyTimes);  
 | 
        }  
 | 
        private void BuyTimes()  
 | 
        {  
 | 
            if ((totalTimes - enterTimes) >= model.maxBossTimes)  
 | 
            {  
 | 
                ServerTipDetails.DisplayNormalTip(Language.Get("DemonJar18"));  
 | 
            }  
 | 
            else  
 | 
            {  
 | 
                dungeonModel.currentDungeon = new Dungeon(PersonalBossModel.PERSONALBOSS_MAPID, 0);  
 | 
                WindowCenter.Instance.Open<DungeonBuyTimesWin>();  
 | 
            }  
 | 
  
 | 
        }  
 | 
        protected override void OnPreOpen()  
 | 
        {  
 | 
            dungeonModel.updateDungeonBuyCnt += OnTimesOk;  
 | 
            DTC0320_tagFBEnd.UpdateFBEndEvent += UpdateFBEnd;  
 | 
  
 | 
            OnTimesOk();  
 | 
        }  
 | 
  
 | 
        private void OnTimesOk()  
 | 
        {  
 | 
            totalTimes = dungeonModel.GetTotalTimes(PersonalBossModel.PERSONALBOSS_MAPID);  
 | 
            enterTimes = dungeonModel.GetEnterTimes(PersonalBossModel.PERSONALBOSS_MAPID);  
 | 
            m_Times.text = StringUtility.Contact(totalTimes - enterTimes, "/", model.maxBossTimes);  
 | 
            m_Times.color = totalTimes - enterTimes <= 0 ? UIHelper.GetUIColor(TextColType.Red) : UIHelper.GetUIColor(TextColType.DarkGreen);  
 | 
        }  
 | 
  
 | 
        protected override void OnAfterOpen()  
 | 
        {  
 | 
            model.bossSelectedEvent += OnBossSelected;  
 | 
            if (model.CanFBWipeOut(model.selectedBoss))  
 | 
            {  
 | 
                m_ButtonName.text = Language.Get("RuneTower22");  
 | 
            }  
 | 
            else  
 | 
            {  
 | 
                m_ButtonName.text = Language.Get("RealmPractice108");  
 | 
            }  
 | 
            m_WipeText.text = Language.Get("PersonalBossWipeOut", model.WipeOutLV);  
 | 
        }  
 | 
  
 | 
        protected override void OnPreClose()  
 | 
        {  
 | 
            model.bossSelectedEvent -= OnBossSelected;  
 | 
            dungeonModel.updateDungeonBuyCnt -= OnTimesOk;  
 | 
            DTC0320_tagFBEnd.UpdateFBEndEvent -= UpdateFBEnd;  
 | 
        }  
 | 
  
 | 
        protected override void OnAfterClose()  
 | 
        {  
 | 
        }  
 | 
  
 | 
        protected override void OnActived()  
 | 
        {  
 | 
            base.OnActived();  
 | 
            ShowBosses();  
 | 
        }  
 | 
        #endregion  
 | 
  
 | 
        private void UpdateFBEnd()  
 | 
        {  
 | 
            OnTimesOk();  
 | 
            model.UpdateRedpoint();  
 | 
        }  
 | 
  
 | 
  
 | 
        private void ShowBosses()  
 | 
        {  
 | 
            var bosses = new List<int>();  
 | 
            bosses.AddRange(model.GetPersonalBosses());  
 | 
  
 | 
            model.selectedBoss = model.GetRecommendBoss();  
 | 
  
 | 
            m_BossIntroduce.Display(model.selectedBoss, true);  
 | 
            m_Bosses.Init(bosses);  
 | 
            m_Bosses.MoveToCenter(bosses.IndexOf(model.selectedBoss));  
 | 
  
 | 
            DisplayGotoKillButton(model.selectedBoss);  
 | 
            DisplayTip(model.selectedBoss);  
 | 
        }  
 | 
  
 | 
        private void GotoKillBoss()  
 | 
        {  
 | 
            var error = 0;  
 | 
            if (TestEnterDungeon(out error))  
 | 
            {  
 | 
                if (model.CanFBWipeOut(model.selectedBoss))  
 | 
                {  
 | 
                    var config = PersonalBossConfig.Get(model.selectedBoss);  
 | 
                    dungeonModel.RequestSweep(new Dungeon(PersonalBossModel.PERSONALBOSS_MAPID, config.lineId));  
 | 
                }  
 | 
                else  
 | 
                {  
 | 
                    model.RequestGotoDungeon(model.selectedBoss);  
 | 
                }  
 | 
            }  
 | 
            else  
 | 
            {  
 | 
                switch (error)  
 | 
                {  
 | 
                    case 1:  
 | 
                        dungeonModel.currentDungeon = new Dungeon(PersonalBossModel.PERSONALBOSS_MAPID, 0);  
 | 
                        WindowCenter.Instance.Open<DungeonBuyTimesWin>();  
 | 
                        //WindowCenter.Instance.Open<PersonalBossVipLackWin>();  
 | 
                        break;  
 | 
                    case 2:  
 | 
                        dungeonModel.currentDungeon = new Dungeon(PersonalBossModel.PERSONALBOSS_MAPID, 0);  
 | 
                        WindowCenter.Instance.Open<DungeonBuyTimesWin>();  
 | 
                        //WindowCenter.Instance.Open<PersonalBossVipLackWin>();  
 | 
                        break;  
 | 
                    case 3:  
 | 
                        SysNotifyMgr.Instance.ShowTip("BossRealmHint2", RealmConfig.Get(NPCConfig.Get(model.selectedBoss).Realm).LvLarge);  
 | 
                        break;  
 | 
                    case 4:  
 | 
                        SysNotifyMgr.Instance.ShowTip("DungeonNoGO");  
 | 
                        break;  
 | 
                    case 5:  
 | 
                        SysNotifyMgr.Instance.ShowTip("DemonJar_Text2");  
 | 
                        break;  
 | 
                }  
 | 
            }  
 | 
  
 | 
        }  
 | 
  
 | 
        private bool TestEnterDungeon(out int _error)  
 | 
        {  
 | 
            if (model.IsFreeTime(model.selectedBoss))  
 | 
            {  
 | 
                _error = 0;  
 | 
                return true;  
 | 
            }  
 | 
            if (totalTimes <= 0)  
 | 
            {  
 | 
                _error = 1;  
 | 
                return false;  
 | 
            }  
 | 
  
 | 
            if (enterTimes >= totalTimes)  
 | 
            {  
 | 
                _error = 2;  
 | 
                return false;  
 | 
            }  
 | 
  
 | 
            if (!findPreciousModel.IsBossUnlock(model.selectedBoss))  
 | 
            {  
 | 
                _error = 3;  
 | 
                return false;  
 | 
            }  
 | 
            if (!model.IsPlayerLevelEnough(model.selectedBoss))  
 | 
            {  
 | 
                _error = 5;  
 | 
                return false;  
 | 
            }  
 | 
  
 | 
            var mapConfig = MapConfig.Get(PlayerDatas.Instance.baseData.MapID);  
 | 
            if (mapConfig.MapFBType != (int)MapType.OpenCountry && PlayerDatas.Instance.baseData.MapID != 31020)  
 | 
            {  
 | 
                _error = 4;  
 | 
                return false;  
 | 
            }  
 | 
  
 | 
            _error = 0;  
 | 
            return true;  
 | 
        }  
 | 
  
 | 
        private void OnBossSelected(int bossId)  
 | 
        {  
 | 
            m_BossIntroduce.Display(bossId, false);  
 | 
            DisplayGotoKillButton(model.selectedBoss);  
 | 
            DisplayTip(bossId);  
 | 
  
 | 
            if (model.CanFBWipeOut(model.selectedBoss))  
 | 
            {  
 | 
                m_ButtonName.text = Language.Get("RuneTower22");  
 | 
            }  
 | 
            else  
 | 
            {  
 | 
                m_ButtonName.text = Language.Get("RealmPractice108");  
 | 
            }  
 | 
            model.UpdateRedpoint();  
 | 
        }  
 | 
  
 | 
        private void DisplayTip(int bossId)  
 | 
        {  
 | 
            if (!findPreciousModel.IsBossUnlock(bossId))  
 | 
            {  
 | 
                m_NoDamageTip.SetActive(true);  
 | 
            }  
 | 
            else  
 | 
            {  
 | 
                m_NoDamageTip.SetActive(false);  
 | 
            }  
 | 
        }  
 | 
  
 | 
        private void DisplayGotoKillButton(int bossId)  
 | 
        {  
 | 
        }  
 | 
  
 | 
    }  
 | 
  
 | 
}  
 | 
  
 | 
  
 | 
  
 | 
  
 | 
  
 | 
  
 | 
  
 | 
  
 |