//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Wednesday, October 25, 2017 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using TableConfig; using Snxxz.UI; namespace Snxxz.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; DungeonModel model { get { return ModelCenter.Instance.GetModel(); } } PlayerPackModel playerPack { get { return ModelCenter.Instance.GetModel(); } } GetItemPathModel getItemPath { get { return ModelCenter.Instance.GetModel(); } } DailyQuestModel dailyQuestModel { get { return ModelCenter.Instance.GetModel(); } } #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; } 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.GetDungeonTicketCost(model.currentDungeon.mapId, model.currentDungeon.lineId); if (tickets.id > 0) { m_DungeonTicket.SetItem(tickets); m_DungeonTicket.gameObject.SetActive(true); } else { m_DungeonTicket.gameObject.SetActive(false); } var cost = model.GetSweepCost(model.currentDungeon); m_SweepCost.SetItem(cost); } private void DrawItems() { var serveritems = model.dungeonResult.itemInfo; var items = new List(); for (int i = 0; i < serveritems.Length; i++) { var serverItem = serveritems[i]; items.Add(new Item(serverItem.ItemID, serverItem.Count)); } for (int i = 0; i < itemBehaviours1.Length; i++) { var behaviour = itemBehaviours1[i]; if (i < items.Count) { behaviour.gameObject.SetActive(true); var reward = items[i]; behaviour.SetItem(reward); } else { behaviour.gameObject.SetActive(false); } } if (items.Count > itemBehaviours1.Length) { m_ContainerReward2.gameObject.SetActive(true); var startIndex = itemBehaviours1.Length; for (int i = 0; i < itemBehaviours2.Length; i++) { var behaviour = itemBehaviours2[i]; if (i + startIndex < items.Count) { behaviour.gameObject.SetActive(true); var reward = items[i + startIndex]; behaviour.SetItem(reward); } else { behaviour.gameObject.SetActive(false); } } } else { m_ContainerReward2.gameObject.SetActive(false); } } private void ReSweep() { var error = 0; if (TestSweep(out error)) { model.SweepDungeon(model.currentDungeon); } else { switch (error) { case 1: WindowCenter.Instance.Open(); break; case 2: SysNotifyMgr.Instance.ShowTip("Multiple_Finish"); break; case 3: var tickets = model.GetDungeonTicketCost(model.currentDungeon.mapId, model.currentDungeon.lineId); getItemPath.SetChinItemModel(tickets.id); break; case 4: var cost = model.GetSweepCost(model.currentDungeon); var itemOwn = playerPack.GetItemCountByID(PackType.rptItem, cost.id); var moneyNeed = GeneralConfig.Instance.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.Gold + PlayerDatas.Instance.baseData.GoldPaper; if (moneyNeed > moneyOwn) { WindowCenter.Instance.Open(); } else { model.SweepDungeon(model.currentDungeon); } } } ); break; case 5: SysNotifyMgr.Instance.ShowTip("SweepFB_1"); break; } } } private bool TestSweep(out int error) { var dataMapId = model.GetDungeonDataIdByMapId(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.GetDungeonTicketCost(model.currentDungeon.mapId, model.currentDungeon.lineId); var ticketsOwn = playerPack.GetItemCountByID(PackType.rptItem, tickets.id); if (ticketsOwn < tickets.count) { error = 3; return false; } var sweepCost = model.GetSweepCost(model.currentDungeon); var itemOwn = playerPack.GetItemCountByID(PackType.rptItem, sweepCost.id); if (itemOwn < sweepCost.count) { error = 4; return false; } error = 0; return true; } } }