From 452c75675679c44cc39b04bdb7d330d7c5c14d5c Mon Sep 17 00:00:00 2001 From: wangguan <wangguan@kt007.com> Date: Tue, 29 Dec 2020 10:48:06 +0800 Subject: [PATCH] 增加多SDK支持。常规使用SDKChannel.KTGM 偶哈游的是空SDK --- Assets/Scripts/TowerDefense/UI/EndlessBossSkill/EndlessBossSkillManager.cs | 136 ++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 122 insertions(+), 14 deletions(-) diff --git a/Assets/Scripts/TowerDefense/UI/EndlessBossSkill/EndlessBossSkillManager.cs b/Assets/Scripts/TowerDefense/UI/EndlessBossSkill/EndlessBossSkillManager.cs index 5a757bb..56090e5 100644 --- a/Assets/Scripts/TowerDefense/UI/EndlessBossSkill/EndlessBossSkillManager.cs +++ b/Assets/Scripts/TowerDefense/UI/EndlessBossSkill/EndlessBossSkillManager.cs @@ -1,7 +1,7 @@ -using System.Collections; using System.Collections.Generic; using UnityEngine; using Core.Utilities; +using TowerDefense.UI.HUD; /** * 无尽模式boss技能管理器 @@ -33,10 +33,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,24 +68,90 @@ // Update is called once per frame private void Update() { - if (isPaused) return; + if (isPaused || EndlessGameUI.instance.state == EndlessGameUI.State.GameOver || !EndlessUIStart.instance.IsGameRunning) return; for (int i = 0; i < skillList.Count; ++i) { skillList[i].Update(Time.deltaTime); - - if (skillList[i].IsCDCompleted) - AddSkill(skillList[i]); } + for (int i = 0; i < waitList.Count; ++i) + { + if (waitList[i].IsCDCompleted) + AddSkill(waitList[i]); + } + + 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 < cdList.Count; ++i) { 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, (int)cdList[i].SkillType); + isFloatWordCompleted = false; + ChangeState(EndlessBossSkillState.FloatWord); + break; } } + } + + /// <summary> + /// 飘字闪烁完成 + /// </summary> + 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> @@ -75,7 +160,6 @@ /// <param name="idList"></param> public void Init(List<int> idList) { - Debug.Log("--------------------- 初始化boss技能列表 ---------------------"); skillIdList = idList; for (int i = 0; i < idList.Count; ++i) @@ -86,10 +170,12 @@ { skillList.Add(skill); skill.Init(); + waitList.Add(skill); } } isPaused = false; + ChangeState(EndlessBossSkillState.Wait); } /// <summary> @@ -97,7 +183,6 @@ /// </summary> public void ClearSkillList() { - Debug.Log("--------------------- 关卡结束,清空技能列表 ---------------------"); for (int i = 0; i < skillList.Count; ++i) { skillList[i].Clear(); @@ -107,6 +192,8 @@ cdList.Clear(); waitList.Clear(); isPaused = true; + ChangeState(EndlessBossSkillState.Init); + ClearEvent(); } /// <summary> @@ -114,14 +201,32 @@ /// </summary> public void Reset() { - for (int i = 0; i < skillList.Count; ++i) - { - skillList[i].Reset(); - } + if (isPaused) return; cdList.Clear(); waitList.Clear(); + + for (int i = 0; i < skillList.Count; ++i) + { + skillList[i].Reset(); + waitList.Add(skillList[i]); + } + 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 +235,7 @@ public void Restart() { isPaused = false; + ChangeState(EndlessBossSkillState.Wait); } /// <summary> @@ -155,6 +261,8 @@ return new BossSkillBubbleBomb(data); case EndlessBossSkillType.WoodPile: return new BossSkillWoodPile(data); + case EndlessBossSkillType.BondageBubble: + return new BossSkillBondageBubble(data); } return null; -- Gitblit v1.9.1