using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class BoneFieldBattleWin : BaseBattleWin { [SerializeField] Transform transButtons; [SerializeField] public BossLifeBar bossLifeBar; [SerializeField] public SkillWordCell[] skillWordCells; [SerializeField] public BossHeadCell bossHeadCell; [SerializeField] public Text txtBossName; private BattleObject bossBattleObject = null; [SerializeField] public List buffCells; [SerializeField] HeroCountryComponent myCountry; [SerializeField] HeroCountryComponent enemyCountry; protected override void OnPreOpen() { base.OnPreOpen(); MainWin.TabChangeEvent += OnTabChangeEvent; bool isOpenBattleChangeTab = IsOpenBattleChangeTab(); transButtons.localPosition = new Vector3(0, isOpenBattleChangeTab ? 130 : 0, 0); if (isOpenBattleChangeTab) { UIManager.Instance.GetUI()?.CloseSubUI(); } else { UIManager.Instance.CloseWindow(); } } protected override void OnPreClose() { base.OnPreClose(); MainWin.TabChangeEvent -= OnTabChangeEvent; bool isOpenBattleChangeTab = IsOpenBattleChangeTab(); if (isOpenBattleChangeTab) { UIManager.Instance.GetUI()?.RestoreSubUI(); } else { UIManager.Instance.OpenWindow(); } if (bossBattleObject != null) { if (bossBattleObject.buffMgr != null) { bossBattleObject.buffMgr.onBuffChanged -= OnBuffChanged; } bossBattleObject = null; } } private void OnTabChangeEvent() { UIManager.Instance.CloseWindow(); } protected override void OnCreateBattleField(string guid, BattleField field) { if (field is BoneBattleField) { SetBattleField(field); } } protected override void RefreshSpecific() { BoneBattleField boneField = battleField as BoneBattleField; if (boneField == null) return; NPCLineupConfig lineupConfig = boneField.GetBossLineupConfig(); if (bossBattleObject != null) { if (bossBattleObject.buffMgr != null) { bossBattleObject.buffMgr.onBuffChanged -= OnBuffChanged; } bossBattleObject = null; } bossBattleObject = boneField.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(); // 获取我方(红方)队伍数据 List myTeam = battleField.battleObjMgr.GetBattleObjList(BattleCamp.Red); // 获取敌方(蓝方)队伍数据 List enemyTeam = battleField.battleObjMgr.GetBattleObjList(BattleCamp.Blue); myCountry.RefreshOnTeamCountry(GetTeamHeroList(myTeam), true); enemyCountry.RefreshOnTeamCountry(GetTeamHeroList(enemyTeam), true); } private void OnBuffChanged() { var buffList = new List(); 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); } } protected override void OnDamageTaken(BattleDmgInfo info) { base.OnDamageTaken(info); if (battleField == null || info.battleFieldGuid != battleField.guid) return; if (bossBattleObject != null && info.hurtObj.ObjID == bossBattleObject.ObjID) { RefreshHP(); } } protected override void OnClose() { base.OnClose(); } 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(); }); } else { skillWordCells[i].SetActive(false); } } } public void RefreshBuff(List 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); } } } bool IsOpenBattleChangeTab() { return FuncOpen.Instance.IsFuncOpen(ArenaManager.Instance.BattleChangeTabFuncId); } List GetTeamHeroList(List teams) { List teamHeroes = new List(); if (teams.IsNullOrEmpty()) return teamHeroes; foreach (var item in teams) { teamHeroes.Add(item.teamHero); } return teamHeroes; } }