From 80b4237334a773b29bf69f38532a90ca659b3bfe Mon Sep 17 00:00:00 2001 From: chenxin <chenxin6991@163.com> Date: Wed, 04 Nov 2020 21:14:16 +0800 Subject: [PATCH] boss技能泡泡炸弹 --- Assets/Scripts/TowerDefense/Level/EndlessWaveManager.cs | 130 +++++++++++++++++++++++++++++++++++------- 1 files changed, 107 insertions(+), 23 deletions(-) diff --git a/Assets/Scripts/TowerDefense/Level/EndlessWaveManager.cs b/Assets/Scripts/TowerDefense/Level/EndlessWaveManager.cs index 9516ece..05d2c6f 100644 --- a/Assets/Scripts/TowerDefense/Level/EndlessWaveManager.cs +++ b/Assets/Scripts/TowerDefense/Level/EndlessWaveManager.cs @@ -4,6 +4,7 @@ using KTGMGemClient; using UnityEngine; using TowerDefense.UI.HUD; +using Core.Utilities; namespace TowerDefense.Level { @@ -98,6 +99,8 @@ private string faZhenPath = "UI/Endless/Tunel/EndlessFaZhen"; + private Timer faZhenRefreshTimer; + private void Start() { HideTunel(); @@ -132,6 +135,34 @@ /// public virtual void StartWaves(int level) { + SummonFaZhen(); + } + + /// <summary> + /// 关卡开始时首先初始化关卡信息 + /// </summary> + /// <param name="level"></param> + public void InitPort(int level) + { + EndlessPortData.InitPortList(); + InitPortData(level); + InitWaveData(); + RefreshBoss(); + + if (!GameConfig.IsNewbie) + { + endless_boss bossData = EndlessBossData.GetDataById(waveData[0].Config.resource); + + if (bossData != null) + EndlessBossSkillManager.instance.Init(bossData.skill); + } + } + + /// <summary> + /// 初始化关卡数据 + /// </summary> + private void InitPortData(int level) + { Debug.Log($"--------------------- 开始第 {level} 关 ---------------------"); Level = level; LevelData = EndlessPortData.GetLevelWaveData(level); @@ -143,8 +174,58 @@ if (LevelData.Count == 0) throw new Exception($"当前关卡:{level}, 没有关卡数据"); + } - UpdateWave(); + /// <summary> + /// 召唤法阵 + /// </summary> + private void SummonFaZhen() + { + EventCenter.Ins.Add((int)KTGMGemClient.EventType.EndlessBossSummonEnd, OnEndlessBossSummonEnd); + EndlessBossCtrl.instance.ChangeState(EndlessBossActionState.Summon); + } + + /// <summary> + /// boss召唤动作结束 + /// </summary> + private void OnEndlessBossSummonEnd() + { + EventCenter.Ins.Remove((int)KTGMGemClient.EventType.EndlessBossSummonEnd, OnEndlessBossSummonEnd); + EndlessBossCtrl.instance.ChangeState(EndlessBossActionState.Standing); + HideTunel(); + RefreshFaZhen(); + } + + /// <summary> + /// 刷新法阵显示 + /// </summary> + private void RefreshFaZhen() + { + float time = 0; + + // 刷新法阵的显示 + for (int i = 0; i < waveData.Count; ++i) + { + int tunel = waveData[i].Config.tunel; + int tunelBgId = waveData[i].Config.tunel_bg; + + TunelList[tunel - 1].material = Resources.Load<Material>($"{tunelMaterialPath}{tunelBgId}"); + GameObject obj = Resources.Load<GameObject>($"{faZhenPath}{tunelBgId}"); + GameObject faZhen = Instantiate(obj); + + faZhen.transform.SetParent(TunelList[tunel - 1].gameObject.transform); + faZhen.transform.localPosition = new Vector3(0, 1, 0); + faZhen.transform.localScale = new Vector3(2, 2, 2); + TunelList[tunel - 1].gameObject.SetActive(true); + + ParticleSystem ps = faZhen.transform.GetChild(0).GetComponent<ParticleSystem>(); + ps.Play(); + time = ps.main.duration * 3; + Destroy(faZhen, time); + } + + if (faZhenRefreshTimer == null) + faZhenRefreshTimer = new Timer(time, UpdateWave); } /// <summary> @@ -179,37 +260,25 @@ } /// <summary> - /// 更新波 + /// 初始化波次数据 /// </summary> - private void UpdateWave() + private void InitWaveData() { - if (EndlessGameUI.instance.state == EndlessGameUI.State.GameOver) return; - waveData = LevelData[CurrentWaveIndex]; // 直接取第一条就行了 WaveInterval = waveData[0].Config.cooldown / 1000f; TotalWaveLines = waveData.Count; CompletedWaveLine = 0; SpawnedTotalEnemies = 0; - HideTunel(); + } - // 刷新法阵的显示 - for (int i = 0; i < waveData.Count; ++i) - { - int tunel = waveData[i].Config.tunel; - TunelList[tunel - 1].material = Resources.Load<Material>($"{tunelMaterialPath}{tunel}"); - GameObject obj = Resources.Load<GameObject>($"{faZhenPath}{tunel}"); - GameObject faZhen = Instantiate(obj); - faZhen.transform.SetParent(TunelList[tunel - 1].gameObject.transform); - faZhen.transform.localPosition = new Vector3(0, 1, 0); - faZhen.transform.localScale = new Vector3(2, 2, 2); - TunelList[tunel - 1].gameObject.SetActive(true); - ParticleSystem ps = faZhen.transform.GetChild(0).GetComponent<ParticleSystem>(); - ps.Play(); - Destroy(ps.gameObject, ps.main.duration * 3); - } + /// <summary> + /// 更新波 + /// </summary> + private void UpdateWave() + { + if (EndlessGameUI.instance.state == EndlessGameUI.State.GameOver) return; - RefreshBoss(); TotalEnemies = EndlessPortData.GetWaveEnemiesCount(Level, CurrentWaveIndex); RemainEnemies = TotalEnemies; @@ -231,7 +300,11 @@ } if (TotalWaveLines != 0) + { isWaveStarted = true; + EndlessBossSkillManager.instance.Restart(); + EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.EndlessBeginWave); + } } /// <summary> @@ -282,8 +355,15 @@ public void Update() { + if (faZhenRefreshTimer != null) + { + if (faZhenRefreshTimer.Tick(Time.deltaTime)) + faZhenRefreshTimer = null; + } + if (!isWaveStarted) return; + // 所有赛道都完成 if (CompletedWaveLine >= TotalWaveLines) { // 判断所有敌人是否全部清除 @@ -299,6 +379,8 @@ // 更新波索引 ++CurrentWaveIndex; EndlessBuffManager.instance.UpdateBuffList(); + EndlessBossSkillManager.instance.Reset(); + EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.EndlessCompletedPort, Level, CurrentWaveIndex); if (CurrentWaveIndex >= TotalWaves) // 当前关卡的所有波次全部完成 @@ -319,7 +401,9 @@ private IEnumerator DelayToUpdateWave() { yield return new WaitForSeconds(WaveInterval); - UpdateWave(); + InitWaveData(); + RefreshBoss(); + SummonFaZhen(); } /// <summary> -- Gitblit v1.9.1