using System.Collections.Generic;
|
using LitJson;
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
public class TianziBillboradBattleWin : BaseBattleWin
|
{
|
[SerializeField] Transform transButtons;
|
[SerializeField] public TianziDamageBar tianziDamageBar;
|
[SerializeField] public SkillWordCell[] skillWordCells;
|
[SerializeField] public BossHeadCell bossHeadCell;
|
[SerializeField] public Text txtBossName;
|
[SerializeField] HeroCountryComponent myCountry;
|
[SerializeField] HeroCountryComponent enemyCountry;
|
private BattleObject bossBattleObject = null;
|
[SerializeField] public List<BattleBuffCell> buffCells;
|
[SerializeField] RectTransform rectBoxEnd;
|
[SerializeField] UIEffectPlayer uiEffectPlayer;
|
|
|
protected override void OnPreOpen()
|
{
|
base.OnPreOpen();
|
tianziDamageBar.StageUp += OnStageUp;
|
tianziDamageBar.ValueChangeAction += OnValueChangeAction;
|
tianziDamageBar.ChangeEndAction += OnChangeEndAction;
|
TianziBillboradManager.Instance.OnUpdateBarInfoEvent += OnUpdateBarInfoEvent;
|
MainWin.TabChangeEvent += OnTabChangeEvent;
|
bool isOpenBattleChangeTab = IsOpenBattleChangeTab();
|
transButtons.localPosition = new Vector3(0, isOpenBattleChangeTab ? 130 : 0, 0);
|
if (isOpenBattleChangeTab)
|
{
|
UIManager.Instance.GetUI<MainWin>()?.CloseSubUI();
|
}
|
else
|
{
|
UIManager.Instance.CloseWindow<MainWin>();
|
}
|
}
|
|
protected override void OnPreClose()
|
{
|
base.OnPreClose();
|
tianziDamageBar.StageUp -= OnStageUp;
|
tianziDamageBar.ValueChangeAction -= OnValueChangeAction;
|
tianziDamageBar.ChangeEndAction -= OnChangeEndAction;
|
TianziBillboradManager.Instance.OnUpdateBarInfoEvent -= OnUpdateBarInfoEvent;
|
MainWin.TabChangeEvent -= OnTabChangeEvent;
|
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;
|
}
|
|
}
|
|
private void OnUpdateBarInfoEvent(ulong loaclNowHunt, ulong loaclMaxHp, int loaclHpNum)
|
{
|
tianziDamageBar.Show(loaclNowHunt, loaclMaxHp, loaclHpNum);
|
}
|
|
|
|
private void OnStageUp(int stage)
|
{
|
GameObject hero = bossBattleObject.heroGo;
|
if (hero == null || stage <= 1)
|
return;
|
uiEffectPlayer.Play();
|
|
GameObject prefab = UIUtility.CreateWidget("TianziBillboradBox", "TianziBillboradBox");
|
prefab.transform.SetParentEx(hero.transform, Vector3.zero, Quaternion.identity, Vector3.one);
|
TianziBillboradBox boxAnimator = prefab.GetComponent<TianziBillboradBox>();
|
if (boxAnimator != null)
|
{
|
Vector3 startPos = hero.transform.position;
|
Vector3 endPos = rectBoxEnd.position;
|
boxAnimator.StartAnimation(startPos, endPos);
|
}
|
else
|
{
|
Destroy(prefab);
|
}
|
}
|
|
private void OnTabChangeEvent()
|
{
|
CloseWindow();
|
}
|
|
protected override void OnCreateBattleField(string guid, BattleField field)
|
{
|
if (field is TianziBillboradBattleField)
|
{
|
SetBattleField(field);
|
}
|
}
|
|
protected override void RefreshSpecific()
|
{
|
DestroyExistingTianziBillboradBoxes();
|
TianziBillboradBattleField boneField = battleField as TianziBillboradBattleField;
|
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);
|
|
|
tianziDamageBar.Init();
|
|
if (null != bossBattleObject)
|
{
|
TeamHero teamHero = bossBattleObject.teamHero;
|
bossHeadCell.SetTeamHero(teamHero);
|
txtBossName.text = teamHero.name;
|
NPCConfig npcConfig = NPCConfig.Get(teamHero.NPCID);
|
bossBattleObject.buffMgr.onBuffChanged -= OnBuffChanged;
|
bossBattleObject.buffMgr.onBuffChanged += OnBuffChanged;
|
}
|
else
|
{
|
bossHeadCell.SetTeamHero(null);
|
txtBossName.text = string.Empty;
|
Debug.LogError("找不到boss");
|
}
|
|
OnRoundChange(battleField.round, battleField.turnMax); // 确保回合显示被调用
|
OnBuffChanged();
|
|
// 获取我方(红方)队伍数据
|
List<BattleObject> myTeam = battleField.battleObjMgr.GetBattleObjList(BattleCamp.Red);
|
// 获取敌方(蓝方)队伍数据
|
List<BattleObject> enemyTeam = battleField.battleObjMgr.GetBattleObjList(BattleCamp.Blue);
|
|
myCountry.RefreshOnTeamCountry(GetTeamHeroList(myTeam), true);
|
enemyCountry.RefreshOnTeamCountry(GetTeamHeroList(enemyTeam), true);
|
}
|
|
private void DestroyExistingTianziBillboradBoxes()
|
{
|
// 查找场景中所有存在的TianziBillboradBox实例
|
TianziBillboradBox[] existingBoxes = FindObjectsOfType<TianziBillboradBox>();
|
foreach (TianziBillboradBox box in existingBoxes)
|
{
|
if (box != null && box.gameObject != null)
|
{
|
Destroy(box.gameObject);
|
}
|
}
|
}
|
|
private void OnBuffChanged()
|
{
|
var buffList = new List<HB428_tagSCBuffRefresh>();
|
if (null != bossBattleObject)
|
{
|
buffList = bossBattleObject.buffMgr.GetBuffList();
|
}
|
RefreshBuff(buffList);
|
}
|
|
|
|
private void OnValueChangeAction(float nowValue, int CurrentStage)
|
{
|
if (bossBattleObject == null || bossBattleObject.heroInfoBar == null)
|
return;
|
bossBattleObject.heroInfoBar.UpdateHP(nowValue);
|
//Debug.Log($"TianziDamageBar nowValue {nowValue} 时间: {DateTime.Now:HH:mm:ss}");
|
}
|
|
private void OnChangeEndAction(ulong nowHunt, ulong nowHpMax)
|
{
|
if (bossBattleObject == null || bossBattleObject.heroInfoBar == null)
|
return;
|
if (nowHpMax > 0)
|
{
|
float percentage = Mathf.Clamp(nowHunt, 0, nowHpMax) / (float)nowHpMax;
|
bossBattleObject.heroInfoBar.UpdateHP(percentage);
|
//Debug.Log($"TianziDamageBar nowValue {percentage} 时间: {DateTime.Now:HH:mm:ss}");
|
}
|
}
|
|
|
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);
|
}
|
}
|
}
|
|
bool IsOpenBattleChangeTab()
|
{
|
return FuncOpen.Instance.IsFuncOpen(ArenaManager.Instance.BattleChangeTabFuncId);
|
}
|
|
List<TeamHero> GetTeamHeroList(List<BattleObject> teams)
|
{
|
List<TeamHero> teamHeroes = new List<TeamHero>();
|
if (teams.IsNullOrEmpty())
|
return teamHeroes;
|
foreach (var item in teams)
|
{
|
teamHeroes.Add(item.teamHero);
|
}
|
return teamHeroes;
|
|
}
|
}
|