| | |
| | | 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); |
| | | } |
| | | |
| | |
| | | { |
| | | if (null == battleField) |
| | | return; |
| | | |
| | | battleField.IsPause = !battleField.IsPause; |
| | | } |
| | | |
| | |
| | | { |
| | | if (null == battleField) |
| | | return; |
| | | |
| | | battleField.ForceFinish(); |
| | | } |
| | | |
| | |
| | | { |
| | | 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(); |
| | |
| | | { |
| | | 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() |
| | |
| | | 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) |
| | | { |
| | |
| | | |
| | | 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); |
| | | } |
| | | } |