| | |
| | | using System.Collections; |
| | | using System.Collections.Generic; |
| | | using TowerDefense.Nodes; |
| | | using TowerDefense.UI.HUD; |
| | | |
| | | namespace TowerDefense.Level |
| | | { |
| | |
| | | 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; |
| | |
| | | /// </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; |
| | | |
| | | /// <summary> |
| | | /// 切换基地 |
| | |
| | | } |
| | | } |
| | | |
| | | private void Start() |
| | | { |
| | | EndlessBuffSelect.instance.BuffSelectCompleted += OnBuffSelectCompleted; |
| | | EndlessGameUI.instance.GameOverEvent += SafelyCallLevelCompleted; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// Updates the currency gain controller |
| | | /// </summary> |
| | |
| | | { |
| | | isBuffSelectCompleted = true; |
| | | WaveManager.StartWaves(CurrentLevel); |
| | | EndlessUIStart.instance.Restart(); |
| | | } |
| | | |
| | | // 本关卡所有波次全部生成完成 && 敌人全部被清理了,然后就去尝试进入下一关 |
| | | if (EndlessLeveltate == LevelState.SpawningEnemies && IsAllWaveCompleted && NumberOfEnemies == 0) |
| | | { |
| | | if (!UpdateLevel()) |
| | | ChangeLevelState(LevelState.AllEnemiesSpawned); |
| | | // 新手的话,第一关完了暂停 |
| | | if (!GameConfig.IsNewbie) |
| | | { |
| | | if (!UpdateLevel()) |
| | | ChangeLevelState(LevelState.AllEnemiesSpawned); |
| | | } |
| | | else if (!isFirstLevelCompleted) |
| | | { |
| | | isFirstLevelCompleted = true; |
| | | EndlessUIStart.instance.Pause(); |
| | | // 第一关的怪全部被杀光 |
| | | EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.KillDone); |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | ++CurrentLevel; |
| | | IsAllWaveCompleted = false; |
| | | |
| | | // 进入boss虚弱状态 |
| | | Debug.Log("--------------------- 进入boss虚弱状态 ---------------------"); |
| | | |
| | | // 所有关卡全部结束 |
| | | if (CurrentLevel > EndlessPortData.MaxLevel) |
| | | return false; |
| | |
| | | /// </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> |
| | |
| | | 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> |
| | |
| | | /// <param name="index"></param> |
| | | public void OnBuffSelectCompleted(int index) |
| | | { |
| | | EndlessUIStart.instance.SelectBuffUI.SetActive(false); |
| | | isBuffSelectCompleted = false; |
| | | EndlessBuffManager.instance.AddBuff(EndlessBuffData.GetBuffByIndex(index)); |
| | | } |
| | |
| | | ChangeLevelState(LevelState.Win); |
| | | break; |
| | | case LevelState.Lose: |
| | | SafelyCallLevelFailed(); |
| | | SafelyCallLevelCompleted(); |
| | | break; |
| | | case LevelState.Win: |
| | | SafelyCallLevelCompleted(); |
| | |
| | | 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> |
| | |
| | | /// </summary> |
| | | protected virtual void SafelyCallLevelCompleted() |
| | | { |
| | | EndlessDropManager.instance.PickUpAllDrop(); |
| | | if (LevelCompleted != null) |
| | | LevelCompleted(); |
| | | } |
| | |
| | | } |
| | | |
| | | /// <summary> |
| | | /// Calls the <see cref="levelFailed"/> event |
| | | /// </summary> |
| | | protected virtual void SafelyCallLevelFailed() |
| | | { |
| | | if (LevelFailed != null) |
| | | LevelFailed(); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 兵线的所有基地都已经被摧毁,停止某一条兵线的出兵 |
| | | /// </summary> |
| | | /// <param name="index"></param> |
| | |
| | | --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); |
| | | } |
| | | } |
| | | } |