From 323055bb1b4c9b5669676dd799238050279b7d7a Mon Sep 17 00:00:00 2001 From: chenxin <chenxin6991@163.com> Date: Thu, 05 Nov 2020 17:25:43 +0800 Subject: [PATCH] buff列表没有刷新的问题 关卡结束后游戏还在继续的问题 修改无尽模式血量机制 boss技能流程优化 赛道规则修改 其他参数调整 --- Assets/Scripts/TowerDefense/UI/EndlessBossSkill/EndlessBossSkillManager.cs | 106 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 102 insertions(+), 4 deletions(-) diff --git a/Assets/Scripts/TowerDefense/UI/EndlessBossSkill/EndlessBossSkillManager.cs b/Assets/Scripts/TowerDefense/UI/EndlessBossSkill/EndlessBossSkillManager.cs index 5a757bb..fc25a5a 100644 --- a/Assets/Scripts/TowerDefense/UI/EndlessBossSkill/EndlessBossSkillManager.cs +++ b/Assets/Scripts/TowerDefense/UI/EndlessBossSkill/EndlessBossSkillManager.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using UnityEngine; using Core.Utilities; +using TowerDefense.UI.HUD; /** * 无尽模式boss技能管理器 @@ -33,10 +34,29 @@ private List<EndlessBossSkill> waitList; /// <summary> + /// boss技能状态 + /// </summary> + private EndlessBossSkillState skillState; + + /// <summary> /// 是否终止使用技能 /// </summary> - /// <value></value> private bool isPaused { get; set; } + + /// <summary> + /// 当前正在处理的技能 + /// </summary> + private EndlessBossSkill currentSkill; + + /// <summary> + /// 飘字是否完成 + /// </summary> + private bool isFloatWordCompleted { get; set; } = true; + + /// <summary> + /// boss技能动作是否完成 + /// </summary> + private bool isSkillActionCompleted { get; set; } = true; // Start is called before the first frame update private void Start() @@ -49,8 +69,51 @@ // Update is called once per frame private void Update() { - if (isPaused) return; + if (isPaused || EndlessGameUI.instance.state == EndlessGameUI.State.GameOver) return; + switch (skillState) + { + case EndlessBossSkillState.Init: + break; + case EndlessBossSkillState.Wait: + HandleWait(Time.deltaTime); + break; + case EndlessBossSkillState.FloatWord: + if (isFloatWordCompleted) + { + EventCenter.Ins.Add((int)KTGMGemClient.EventType.EndlessBossSummonEnd, OnEndlessBossActionEnd); + EndlessBossCtrl.instance.ChangeState(EndlessBossActionState.Summon); + isSkillActionCompleted = false; + ChangeState(EndlessBossSkillState.PerformAction); + } + break; + case EndlessBossSkillState.PerformAction: + if (isSkillActionCompleted) + ChangeState(EndlessBossSkillState.ReleaseSkill); + break; + case EndlessBossSkillState.ReleaseSkill: + if (currentSkill != null) + { + RemoveSkill(currentSkill); + currentSkill.ReleaseSkill(); + currentSkill = null; + } + ChangeState(EndlessBossSkillState.Wait); + break; + } + } + + /// <summary> + /// boss技能动作完成 + /// </summary> + private void OnEndlessBossActionEnd() + { + EventCenter.Ins.Remove((int)KTGMGemClient.EventType.EndlessBossSummonEnd, OnEndlessBossActionEnd); + isSkillActionCompleted = true; + } + + private void HandleWait(float deltaTime) + { for (int i = 0; i < skillList.Count; ++i) { skillList[i].Update(Time.deltaTime); @@ -63,10 +126,27 @@ { if (cdList[i].IsConditionOK) { - cdList[i].ReleaseSkill(); - RemoveSkill(cdList[i]); + currentSkill = cdList[i]; + EventCenter.Ins.Add((int)KTGMGemClient.EventType.EndlessBossSkillGlintTitleCompleted, OnGlintTitleCompleted); + EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.EndlessBossSkillGlintTitle); + isFloatWordCompleted = false; + ChangeState(EndlessBossSkillState.FloatWord); + break; } } + } + + private void OnGlintTitleCompleted() + { + EventCenter.Ins.Remove((int)KTGMGemClient.EventType.EndlessBossSkillGlintTitleCompleted, OnGlintTitleCompleted); + isFloatWordCompleted = true; + } + + private void ChangeState(EndlessBossSkillState newState) + { + if (newState == skillState) return; + + skillState = newState; } /// <summary> @@ -90,6 +170,7 @@ } isPaused = false; + ChangeState(EndlessBossSkillState.Wait); } /// <summary> @@ -107,6 +188,8 @@ cdList.Clear(); waitList.Clear(); isPaused = true; + ChangeState(EndlessBossSkillState.Init); + ClearEvent(); } /// <summary> @@ -122,6 +205,20 @@ cdList.Clear(); waitList.Clear(); isPaused = true; + ChangeState(EndlessBossSkillState.Init); + ClearEvent(); + } + + private void ClearEvent() + { + if (!isFloatWordCompleted) + EventCenter.Ins.Remove((int)KTGMGemClient.EventType.EndlessBossSkillGlintTitleCompleted, OnGlintTitleCompleted); + + if (!isSkillActionCompleted) + { + EventCenter.Ins.Remove((int)KTGMGemClient.EventType.EndlessBossSummonEnd, OnEndlessBossActionEnd); + EndlessBossCtrl.instance.ChangeState(EndlessBossActionState.Standing); + } } /// <summary> @@ -130,6 +227,7 @@ public void Restart() { isPaused = false; + ChangeState(EndlessBossSkillState.Wait); } /// <summary> -- Gitblit v1.9.1