lcy
6 天以前 58dc264634aceec6203a8edfa997563068095bf5
136 战锤秘境 支持界面切出,结算弹窗修改,接入部分战斗表现
4个文件已修改
4个文件已添加
518 ■■■■ 已修改文件
Main/System/Battle/BattleField/BoneBattleField.cs 85 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BoneFieldBattleWin.cs 260 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/ChallengeTab/ChallengeTabWin.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Settlement/BattleSettlementManager.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Settlement/BoneBattleFailWin.cs 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Settlement/BoneBattleFailWin.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Settlement/BoneBattleVictoryWin.cs 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Settlement/BoneBattleVictoryWin.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleField/BoneBattleField.cs
@@ -1,24 +1,14 @@
using System;
using LitJson;
using UnityEngine;
using System.Collections.Generic;
using System.Linq;
public class BoneBattleField : BattleField
{
    protected int chapter;//   章节
    protected int wave;//  波数
    protected int level;// 关卡
    protected JsonData extendData;
    protected MainChapterConfig chapterConfig;
    protected MainLevelConfig levelConfig;
    public BoneBattleField(string _guid) : base(_guid)
    {
    }
    public override void Init(int MapID, int FuncLineID, JsonData _extendData,
@@ -26,22 +16,12 @@
    {
        base.Init(MapID, FuncLineID, extendData, _redTeamList, _blueTeamList, turnMax);
        chapter = FuncLineID / 10000;
        wave = MapID == 1 ? FuncLineID % 100 : 1;//第几波怪
        level = (FuncLineID % 10000) / 100;
        int level = FuncLineID;// 关卡
        extendData = _extendData;
        chapterConfig = MainChapterConfig.Get(chapter);
        levelConfig = MainLevelConfig.Get(level);
        SetBattleMode(BattleMode.Record);
    }
    public override void Release()
    {
        base.Release();
    }
    public override void AutoSetBattleMode()
    {
@@ -81,25 +61,15 @@
    public override void WhaleFall()
    {
        UIManager.Instance.CloseWindow<StoryBossBattleWin>();
        AutoFightModel.Instance.isPause = false;
        Destroy();
        UIManager.Instance.OpenWindow<BoneFieldWin>();
        if (UIManager.Instance.IsOpened<BoneFieldBattleWin>())
        {
            UIManager.Instance.CloseWindow<BoneFieldBattleWin>();
            UIManager.Instance.OpenWindow<BoneFieldWin>();
        }
    }
    public override void HaveRest()
    {
        //  主线BOSS战斗没有休息
    }
    // public override void OnBattleEnd(JsonData turnFightStateData)
    // {
    //     base.OnBattleEnd(turnFightStateData);
    //     // HaveRest();
    // }
    public override void Run()
    {
@@ -115,7 +85,7 @@
    {
        if (IsBattleFinish)
            return;
        //  不要调用base的函数
        BattleManager.Instance.DistributeNextReportPackage(guid);
    }
@@ -128,6 +98,39 @@
            fsBattleWin = UIManager.Instance.OpenWindow<BoneFieldBattleWin>();
        }
        fsBattleWin.SetBattleField(this);
        UIManager.Instance.CloseWindow<BoneFieldWin>();
        if (UIManager.Instance.IsOpened<BoneFieldWin>())
        {
            UIManager.Instance.CloseWindow<BoneFieldWin>();
        }
    }
    public NPCLineupConfig GetBossLineupConfig()
    {
        if (!DungeonConfig.TryGetDungeonID(MapID, FuncLineID, out int dungeonID))
            return null;
        if (!DungeonConfig.HasKey(dungeonID))
            return null;
        int[] lineupIDList = DungeonConfig.Get(dungeonID).LineupIDList;
        if (lineupIDList.IsNullOrEmpty())
            return null;
        int lineupID = lineupIDList[0];
        if (!NPCLineupConfig.HasKey(lineupID))
            return null;
        NPCLineupConfig nPCLineupConfig = NPCLineupConfig.Get(lineupID);
        return nPCLineupConfig;
    }
    public override BattleObject FindBoss()
    {
        var config = GetBossLineupConfig();
        if (config != null)
        {
            int bossId = config.BossID;
            BattleObject bo = battleObjMgr.allBattleObjDict.Values.FirstOrDefault(bo => bo.teamHero.NPCID == bossId);
            return bo;
        }
        return null;
    }
}
Main/System/Battle/BoneFieldBattleWin.cs
@@ -1,53 +1,39 @@
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class BoneFieldBattleWin : UIBase
{
    // 组件引用
    [SerializeField] Transform transButtons;
    public Transform mountPoint;
    private BattleRootNode battleRootNode = null;
    private BoneBattleField battleField;
    [SerializeField] private Button btnSpeed;
    [SerializeField] private Text textSpeed;
    private BattleField battleField;
    [SerializeField] private Button btnPass;
    [SerializeField]
    private Button btnSpeed;
    [SerializeField]
    private Text textSpeed;
    [SerializeField]
    private Button btnPass;
    [SerializeField]
    private Button btnPause;
    [SerializeField] private Button btnPause;
    public BossLifeBar bossLifeBar;
    public SkillWordCell[] skillWordCells;
    public BossHeadCell bossHeadCell;
    public Text txtBossName;
    public Text txtBattleRound;
    public TotalDamageDisplayer totalDamageDisplayer;
    // public SkillTips skillTipsRed;
    // public SkillTips skillTipsBlue;
    private BattleObject bossBattleObject = null;
    // [SerializeField] public List<BattleBuffCell> buffCells;
    // 生命周期
    protected override void InitComponent()
    {
        base.InitComponent();
        // 初始化组件引用 绑定按钮等UI组件事件
        btnSpeed.AddListener(ChangeSpeed);
        btnPass.AddListener(OnClickPass);
        btnPause.AddListener(OnClickPause);
    }
@@ -55,7 +41,6 @@
    {
        if (null == battleField)
            return;
        battleField.IsPause = !battleField.IsPause;
    }
@@ -63,7 +48,6 @@
    {
        if (null == battleField)
            return;
        battleField.ForceFinish();
    }
@@ -71,7 +55,6 @@
    {
        if (null == battleField)
            return;
        BattleManager.Instance.speedIndex = (BattleManager.Instance.speedIndex + 1) % BattleManager.Instance.speedGear.Length;
        battleField.SetSpeedRatio(BattleManager.Instance.speedGear[BattleManager.Instance.speedIndex]);
        textSpeed.text = (BattleManager.Instance.speedIndex + 1).ToString();
@@ -81,32 +64,166 @@
    {
        base.OnPreOpen();
        // SetBattleField(BattleManager.Instance.storyBattleField);
        MainWin.TabChangeEvent += OnTabChangeEvent;
        BattleManager.Instance.onBattleFieldCreate += OnCreateBattleField;
        UIManager.Instance.CloseWindow<MainWin>();
        EventBroadcast.Instance.AddListener<BattleDmgInfo>(EventName.BATTLE_DAMAGE_TAKEN, OnDamageTaken);
        EventBroadcast.Instance.AddListener<string, SkillConfig, TeamHero>(EventName.BATTLE_CAST_SKILL, OnCastSkill);
        BattleManager.Instance.storyBattleField.IsPause = true;
        bool isOpenBattleChangeTab = IsOpenBattleChangeTab();
        transButtons.localPosition = new Vector3(0, isOpenBattleChangeTab ? 200 : 0, 0);
        if (isOpenBattleChangeTab)
        {
            UIManager.Instance.GetUI<MainWin>()?.CloseSubUI();
        }
        else
        {
            UIManager.Instance.CloseWindow<MainWin>();
        }
    }
    protected override void OnPreClose()
    {
        base.OnPreClose();
        UIManager.Instance.CloseWindow<BattleHUDWin>();
        MainWin.TabChangeEvent -= OnTabChangeEvent;
        BattleManager.Instance.onBattleFieldCreate -= OnCreateBattleField;
        EventBroadcast.Instance.RemoveListener<BattleDmgInfo>(EventName.BATTLE_DAMAGE_TAKEN, OnDamageTaken);
        EventBroadcast.Instance.RemoveListener<string, SkillConfig, TeamHero>(EventName.BATTLE_CAST_SKILL, OnCastSkill);
        UIManager.Instance.CloseWindow<BattleHUDWin>();
        if (!UIManager.Instance.IsOpened<MainWin>())
        bool isOpenBattleChangeTab = IsOpenBattleChangeTab();
        if (isOpenBattleChangeTab)
        {
            UIManager.Instance.GetUI<MainWin>()?.RestoreSubUI();
        }
        else
        {
            UIManager.Instance.OpenWindow<MainWin>();
        }
        if (bossBattleObject != null)
        {
            if (bossBattleObject.buffMgr != null)
            {
                bossBattleObject.buffMgr.onBuffChanged -= OnBuffChanged;
            }
            bossBattleObject = null;
        }
        if (battleField != null)
        {
            battleField.OnRoundChange -= OnRoundChange;
            battleField = null;
        }
    }
    private void OnTabChangeEvent()
    {
        UIManager.Instance.CloseWindow<BoneFieldBattleWin>();
    }
    private void OnCastSkill(string guid, SkillConfig skillConfig, TeamHero teamHero)
    {
        if (battleField == null)
            return;
        if (battleField.guid != guid)
            return;
        BattleObject battleObject = battleField.battleObjMgr.GetBattleObject(teamHero.ObjID);
        bool isRed = battleObject.Camp == BattleCamp.Red;
        // SkillTips tips = isRed ? skillTipsRed : skillTipsBlue;
        // tips.PlayMotion(battleField, isRed, teamHero, skillConfig);
    }
    private void OnCreateBattleField(string arg1, BattleField field)
    {
        if (field.GetType() == battleField.GetType())
        {
            SetBattleField(field);
            SetBattleField(field as BoneBattleField);
        }
    }
    protected override void OnOpen()
    public void Display()
    {
        base.OnOpen();
        NPCLineupConfig lineupConfig = battleField.GetBossLineupConfig();
        if (bossBattleObject != null)
        {
            if (bossBattleObject.buffMgr != null)
            {
                bossBattleObject.buffMgr.onBuffChanged -= OnBuffChanged;
            }
            bossBattleObject = null;
        }
        bossBattleObject = battleField.FindBoss();
        DisplaySkillWordsList(lineupConfig);
        if (null != bossBattleObject)
        {
            TeamHero teamHero = bossBattleObject.teamHero;
            bossHeadCell.SetTeamHero(teamHero);
            txtBossName.text = teamHero.name;
            NPCConfig npcConfig = NPCConfig.Get(teamHero.NPCID);
            bossLifeBar.SetBaseInfo(Mathf.Max(1, npcConfig.LifeBarCount), (ulong)teamHero.curHp, (ulong)teamHero.maxHp);
            bossBattleObject.buffMgr.onBuffChanged -= OnBuffChanged;
            bossBattleObject.buffMgr.onBuffChanged += OnBuffChanged;
        }
        else
        {
            bossHeadCell.SetTeamHero(null);
            txtBossName.text = string.Empty;
            bossLifeBar.SetBaseInfo(2, 2, 2);
            Debug.LogError("找不到boss");
        }
        OnRoundChange(battleField.round, battleField.turnMax);
        OnBuffChanged();
        totalDamageDisplayer.SetActive(false);
        // skillTipsBlue.SetActive(false);
        // skillTipsRed.SetActive(false);
    }
    private void OnBuffChanged()
    {
        var buffList = new List<HB428_tagSCBuffRefresh>();
        if (null != bossBattleObject)
        {
            buffList = bossBattleObject.buffMgr.GetBuffList();
        }
        // RefreshBuff(buffList);
    }
    private void RefreshHP()
    {
        if (null != bossBattleObject)
        {
            TeamHero teamHero = bossBattleObject.teamHero;
            bossLifeBar.Show((ulong)teamHero.curHp, (ulong)teamHero.maxHp);
        }
    }
    private void OnDamageTaken(BattleDmgInfo info)
    {
        if (info.battleFieldGuid != battleField.guid)
            return;
        if (info.hurtObj.ObjID == bossBattleObject.ObjID)
        {
            // Update the boss's health bar
            RefreshHP();
        }
        totalDamageDisplayer.SetDamage(info);
    }
    protected override void OnClose()
@@ -132,8 +249,14 @@
        base.CompleteClose();
    }
    public void SetBattleField(BattleField _battleField)
    public void SetBattleField(BoneBattleField _battleField)
    {
        if (battleField != null)
        {
            battleField.OnRoundChange -= OnRoundChange;
            battleField = null;
        }
        battleField = _battleField;
        if (battleRootNode != null)
        {
@@ -156,7 +279,70 @@
        ui.SetBattleField(battleField);
        battleField.UpdateCanvas(canvas);
        Display();
        battleField.OnRoundChange += OnRoundChange;
        textSpeed.text = (BattleManager.Instance.speedIndex + 1).ToString();
    }
    public void DisplaySkillWordsList(NPCLineupConfig lineUPConfig)
    {
        if (skillWordCells.IsNullOrEmpty())
            return;
        if (null == lineUPConfig)
            return;
        for (int i = 0; i < skillWordCells.Length; i++)
        {
            if (i < lineUPConfig.SkillIDExList.Length)
            {
                skillWordCells[i].SetActive(true);
                int skillID = lineUPConfig.SkillIDExList[i];
                skillWordCells[i].Init(skillID, () =>
                {
                    SmallTipWin.showText = Language.Get("SmallTipFomat", SkillConfig.Get(skillID)?.SkillName, SkillConfig.Get(skillID)?.Description);
                    SmallTipWin.worldPos = CameraManager.uiCamera.ScreenToWorldPoint(Input.mousePosition);
                    SmallTipWin.isDownShow = true;
                    UIManager.Instance.OpenWindow<SmallTipWin>();
                });
            }
            else
            {
                skillWordCells[i].SetActive(false);
            }
        }
    }
    // public void RefreshBuff(List<HB428_tagSCBuffRefresh> datas)
    // {
    //     if (buffCells.IsNullOrEmpty())
    //         return;
    //     for (int i = 0; i < buffCells.Count; i++)
    //     {
    //         if (i < datas.Count)
    //         {
    //             buffCells[i].SetActive(true);
    //             HB428_tagSCBuffRefresh buffData = datas[i];
    //             buffCells[i].Init(buffData, () =>
    //             {
    //                 //  点击buff图标 显示buff描述/当前身上所有buff
    //             });
    //         }
    //         else
    //         {
    //             buffCells[i].SetActive(false);
    //         }
    //     }
    // }
    private void OnRoundChange(int round, int maxRound)
    {
        txtBattleRound.text = string.Format("{0}/{1}", round, maxRound);
    }
    bool IsOpenBattleChangeTab()
    {
        return FuncOpen.Instance.IsFuncOpen(ArenaManager.Instance.BattleChangeTabFuncId);
    }
}
Main/System/ChallengeTab/ChallengeTabWin.cs
@@ -5,7 +5,7 @@
{
    [SerializeField] ChallengeTabButton btnBoneField;
    [SerializeField] ChallengeTabButton btnArena;
    protected override void InitComponent()
    {
        base.InitComponent();
@@ -126,7 +126,24 @@
            UIManager.Instance.CloseWindow<ChallengeTabWin>();
            if (!FuncOpen.Instance.IsFuncOpen(funcId, true))
                return;
            UIManager.Instance.OpenWindow<BoneFieldWin>();
            BattleField battleField = BattleManager.Instance.GetBattleFieldByMapID(30010);
            if (battleField != null)
            {
                BoneFieldBattleWin battleWin;
                if (!UIManager.Instance.IsOpened<BoneFieldBattleWin>())
                {
                    battleWin = UIManager.Instance.OpenWindow<BoneFieldBattleWin>();
                }
                else
                {
                    battleWin = UIManager.Instance.GetUI<BoneFieldBattleWin>();
                }
                battleWin.SetBattleField(battleField as BoneBattleField);
            }
            else
            {
                UIManager.Instance.OpenWindow<BoneFieldWin>();
            }
        });
    }
Main/System/Settlement/BattleSettlementManager.cs
@@ -38,6 +38,9 @@
            case "ArenaBattleField":
                PopupWindowsProcessor.Instance.Add(isWin ? "ArenaBattleVictoryWin" : "ArenaBattleFailWin", false);
                break;
            case "BoneBattleField":
                PopupWindowsProcessor.Instance.Add(isWin ? "BoneBattleVictoryWin" : "BoneBattleFailWin", false);
                break;
            default:
                PopupWindowsProcessor.Instance.Add(isWin ? "BattleVictoryWin" : "BattleFailWin", false);
                break;
@@ -59,6 +62,16 @@
                    UIManager.Instance.OpenWindow<ArenaBattleFailWin>();
                }
                break;
            case "BoneBattleField":
                if (isWin)
                {
                    UIManager.Instance.OpenWindow<BoneBattleVictoryWin>();
                }
                else
                {
                    UIManager.Instance.OpenWindow<BoneBattleFailWin>();
                }
                break;
            default:
                if (isWin)
                {
Main/System/Settlement/BoneBattleFailWin.cs
New file
@@ -0,0 +1,41 @@
using System;
using System.Collections.Generic;
using Cysharp.Threading.Tasks;
using LitJson;
using UnityEngine;
using UnityEngine.UI;
//战场结算界面,存在多个的情况
public class BoneBattleFailWin : UIBase
{
    [SerializeField] TextEx txtFuncName;
    [SerializeField] Button tipEquipBtn;
    [SerializeField] Button tipHeroPosBtn;
    string battleName = "BoneBattleField";
    protected override void InitComponent()
    {
        tipEquipBtn.AddListener(() =>
        {
            CloseWindow();
        });
        tipHeroPosBtn.AddListener(() =>
        {
            CloseWindow();
            UIManager.Instance.OpenWindow<HeroPosWin>();
        });
    }
    protected override void OnPreOpen()
    {
        int funcId = BoneFieldManager.Instance.funcId;
        txtFuncName.text = FuncOpenLVConfig.HasKey(funcId) ? FuncOpenLVConfig.Get(funcId).Name : string.Empty;
    }
    protected override void OnPreClose()
    {
        BattleSettlementManager.Instance.WinShowOver(battleName);
    }
}
Main/System/Settlement/BoneBattleFailWin.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 67d3854b366b0f64cb73de975d6aa391
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/Settlement/BoneBattleVictoryWin.cs
New file
@@ -0,0 +1,76 @@
using System.Collections.Generic;
using Cysharp.Threading.Tasks;
using UnityEngine;
public class BoneBattleVictoryWin : UIBase
{
    [SerializeField] TextEx txtFuncName;
    [SerializeField] ScrollerController scroller;
    string battleName = "BoneBattleField";
    protected override void OnPreOpen()
    {
        scroller.OnRefreshCell += OnRefreshCell;
        CreateScroller();
        int funcId = BoneFieldManager.Instance.funcId;
        txtFuncName.text = FuncOpenLVConfig.HasKey(funcId) ? FuncOpenLVConfig.Get(funcId).Name : string.Empty;
    }
    protected override void OnPreClose()
    {
        scroller.OnRefreshCell -= OnRefreshCell;
        BattleSettlementManager.Instance.WinShowOver(battleName);
    }
    List<Item> showItems = new List<Item>();
    void CreateScroller()
    {
        var jsonData = BattleSettlementManager.Instance.GetBattleSettlement(battleName);
        if (jsonData == null)
        {
            DelayCloseWindow().Forget();
            return;
        }
        showItems.Clear();
        scroller.Refresh();
        if (!jsonData.ContainsKey("itemInfo"))
        {
            return;
        }
        var resultStr = jsonData["itemInfo"];
        for (int i = 0; i < resultStr.Count; i++)
        {
            showItems.Add(new Item((int)resultStr[i]["ItemID"], (long)resultStr[i]["Count"]));
        }
        showItems.Sort(SortItem);
        for (int i = 0; i < showItems.Count; i++)
        {
            scroller.AddCell(ScrollerDataType.Header, i);
        }
        scroller.Restart();
    }
    int SortItem(Item itemA, Item itemB)
    {
        var itemConfigA = ItemConfig.Get(itemA.id);
        var itemConfigB = ItemConfig.Get(itemB.id);
        return itemConfigB.ItemColor - itemConfigA.ItemColor;
    }
    void OnRefreshCell(ScrollerDataType type, CellView cell)
    {
        var _cell = cell as SettlementAwardCell;
        var item = showItems[cell.index];
        _cell?.Display(item.id, item.countEx);
    }
}
Main/System/Settlement/BoneBattleVictoryWin.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 8c57d47824f8a4e4fb5f62b5cbe99f86
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant: