From bc14626b98377c39db4d77029326389bb34484a8 Mon Sep 17 00:00:00 2001 From: chenxin <chenxin6991@163.com> Date: Sat, 31 Oct 2020 16:59:37 +0800 Subject: [PATCH] boss动作、结算特效、选择部分特效,关卡流程的bug --- Assets/Scripts/TowerDefense/Level/EndlessWaveManager.cs | 117 ++++++++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 92 insertions(+), 25 deletions(-) diff --git a/Assets/Scripts/TowerDefense/Level/EndlessWaveManager.cs b/Assets/Scripts/TowerDefense/Level/EndlessWaveManager.cs index ac02bc4..43d7d9b 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,25 @@ /// public virtual void StartWaves(int level) { + SummonFaZhen(); + } + + /// <summary> + /// 关卡开始时首先初始化关卡信息 + /// </summary> + /// <param name="level"></param> + public void InitPort(int level) + { + InitPortData(level); + InitWaveData(); + RefreshBoss(); + } + + /// <summary> + /// 初始化关卡数据 + /// </summary> + private void InitPortData(int level) + { Debug.Log($"--------------------- 开始第 {level} 关 ---------------------"); Level = level; LevelData = EndlessPortData.GetLevelWaveData(level); @@ -143,8 +165,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,39 +251,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; - int tunelBgId = waveData[i].Config.tunel_bg; + /// <summary> + /// 更新波 + /// </summary> + private void UpdateWave() + { + if (EndlessGameUI.instance.state == EndlessGameUI.State.GameOver) return; - 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(); - Destroy(faZhen, ps.main.duration * 3); - } - - RefreshBoss(); TotalEnemies = EndlessPortData.GetWaveEnemiesCount(Level, CurrentWaveIndex); RemainEnemies = TotalEnemies; @@ -284,8 +342,15 @@ public void Update() { + if (faZhenRefreshTimer != null) + { + if (faZhenRefreshTimer.Tick(Time.deltaTime)) + faZhenRefreshTimer = null; + } + if (!isWaveStarted) return; + // 所有赛道都完成 if (CompletedWaveLine >= TotalWaveLines) { // 判断所有敌人是否全部清除 @@ -322,7 +387,9 @@ private IEnumerator DelayToUpdateWave() { yield return new WaitForSeconds(WaveInterval); - UpdateWave(); + InitWaveData(); + RefreshBoss(); + SummonFaZhen(); } /// <summary> -- Gitblit v1.9.1