| Main/System/Battle/ArenaBattleWin.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/Battle/BaseBattleWin.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/Battle/BaseBattleWin.cs.meta | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/Battle/BoneFieldBattleWin.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| Main/System/Battle/StoryBossBattleWin.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
Main/System/Battle/ArenaBattleWin.cs
@@ -1,20 +1,10 @@ using System.Collections.Generic; using LitJson; using UnityEngine; using UnityEngine.UI; public class ArenaBattleWin : UIBase public class ArenaBattleWin : BaseBattleWin { // 组件引用 [SerializeField] Transform mountPoint; [SerializeField] Transform transButtons; [SerializeField] Button btnSpeed; [SerializeField] Text textSpeed; [SerializeField] Button btnPass; [SerializeField] Button btnPause; private BattleRootNode battleRootNode = null; private BattleField battleField; [SerializeField] HeroCountryComponent myCountry; [SerializeField] TextEx txtMyLV; [SerializeField] TextEx txtMyName; @@ -33,55 +23,30 @@ [SerializeField] AvatarCell enemyAvatarCell; [SerializeField] List<ArenaHeroHead> enemyHeroHeads; [SerializeField] TextEx txtWaveInfo; public TotalDamageDisplayer totalDamageDisplayer; public SkillTips skillTipsRed; public SkillTips skillTipsBlue; // 生命周期 protected override void InitComponent() protected override void RegisterBattleEvents() { base.InitComponent(); // 初始化组件引用 绑定按钮等UI组件事件 btnSpeed.AddListener(ChangeSpeed); btnPass.AddListener(OnClickPass); btnPause.AddListener(OnClickPause); base.RegisterBattleEvents(); EventBroadcast.Instance.AddListener<string, JsonData>(EventName.BATTLE_END, OnBattleEnd); } private void OnClickPause() protected override void UnregisterBattleEvents() { if (null == battleField) return; battleField.IsPause = !battleField.IsPause; base.UnregisterBattleEvents(); EventBroadcast.Instance.RemoveListener<string, JsonData>(EventName.BATTLE_END, OnBattleEnd); } private void OnClickPass() protected virtual void OnBattleEnd(string guid, JsonData endData) { if (null == battleField) return; battleField.ForceFinish(); } private void ChangeSpeed() { 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(); if (battleField != null && guid == battleField.guid) { DisplayHpInfo(); } } protected override void OnPreOpen() { base.OnPreOpen(); MainWin.TabChangeEvent += OnTabChangeEvent; BattleManager.Instance.onBattleFieldCreate += OnCreateBattleField; EventBroadcast.Instance.AddListener<BattleDmgInfo>(EventName.BATTLE_DAMAGE_TAKEN, OnDamageTaken); EventBroadcast.Instance.AddListener<string, SkillConfig, TeamHero>(EventName.BATTLE_CAST_SKILL, OnCastSkill); EventBroadcast.Instance.AddListener<string, JsonData>(EventName.BATTLE_END, OnBattleEnd); BattleManager.Instance.storyBattleField.IsPause = true; bool isOpenBattleChangeTab = IsOpenBattleChangeTab(); transButtons.localPosition = new Vector3(0, isOpenBattleChangeTab ? 130 : 0, 0); if (isOpenBattleChangeTab) @@ -97,14 +62,7 @@ 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); EventBroadcast.Instance.RemoveListener<string, JsonData>(EventName.BATTLE_END, OnBattleEnd); BattleManager.Instance.storyBattleField.IsPause = false; bool isOpenBattleChangeTab = IsOpenBattleChangeTab(); if (isOpenBattleChangeTab) { @@ -121,109 +79,29 @@ UIManager.Instance.CloseWindow<ArenaBattleWin>(); } private void OnBattleEnd(string guid, JsonData endData) protected override void OnDamageTaken(BattleDmgInfo damageInfo) { if (battleField != null && guid == battleField.guid) { DisplayHpInfo(); } } private void OnDamageTaken(BattleDmgInfo damageInfo) { base.OnDamageTaken(damageInfo); if (battleField == null) return; if (damageInfo.battleFieldGuid == battleField.guid) { DisplayHpInfo(); totalDamageDisplayer.SetDamage(damageInfo); } } private void OnCreateBattleField(string arg1, BattleField field) protected override void OnCreateBattleField(string guid, BattleField field) { if (field.GetType() == battleField.GetType()) if (field is ArenaBattleField) { SetBattleField(field); } } protected override void OnClose() protected override void RefreshSpecific() { base.OnClose(); if (battleRootNode != null) { battleRootNode.transform.SetParent(Launch.Instance.transform); battleRootNode.transform.localPosition = new Vector3(-10000, -10000, 0); } if (battleField != null) { battleField.OnRoundChange -= OnRoundChange; battleField = null; } } public void SetBattleField(BattleField _battleField) { if (battleField != null) { battleField.OnRoundChange -= OnRoundChange; battleField = null; } battleField = _battleField; if (battleRootNode != null) { battleRootNode.transform.localPosition = Vector3.zero; battleRootNode.transform.SetParent(Launch.Instance.transform); } battleRootNode = battleField.battleRootNode; battleRootNode.transform.SetParent(mountPoint); battleRootNode.transform.localPosition = Vector3.zero; battleRootNode.transform.localScale = Vector3.one; BattleHUDWin ui = UIManager.Instance.GetUI<BattleHUDWin>(); if (null == ui) { ui = UIManager.Instance.OpenWindow<BattleHUDWin>(); } ui.SetBattleField(battleField); battleField.UpdateCanvas(canvas); textSpeed.text = (BattleManager.Instance.speedIndex + 1).ToString(); Refresh(); battleField.OnRoundChange -= OnRoundChange; battleField.OnRoundChange += OnRoundChange; OnRoundChange(battleField.round, battleField.turnMax); } public override void Refresh() { base.Refresh(); DisplayHpInfo(); DisplayPlayerInfo(); totalDamageDisplayer.SetActive(false); skillTipsBlue.SetActive(false); skillTipsRed.SetActive(false); } 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 DisplayHpInfo() @@ -346,13 +224,8 @@ } private void OnRoundChange(int round, int maxRound) { txtWaveInfo.text = string.Format("{0}/{1}", round, maxRound); } bool IsOpenBattleChangeTab() { return FuncOpen.Instance.IsFuncOpen(ArenaManager.Instance.BattleChangeTabFuncId); } } } Main/System/Battle/BaseBattleWin.cs
New file @@ -0,0 +1,279 @@ using UnityEngine; using UnityEngine.UI; /// <summary> /// 战斗窗口基类 /// </summary> public abstract class BaseBattleWin : UIBase { [Header("战斗场景挂载点")] [SerializeField] protected Transform mountPoint; [Header("战斗控制按钮")] [SerializeField] protected Button btnSpeed; // 速度控制 [SerializeField] protected Text textSpeed; // 速度显示 [SerializeField] protected Button btnPass; // 跳过战斗 [SerializeField] protected Button btnPause; // 暂停按钮 (BattleWin中的btnStop可对应此按钮) [Header("战斗UI组件")] [SerializeField] protected TotalDamageDisplayer totalDamageDisplayer; // 伤害统计 [SerializeField] protected SkillTips skillTipsRed; // 红方技能提示 [SerializeField] protected SkillTips skillTipsBlue; // 蓝方技能提示 [SerializeField] protected Text txtBattleRound; // 回合信息 (Arena的txtWaveInfo, Story/Bone的txtBattleRound) protected BattleRootNode battleRootNode = null; protected BattleField battleField; // 当前战斗的战场实例 protected override void InitComponent() { base.InitComponent(); // 绑定通用按钮事件 if (btnSpeed != null) btnSpeed.AddListener(ChangeSpeed); if (btnPass != null) btnPass.AddListener(OnClickPass); if (btnPause != null) btnPause.AddListener(OnClickPause); } protected override void OnPreOpen() { base.OnPreOpen(); BattleManager.Instance.onBattleFieldCreate += OnCreateBattleField; RegisterBattleEvents(); // 在打开时需要暂停主线战斗 if (BattleManager.Instance.storyBattleField != null) BattleManager.Instance.storyBattleField.IsPause = true; } protected override void OnPreClose() { base.OnPreClose(); UIManager.Instance.CloseWindow<BattleHUDWin>(); BattleManager.Instance.onBattleFieldCreate -= OnCreateBattleField; UnregisterBattleEvents(); // 在关闭时恢复主线战斗 if (BattleManager.Instance.storyBattleField != null) BattleManager.Instance.storyBattleField.IsPause = false; if (battleField != null) { battleField.OnRoundChange -= OnRoundChange; } } protected override void OnClose() { base.OnClose(); if (battleRootNode != null) { battleRootNode.transform.SetParent(Launch.Instance.transform); battleRootNode.transform.localPosition = new Vector3(-10000, -10000, 0); } battleField = null; } /// <summary> /// 通用刷新逻辑 (模板方法) /// </summary> public override void Refresh() { base.Refresh(); // 1. 执行基类通用刷新逻辑 (清空旧状态) if (totalDamageDisplayer != null) totalDamageDisplayer.SetActive(false); if (skillTipsBlue != null) skillTipsBlue.SetActive(false); if (skillTipsRed != null) skillTipsRed.SetActive(false); // 刷新速度显示 if (textSpeed != null && BattleManager.Instance != null) textSpeed.text = (BattleManager.Instance.speedIndex + 1).ToString(); // 2. 调用子类特定的刷新逻辑 if (battleField != null) // 确保战场存在后再调用特定刷新 { RefreshSpecific(); } } /// <summary> /// 子类实现的特定刷新逻辑 /// </summary> protected abstract void RefreshSpecific(); /// <summary> /// 当战斗字段创建时 (子类必须重写, 以匹配特定的战场类型) /// </summary> /// <param name="guid"></param> /// <param name="field"></param> protected abstract void OnCreateBattleField(string guid, BattleField field); // 示例: // protected override void OnCreateBattleField(string guid, BattleField field) // { // // 检查是否是当前窗口关心的战场类型 // if (field is ArenaBattleField arenaField) // { // SetBattleField(arenaField); // 调用SetBattleField // } // } /// <summary> /// 设置战斗字段 /// </summary> public virtual void SetBattleField(BattleField _battleField) { // 1. 清理旧的战场 if (battleField != null) { battleField.OnRoundChange -= OnRoundChange; battleField = null; } // 2. 设置新的战场 battleField = _battleField; if (battleField == null) return; // 3. 关联战斗场景根节点 if (battleRootNode != null) // 归还旧的 { battleRootNode.transform.localPosition = Vector3.zero; battleRootNode.transform.SetParent(Launch.Instance.transform); } battleRootNode = battleField.battleRootNode; if (battleRootNode == null) return; battleRootNode.transform.SetParent(mountPoint); // 挂载新的 battleRootNode.transform.localPosition = Vector3.zero; battleRootNode.transform.localScale = Vector3.one; // 4. 打开或获取HUD BattleHUDWin ui = UIManager.Instance.GetUI<BattleHUDWin>(); if (null == ui) { ui = UIManager.Instance.OpenWindow<BattleHUDWin>(); } ui.SetBattleField(battleField); // 5. 更新Canvas battleField.UpdateCanvas(canvas); // 6. 刷新UI Refresh(); // 7. 监听回合变更 battleField.OnRoundChange -= OnRoundChange; battleField.OnRoundChange += OnRoundChange; OnRoundChange(battleField.round, battleField.turnMax); // 立即执行一次以显示初始回合 } /// <summary> /// 暂停/继续 /// </summary> protected virtual void OnClickPause() { if (null == battleField) return; battleField.IsPause = !battleField.IsPause; } /// <summary> /// 跳过战斗 /// </summary> protected virtual void OnClickPass() { if (null == battleField) return; battleField.ForceFinish(); } /// <summary> /// 改变速度 /// </summary> protected virtual void ChangeSpeed() { if (null == battleField) return; BattleManager.Instance.speedIndex = (BattleManager.Instance.speedIndex + 1) % BattleManager.Instance.speedGear.Length; battleField.SetSpeedRatio(BattleManager.Instance.speedGear[BattleManager.Instance.speedIndex]); if (textSpeed != null) textSpeed.text = (BattleManager.Instance.speedIndex + 1).ToString(); } /// <summary> /// 注册战斗事件 /// </summary> protected virtual void RegisterBattleEvents() { EventBroadcast.Instance.AddListener<BattleDmgInfo>(EventName.BATTLE_DAMAGE_TAKEN, OnDamageTaken); EventBroadcast.Instance.AddListener<string, SkillConfig, TeamHero>(EventName.BATTLE_CAST_SKILL, OnCastSkill); } /// <summary> /// 注销战斗事件 /// (BattleWin 应该重写此方法并置空) /// </summary> protected virtual void UnregisterBattleEvents() { EventBroadcast.Instance.RemoveListener<BattleDmgInfo>(EventName.BATTLE_DAMAGE_TAKEN, OnDamageTaken); EventBroadcast.Instance.RemoveListener<string, SkillConfig, TeamHero>(EventName.BATTLE_CAST_SKILL, OnCastSkill); } /// <summary> /// 造成伤害 /// </summary> protected virtual void OnDamageTaken(BattleDmgInfo damageInfo) { if (battleField == null || damageInfo.battleFieldGuid != battleField.guid) return; // 通用逻辑:显示伤害数字 if (totalDamageDisplayer != null) totalDamageDisplayer.SetDamage(damageInfo); } /// <summary> /// 释放技能 (通用:显示技能Tips) /// </summary> protected virtual void OnCastSkill(string guid, SkillConfig skillConfig, TeamHero teamHero) { if (battleField == null || battleField.guid != guid) return; BattleObject battleObject = battleField.battleObjMgr.GetBattleObject(teamHero.ObjID); if (battleObject == null) return; bool isRed = battleObject.Camp == BattleCamp.Red; SkillTips tips = isRed ? skillTipsRed : skillTipsBlue; if (tips != null) tips.PlayMotion(battleField, isRed, teamHero, skillConfig); } /// <summary> /// 回合变更 (通用:刷新回合显示) /// </summary> protected virtual void OnRoundChange(int round, int maxRound) { if (txtBattleRound != null) { txtBattleRound.text = string.Format("{0}/{1}", round, maxRound); } } } Main/System/Battle/BaseBattleWin.cs.meta
New file @@ -0,0 +1,11 @@ fileFormatVersion: 2 guid: d8f186c2bc4af9b40b734d732c37322b MonoImporter: externalObjects: {} serializedVersion: 2 defaultReferences: [] executionOrder: 0 icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: Main/System/Battle/BoneFieldBattleWin.cs
@@ -2,72 +2,20 @@ using UnityEngine; using UnityEngine.UI; public class BoneFieldBattleWin : UIBase public class BoneFieldBattleWin : BaseBattleWin { [SerializeField] Transform transButtons; public Transform mountPoint; private BattleRootNode battleRootNode = null; private BoneBattleField battleField; [SerializeField] private Button btnSpeed; [SerializeField] private Text textSpeed; [SerializeField] private Button btnPass; [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; [SerializeField] public BossLifeBar bossLifeBar; [SerializeField] public SkillWordCell[] skillWordCells; [SerializeField] public BossHeadCell bossHeadCell; [SerializeField] public Text txtBossName; 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); } private void OnClickPause() { if (null == battleField) return; battleField.IsPause = !battleField.IsPause; } private void OnClickPass() { if (null == battleField) return; battleField.ForceFinish(); } private void ChangeSpeed() { 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(); } protected override void OnPreOpen() { base.OnPreOpen(); MainWin.TabChangeEvent += OnTabChangeEvent; BattleManager.Instance.onBattleFieldCreate += OnCreateBattleField; 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 ? 130 : 0, 0); if (isOpenBattleChangeTab) @@ -80,17 +28,11 @@ } } protected override void OnPreClose() { base.OnPreClose(); 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>(); BattleManager.Instance.storyBattleField.IsPause = false; bool isOpenBattleChangeTab = IsOpenBattleChangeTab(); if (isOpenBattleChangeTab) { @@ -110,45 +52,27 @@ 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) protected override void OnCreateBattleField(string guid, BattleField field) { 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()) if (field is BoneBattleField) { SetBattleField(field as BoneBattleField); SetBattleField(field); } } public void Display() protected override void RefreshSpecific() { BoneBattleField boneField = battleField as BoneBattleField; if (boneField == null) return; NPCLineupConfig lineupConfig = battleField.GetBossLineupConfig(); NPCLineupConfig lineupConfig = boneField.GetBossLineupConfig(); if (bossBattleObject != null) { @@ -159,7 +83,7 @@ bossBattleObject = null; } bossBattleObject = battleField.FindBoss(); bossBattleObject = boneField.FindBoss(); DisplaySkillWordsList(lineupConfig); @@ -181,14 +105,8 @@ Debug.LogError("找不到boss"); } OnRoundChange(battleField.round, battleField.turnMax); OnRoundChange(battleField.round, battleField.turnMax); // 确保回合显示被调用 OnBuffChanged(); totalDamageDisplayer.SetActive(false); skillTipsBlue.SetActive(false); skillTipsRed.SetActive(false); } private void OnBuffChanged() @@ -211,76 +129,23 @@ } private void OnDamageTaken(BattleDmgInfo info) protected override void OnDamageTaken(BattleDmgInfo info) { if (info.battleFieldGuid != battleField.guid) base.OnDamageTaken(info); if (battleField == null || info.battleFieldGuid != battleField.guid) return; if (info.hurtObj.ObjID == bossBattleObject.ObjID) if (bossBattleObject != null && info.hurtObj.ObjID == bossBattleObject.ObjID) { // Update the boss's health bar RefreshHP(); } totalDamageDisplayer.SetDamage(info); } protected override void OnClose() { base.OnClose(); if (battleRootNode != null) { battleRootNode.transform.SetParent(Launch.Instance.transform); battleRootNode.transform.localPosition = new Vector3(-10000, -10000, 0); } battleField = null; } protected override void NextFrameAfterOpen() { base.NextFrameAfterOpen(); } protected override void CompleteClose() { base.CompleteClose(); } public void SetBattleField(BoneBattleField _battleField) { if (battleField != null) { battleField.OnRoundChange -= OnRoundChange; battleField = null; } battleField = _battleField; if (battleRootNode != null) { battleRootNode.transform.localPosition = Vector3.zero; battleRootNode.transform.SetParent(Launch.Instance.transform); } battleRootNode = battleField.battleRootNode; battleRootNode.transform.SetParent(mountPoint); battleRootNode.transform.localPosition = Vector3.zero; battleRootNode.transform.localScale = Vector3.one; BattleHUDWin ui = UIManager.Instance.GetUI<BattleHUDWin>(); if (null == ui) { ui = UIManager.Instance.OpenWindow<BattleHUDWin>(); } ui.SetBattleField(battleField); battleField.UpdateCanvas(canvas); Display(); battleField.OnRoundChange += OnRoundChange; textSpeed.text = (BattleManager.Instance.speedIndex + 1).ToString(); } public void DisplaySkillWordsList(NPCLineupConfig lineUPConfig) @@ -336,13 +201,8 @@ } } 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/Battle/StoryBossBattleWin.cs
@@ -1,112 +1,33 @@ using System; using System.Collections.Generic; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class StoryBossBattleWin : UIBase public class StoryBossBattleWin : BaseBattleWin { // 组件引用 public Transform mountPoint; private BattleRootNode battleRootNode = null; private StoryBossBattleField battleField; [SerializeField] private Button btnSpeed; [SerializeField] private Text textSpeed; [SerializeField] private Button btnPass; [SerializeField] private Button btnPause; public BossLifeBar bossLifeBar; [SerializeField] public SkillWordCell[] skillWordCells; [SerializeField] public BossHeadCell bossHeadCell; [SerializeField] 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); } private void OnClickPause() { if (null == battleField) return; battleField.IsPause = !battleField.IsPause; } private void OnClickPass() { if (null == battleField) return; battleField.ForceFinish(); } private void ChangeSpeed() { 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(); } protected override void OnPreOpen() { base.OnPreOpen(); // SetBattleField(BattleManager.Instance.storyBattleField); BattleManager.Instance.onBattleFieldCreate += OnCreateBattleField; 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; UIManager.Instance.CloseWindow<MainWin>(); } protected override void OnPreClose() { base.OnPreClose(); 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>(); BattleManager.Instance.storyBattleField.IsPause = false; if (!UIManager.Instance.IsOpened<MainWin>()) UIManager.Instance.OpenWindow<MainWin>(); @@ -115,53 +36,22 @@ bossBattleObject.buffMgr.onBuffChanged -= OnBuffChanged; bossBattleObject = null; } } if (battleField != null) protected override void OnCreateBattleField(string guid, BattleField field) { if (field is StoryBossBattleField) { battleField.OnRoundChange -= OnRoundChange; battleField = null; SetBattleField(field); } } private void OnCastSkill(string guid, SkillConfig skillConfig, TeamHero teamHero) protected override void RefreshSpecific() { if (battleField == null) return; StoryBossBattleField storyBossField = battleField as StoryBossBattleField; if (storyBossField == 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 as StoryBossBattleField); } } protected override void OnOpen() { base.OnOpen(); } public override void Refresh() { base.Refresh(); // bossLifeBar.SetBaseInfo(battleField); // skillWordCells; NPCLineupConfig lineupConfig = battleField.GetBossLineupConfig(); NPCLineupConfig lineupConfig = storyBossField.GetBossLineupConfig(); if (null != bossBattleObject) { @@ -169,7 +59,7 @@ bossBattleObject = null; } bossBattleObject = battleField.FindBoss(); bossBattleObject = storyBossField.FindBoss(); DisplaySkillWordsList(lineupConfig); @@ -191,14 +81,8 @@ Debug.LogError("找不到boss"); } OnRoundChange(battleField.round, battleField.turnMax); OnRoundChange(battleField.round, battleField.turnMax); // 确保回合显示被调用 OnBuffChanged(); totalDamageDisplayer.SetActive(false); skillTipsBlue.SetActive(false); skillTipsRed.SetActive(false); } private void OnBuffChanged() @@ -220,82 +104,17 @@ } } private void OnDamageTaken(BattleDmgInfo info) protected override void OnDamageTaken(BattleDmgInfo info) { if (info.battleFieldGuid != battleField.guid) base.OnDamageTaken(info); if (battleField == null || info.battleFieldGuid != battleField.guid) return; if (info.hurtObj.ObjID == bossBattleObject.ObjID) if (bossBattleObject != null && info.hurtObj.ObjID == bossBattleObject.ObjID) { // Update the boss's health bar RefreshHP(); } totalDamageDisplayer.SetDamage(info); } protected override void OnClose() { base.OnClose(); if (battleRootNode != null) { battleRootNode.transform.SetParent(Launch.Instance.transform); battleRootNode.transform.localPosition = new Vector3(-10000, -10000, 0); } battleField = null; } protected override void NextFrameAfterOpen() { base.NextFrameAfterOpen(); } protected override void CompleteClose() { base.CompleteClose(); } public void SetBattleField(StoryBossBattleField _battleField) { if (battleField != null) { battleField.OnRoundChange -= OnRoundChange; battleField = null; } battleField = _battleField; if (battleRootNode != null) { battleRootNode.transform.localPosition = Vector3.zero; battleRootNode.transform.SetParent(Launch.Instance.transform); } battleRootNode = battleField.battleRootNode; battleRootNode.transform.SetParent(mountPoint); battleRootNode.transform.localPosition = Vector3.zero; battleRootNode.transform.localScale = Vector3.one; BattleHUDWin ui = UIManager.Instance.GetUI<BattleHUDWin>(); if (null == ui) { ui = UIManager.Instance.OpenWindow<BattleHUDWin>(); } ui.SetBattleField(battleField); battleField.UpdateCanvas(canvas); Refresh(); battleField.OnRoundChange -= OnRoundChange; battleField.OnRoundChange += OnRoundChange; textSpeed.text = (BattleManager.Instance.speedIndex + 1).ToString(); } public void DisplaySkillWordsList(NPCLineupConfig lineUPConfig) { @@ -350,8 +169,4 @@ } } private void OnRoundChange(int round, int maxRound) { txtBattleRound.text = string.Format("{0}/{1}", round, maxRound); } } }