River Jiang
2020-10-28 d2bc86161bf01b9ac01ba7b4b6ee7e341778c0c2
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);
        }
    }
}