From 38136a34de9aa36bf15ec7471abd56e2cba6c26f Mon Sep 17 00:00:00 2001 From: chenxin <chenxin6991@163.com> Date: Tue, 27 Oct 2020 17:39:17 +0800 Subject: [PATCH] 修改无尽模式新手引导流程能全部跑通了 --- Assets/Scripts/TowerDefense/Level/EndlessLevelManager.cs | 130 +++++++++++++++++++++++++++++++----------- 1 files changed, 95 insertions(+), 35 deletions(-) diff --git a/Assets/Scripts/TowerDefense/Level/EndlessLevelManager.cs b/Assets/Scripts/TowerDefense/Level/EndlessLevelManager.cs index f8f85e9..cff3ab6 100644 --- a/Assets/Scripts/TowerDefense/Level/EndlessLevelManager.cs +++ b/Assets/Scripts/TowerDefense/Level/EndlessLevelManager.cs @@ -11,6 +11,7 @@ using System.Collections; using System.Collections.Generic; using TowerDefense.Nodes; +using TowerDefense.UI.HUD; namespace TowerDefense.Level { @@ -110,11 +111,6 @@ public event Action LevelCompleted; /// <summary> - /// Fired when all of the home bases are destroyed - /// </summary> - public event Action LevelFailed; - - /// <summary> /// Fired when the level state is changed - first parameter is the old state, second parameter is the new state /// </summary> public event Action<LevelState, LevelState> LevelStateChanged; @@ -151,12 +147,20 @@ /// </summary> /// <value></value> public int SelectBuffNeddLevels { get; set; } + // cx test // public int SelectBuffNeddLevels { get; set; } = 2; /// <summary> /// buff是否选择完成 /// </summary> private bool isBuffSelectCompleted = true; + + /// <summary> + /// 新手第一关是否完成 + /// </summary> + private bool isFirstLevelCompleted = false; + + private bool isStopSecondWaveCompleted = false; /// <summary> /// 切换基地 @@ -283,6 +287,12 @@ } } + private void Start() + { + EndlessBuffSelect.instance.BuffSelectCompleted += OnBuffSelectCompleted; + EndlessGameUI.instance.GameOverEvent += SafelyCallLevelCompleted; + } + /// <summary> /// Updates the currency gain controller /// </summary> @@ -297,13 +307,25 @@ { isBuffSelectCompleted = true; WaveManager.StartWaves(CurrentLevel); + EndlessUIStart.instance.Restart(); } // 本关卡所有波次全部生成完成 && 敌人全部被清理了,然后就去尝试进入下一关 if (EndlessLeveltate == LevelState.SpawningEnemies && IsAllWaveCompleted && NumberOfEnemies == 0) { - if (!UpdateLevel()) - ChangeLevelState(LevelState.AllEnemiesSpawned); + // 新手的话,第一关完了暂停 + if (!GameConfig.IsNewbie || GameConfig.IsNewbieGuideCompleted) + { + if (!UpdateLevel()) + ChangeLevelState(LevelState.AllEnemiesSpawned); + } + else if (!isFirstLevelCompleted) + { + isFirstLevelCompleted = true; + EndlessUIStart.instance.Pause(); + // 第一关的怪全部被杀光 + EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.KillDone); + } } } @@ -340,9 +362,6 @@ ++CurrentLevel; IsAllWaveCompleted = false; - // 进入boss虚弱状态 - Debug.Log("--------------------- 进入boss虚弱状态 ---------------------"); - // 所有关卡全部结束 if (CurrentLevel > EndlessPortData.MaxLevel) return false; @@ -350,6 +369,17 @@ StartCoroutine(DelayToNextLevel()); return true; + } + + /// <summary> + /// 新手更新关卡 + /// </summary> + public void NewbieUpdateLevel() + { + ++CurrentLevel; + IsAllWaveCompleted = false; + EndlessUIStart.instance.Restart(); + WaveManager.StartWaves(CurrentLevel); } /// <summary> @@ -367,7 +397,15 @@ /// </summary> private void BeginLevel() { - ShowSelectBuffUI(); + if (EndlessGameUI.instance.state == EndlessGameUI.State.GameOver) return; + + if (!GameConfig.IsNewbie) + ShowSelectBuffUI(); + else + { + EndlessUIStart.instance.Restart(); + WaveManager.StartWaves(CurrentLevel); + } } /// <summary> @@ -384,14 +422,9 @@ return; } - EndlessUIStart.instance.SelectBuffUI.SetActive(true); - - for (int i = 0; i < 3; ++i) - { - GameObject descObj = GameObject.Find($"BuffDesc{i}"); - Text obj = descObj.GetComponent<Text>(); - obj.text = list[i].Config.brief; - } + EndlessUIStart.instance.Pause(); + EndlessBuffSelect.instance.Refresh(list); + EndlessBuffSelect.instance.ShowBuffUI(); } /// <summary> @@ -400,7 +433,6 @@ /// <param name="index"></param> public void OnBuffSelectCompleted(int index) { - EndlessUIStart.instance.SelectBuffUI.SetActive(false); isBuffSelectCompleted = false; EndlessBuffManager.instance.AddBuff(EndlessBuffData.GetBuffByIndex(index)); } @@ -430,7 +462,7 @@ ChangeLevelState(LevelState.Win); break; case LevelState.Lose: - SafelyCallLevelFailed(); + SafelyCallLevelCompleted(); break; case LevelState.Win: SafelyCallLevelCompleted(); @@ -453,11 +485,11 @@ homeBaseDestroyed(); } - // If there are no home bases left and the level is not over then set the level to lost - if ((NumberOfHomeBasesLeft < 3) && !isGameOver) - { - ChangeLevelState(LevelState.Lose); - } + // // If there are no home bases left and the level is not over then set the level to lost + // if ((NumberOfHomeBasesLeft < 3) && !isGameOver) + // { + // ChangeLevelState(LevelState.Lose); + // } } /// <summary> @@ -465,6 +497,7 @@ /// </summary> protected virtual void SafelyCallLevelCompleted() { + EndlessDropManager.instance.PickUpAllDrop(); if (LevelCompleted != null) LevelCompleted(); } @@ -485,15 +518,6 @@ } /// <summary> - /// Calls the <see cref="levelFailed"/> event - /// </summary> - protected virtual void SafelyCallLevelFailed() - { - if (LevelFailed != null) - LevelFailed(); - } - - /// <summary> /// 兵线的所有基地都已经被摧毁,停止某一条兵线的出兵 /// </summary> /// <param name="index"></param> @@ -506,5 +530,41 @@ --WaveManager.TotalWaveLines; } } + + /// <summary> + /// 暂停波次,小怪停止移动,塔停止攻击 + /// </summary> + public void PauseWave() + { + EndlessUIStart.instance.Pause(); + AgentInsManager.instance.SetWaveLineCanMove(-1, false, false); + WaveManager.PauseAllWave(); + EndlessGameUI.instance.SetAttackingTowerState(false); + } + + /// <summary> + /// 恢复波次,小怪 + /// </summary> + public void RestartWave() + { + EndlessUIStart.instance.Restart(); + AgentInsManager.instance.SetWaveLineCanMove(-1, true, false); + WaveManager.RestartAllWave(); + EndlessGameUI.instance.SetAttackingTowerState(true); + } + + /// <summary> + /// 停止第二关波次 + /// </summary> + public void StopSecondWave() + { + Debug.LogError("--------------------- 停止第二关出怪 ---------------------"); + if (!isStopSecondWaveCompleted) + { + isStopSecondWaveCompleted = true; + PauseWave(); + } + EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.SkillStep); + } } } \ No newline at end of file -- Gitblit v1.9.1