少年修仙传客户端代码仓库
client_linchunjie
2018-08-27 d106f11e7f44c748f595da36e0cdfd54849649e6
System/Dungeon/DungeonSweepResultWin.cs
@@ -1,255 +1,255 @@
//--------------------------------------------------------
//    [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<DungeonModel>(); } }
        PlayerPackModel playerPack { get { return ModelCenter.Instance.GetModel<PlayerPackModel>(); } }
        GetItemPathModel getItemPath { get { return ModelCenter.Instance.GetModel<GetItemPathModel>(); } }
        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;
        }
        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<Item>();
            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<DungeonBuyTimesWin>();
                        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<RechargeTipWin>();
                                  }
                                  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;
        }
    }
}
//--------------------------------------------------------
//    [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<DungeonModel>(); } }
        PlayerPackModel playerPack { get { return ModelCenter.Instance.GetModel<PlayerPackModel>(); } }
        GetItemPathModel getItemPath { get { return ModelCenter.Instance.GetModel<GetItemPathModel>(); } }
        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;
        }
        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<Item>();
            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<DungeonBuyTimesWin>();
                        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<RechargeTipWin>();
                                  }
                                  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;
        }
    }
}