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