| //--------------------------------------------------------  | 
| //    [Author]:           第二世界  | 
| //    [  Date ]:           Wednesday, October 25, 2017  | 
| //--------------------------------------------------------  | 
|   | 
| using System;  | 
| using System.Collections;  | 
| using System.Collections.Generic;  | 
| using UnityEngine;  | 
| using UnityEngine.UI;  | 
|   | 
| using vnxbqy.UI;  | 
|   | 
| namespace vnxbqy.UI  | 
| {  | 
|   | 
|     public class DungeonSweepResultWin : Window  | 
|     {  | 
|   | 
|         [SerializeField] RectTransform m_ContainerReward1;  | 
|         [SerializeField] ItemBehaviour[] itemBehaviours1 = new ItemBehaviour[5];  | 
|   | 
|         [SerializeField] RectTransform m_ContainerReward2;  | 
|         [SerializeField] ItemBehaviour[] itemBehaviours2 = new ItemBehaviour[5];  | 
|   | 
|         [SerializeField] ItemBehaviour m_DungeonTicket;  | 
|         [SerializeField] ItemBehaviour m_SweepCost;  | 
|   | 
|         [SerializeField] UIEffect m_SweepResultEffect;  | 
|         [SerializeField] Button m_Again;  | 
|         [SerializeField] Button m_Close;  | 
|         [SerializeField] Text m_BtnText;  | 
|         DungeonModel model { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }  | 
|         PackModel playerPack { get { return ModelCenter.Instance.GetModel<PackModel>(); } }  | 
|         DailyQuestModel dailyQuestModel { get { return ModelCenter.Instance.GetModel<DailyQuestModel>(); } }  | 
|   | 
|         #region Built-in  | 
|         protected override void BindController()  | 
|         {  | 
|         }  | 
|   | 
|         protected override void AddListeners()  | 
|         {  | 
|             m_Again.AddListener(ReSweep);  | 
|             m_Close.AddListener(CloseClick);  | 
|         }  | 
|   | 
|         protected override void OnPreOpen()  | 
|         {  | 
|             DisplayResult();  | 
|             model.getDungeonResultEvent += DisplayResult;  | 
|             if (model.currentDungeon.mapId == 31140)  | 
|             {  | 
|                 m_BtnText.text = Language.Get("RuneTowerSweepText12");  | 
|             }  | 
|             else  | 
|             {  | 
|                 m_BtnText.text = Language.Get("MoppingUpEnd_Btn_Continue");  | 
|             }  | 
|   | 
|             if (CommonDungeonSelectModel.mapIDToVip.ContainsKey(model.currentDungeon.mapId))  | 
|             {  | 
|                 m_Again.SetActive(false);  | 
|             }  | 
|             else  | 
|             {  | 
|                 m_Again.SetActive(true);  | 
|             }  | 
|         }  | 
|   | 
|         protected override void OnAfterOpen()  | 
|         {  | 
|   | 
|         }  | 
|   | 
|         protected override void OnPreClose()  | 
|         {  | 
|             model.getDungeonResultEvent -= DisplayResult;  | 
|         }  | 
|   | 
|         protected override void OnAfterClose()  | 
|         {  | 
|         }  | 
|         #endregion  | 
|   | 
|   | 
|         private void DisplayResult()  | 
|         {  | 
|             DisplaySweepCost();  | 
|             DrawItems();  | 
|   | 
|             m_SweepResultEffect.Play();  | 
|         }  | 
|   | 
|         private void DisplaySweepCost()  | 
|         {  | 
|             var tickets = model.GetTicketCost(model.currentDungeon.mapId, model.currentDungeon.lineId);  | 
|             if (tickets.id > 0)  | 
|             {  | 
|                 m_DungeonTicket.SetItem(tickets);  | 
|                 m_DungeonTicket.SetActive(true);  | 
|             }  | 
|             else  | 
|             {  | 
|                 m_DungeonTicket.SetActive(false);  | 
|             }  | 
|   | 
|             var cost = model.GetSweepCost(model.currentDungeon);  | 
|             if (cost.id > 0)  | 
|             {  | 
|                 m_SweepCost.SetActive(true);  | 
|                 m_SweepCost.SetItem(cost);  | 
|             }  | 
|             else  | 
|             {  | 
|                 m_SweepCost.SetActive(false);  | 
|             }  | 
|         }  | 
|   | 
|         private int compItem(Item itemA, Item itemB)  | 
|         {  | 
|             int colorA = ItemConfig.Get(itemA.id).ItemColor;  | 
|             int colorB = ItemConfig.Get(itemB.id).ItemColor;  | 
|             return colorB.CompareTo(colorA);  | 
|         }  | 
|   | 
|         private void DrawItems()  | 
|         {  | 
|             var serveritems = model.dungeonResult.itemInfo;  | 
|             var items = new List<Item>();  | 
|   | 
|             for (int i = 0; i < serveritems.Length; i++)  | 
|             {  | 
|                 var serverItem = serveritems[i];  | 
|                 items.Add(new Item(serverItem.ItemID, serverItem.Count));  | 
|             }  | 
|             items.Sort(compItem);  | 
|             for (int i = 0; i < itemBehaviours1.Length; i++)  | 
|             {  | 
|                 var behaviour = itemBehaviours1[i];  | 
|                 if (i < items.Count)  | 
|                 {  | 
|                     behaviour.SetActive(true);  | 
|                     var reward = items[i];  | 
|                     behaviour.SetItem(reward);  | 
|                 }  | 
|                 else  | 
|                 {  | 
|                     behaviour.SetActive(false);  | 
|                 }  | 
|             }  | 
|   | 
|             if (items.Count > itemBehaviours1.Length)  | 
|             {  | 
|                 m_ContainerReward2.SetActive(true);  | 
|   | 
|                 var startIndex = itemBehaviours1.Length;  | 
|   | 
|                 for (int i = 0; i < itemBehaviours2.Length; i++)  | 
|                 {  | 
|                     var behaviour = itemBehaviours2[i];  | 
|                     if (i + startIndex < items.Count)  | 
|                     {  | 
|                         behaviour.SetActive(true);  | 
|                         var reward = items[i + startIndex];  | 
|                         behaviour.SetItem(reward);  | 
|                     }  | 
|                     else  | 
|                     {  | 
|                         behaviour.SetActive(false);  | 
|                     }  | 
|                 }  | 
|             }  | 
|             else  | 
|             {  | 
|                 m_ContainerReward2.SetActive(false);  | 
|             }  | 
|         }  | 
|   | 
|         private void ReSweep()  | 
|         {  | 
|             if (model.currentDungeon.mapId == 31140)//冰晶矿脉不允许再次扫荡  | 
|             {  | 
|                 CloseClick();  | 
|                 return;  | 
|             }  | 
|             var error = 0;  | 
|             if (TestSweep(out error))  | 
|             {  | 
|                 model.RequestSweep(model.currentDungeon);  | 
|             }  | 
|             else  | 
|             {  | 
|                 switch (error)  | 
|                 {  | 
|                     case 1:  | 
|                         WindowCenter.Instance.Open<DungeonBuyTimesWin>();  | 
|                         break;  | 
|                     case 2:  | 
|                         SysNotifyMgr.Instance.ShowTip("Multiple_Finish");  | 
|                         break;  | 
|                     case 3:  | 
|                         var tickets = model.GetTicketCost(model.currentDungeon.mapId, model.currentDungeon.lineId);  | 
|                         ItemTipUtility.Show(tickets.id);  | 
|                         break;  | 
|                     case 4:  | 
|                         var cost = model.GetSweepCost(model.currentDungeon);  | 
|                         var itemOwn = playerPack.GetItemCountByID(PackType.Item, cost.id);  | 
|                         var moneyNeed = GeneralDefine.autoBuyItemPrices[0] * (cost.count - itemOwn);  | 
|                         ConfirmCancel.ShowPopConfirm(  | 
|                           Language.Get("Mail101"),  | 
|                           Language.Get("MultipleSweep_Text3", cost.count - itemOwn, moneyNeed),  | 
|                           (bool _ok) =>  | 
|                           {  | 
|                               if (_ok)  | 
|                               {  | 
|                                   var moneyOwn = PlayerDatas.Instance.baseData.diamond ;  | 
|                                   if (moneyNeed > moneyOwn)  | 
|                                   {  | 
|                                       WindowCenter.Instance.Open<RechargeTipWin>();  | 
|                                   }  | 
|                                   else  | 
|                                   {  | 
|                                       model.RequestSweep(model.currentDungeon);  | 
|                                   }  | 
|                               }  | 
|                           }  | 
|                           );  | 
|                         break;  | 
|                     case 5:  | 
|                         SysNotifyMgr.Instance.ShowTip("SweepFB_1");  | 
|                         break;  | 
|                 }  | 
|             }  | 
|         }  | 
|   | 
|         private bool TestSweep(out int error)  | 
|         {  | 
|             var dataMapId = model.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID);  | 
|             if (dataMapId == model.currentDungeon.mapId)  | 
|             {  | 
|                 error = 5;  | 
|                 return false;  | 
|             }  | 
|   | 
|             var dailyQuestId = dailyQuestModel.GetDailyQuestIdByDataMapId(model.currentDungeon.mapId);  | 
|             if (dailyQuestId != 0)  | 
|             {  | 
|                 var state = dailyQuestModel.GetQuestState(dailyQuestId);  | 
|                 if (state == DailyQuestModel.DailyQuestState.CanBuyTimes)  | 
|                 {  | 
|                     error = 1;  | 
|                     return false;  | 
|                 }  | 
|   | 
|                 if (state == DailyQuestModel.DailyQuestState.Completed)  | 
|                 {  | 
|                     error = 2;  | 
|                     return false;  | 
|                 }  | 
|             }  | 
|   | 
|             var tickets = model.GetTicketCost(model.currentDungeon.mapId, model.currentDungeon.lineId);  | 
|             var ticketsOwn = playerPack.GetItemCountByID(PackType.Item, tickets.id);  | 
|             if (ticketsOwn < tickets.count)  | 
|             {  | 
|                 error = 3;  | 
|                 return false;  | 
|             }  | 
|   | 
|             var sweepCost = model.GetSweepCost(model.currentDungeon);  | 
|             var itemOwn = playerPack.GetItemCountByID(PackType.Item, sweepCost.id);  | 
|             if (itemOwn < sweepCost.count)  | 
|             {  | 
|                 error = 4;  | 
|                 return false;  | 
|             }  | 
|   | 
|             error = 0;  | 
|             return true;  | 
|         }  | 
|   | 
|   | 
|   | 
|     }  | 
|   | 
| }  | 
|   | 
|   | 
|   | 
|   |