From 8876e348ab75183282fe2442f8a43d094c12dec0 Mon Sep 17 00:00:00 2001 From: chenxin <chenxin6991@163.com> Date: Wed, 18 Nov 2020 13:50:14 +0800 Subject: [PATCH] 玉米最后一发子弹没伤害 火技能攻速问题 --- Assets/Scripts/TowerDefense/Level/EndlessLevelManager.cs | 183 ++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 160 insertions(+), 23 deletions(-) diff --git a/Assets/Scripts/TowerDefense/Level/EndlessLevelManager.cs b/Assets/Scripts/TowerDefense/Level/EndlessLevelManager.cs index bf010e3..ce1aa93 100644 --- a/Assets/Scripts/TowerDefense/Level/EndlessLevelManager.cs +++ b/Assets/Scripts/TowerDefense/Level/EndlessLevelManager.cs @@ -6,7 +6,6 @@ using TowerDefense.Towers.Data; using TowerDefense.Towers.Placement; using UnityEngine; -using UnityEngine.UI; using KTGMGemClient; using System.Collections; using System.Collections.Generic; @@ -22,6 +21,12 @@ [RequireComponent(typeof(EndlessWaveManager))] public class EndlessLevelManager : Singleton<EndlessLevelManager> { + /// <summary> + /// 起始关卡 + /// </summary>' + /// <value></value> + protected int startLevel { get; set; } = 1; + /// <summary> /// 当前的关卡等级 /// </summary> @@ -156,6 +161,58 @@ private bool isBuffSelectCompleted = true; /// <summary> + /// 新手第一关是否完成 + /// </summary> + private bool isFirstLevelCompleted = false; + + private bool isStopSecondWaveCompleted = false; + + /// <summary> + /// 赛道长度 + /// </summary> + private float tunelLength = 31.94f; + + private List<Vector3> homeBasePositionList; + + /// <summary> + /// 根据赛道id(1~5)获得基地坐标 + /// </summary> + /// <param name="tunelId"></param> + /// <returns></returns> + public Vector3 GetHomeBasePosition(int tunelId) + { + return homeBasePositionList[tunelId - 1]; + } + + /// <summary> + /// 根据赛道id(1~5)和赛道类型获得世界坐标 + /// </summary> + /// <param name="tunelId"></param> + /// <param name="tunelType"></param> + public Vector3 GetTunelWorldPosition(int tunelId, EndlessBossSkillTunelType tunelType) + { + Vector3 startPos = StartingNodeList[tunelId - 1].transform.position; + Vector3 ret = new Vector3(startPos.x, startPos.y, startPos.z); + float add = 0; + + switch (tunelType) + { + case EndlessBossSkillTunelType.Top: + break; + case EndlessBossSkillTunelType.Center: + add = -(tunelLength / 2); + break; + case EndlessBossSkillTunelType.Bottom: + add = -tunelLength; + break; + } + + ret.z += add; + + return ret; + } + + /// <summary> /// 切换基地 /// </summary> /// <param name="index">列索引</param> @@ -272,18 +329,24 @@ // Iterate through home bases and subscribe NumberOfHomeBases = HomeBases.Length; NumberOfHomeBasesLeft = NumberOfHomeBases; - - for (int i = 0; i < NumberOfHomeBases; i++) - { - HomeBases[i].homebaseIdx = i % MAX_TOWER; - HomeBases[i].died += OnHomeBaseDestroyed; - } } private void Start() { EndlessBuffSelect.instance.BuffSelectCompleted += OnBuffSelectCompleted; EndlessGameUI.instance.GameOverEvent += SafelyCallLevelCompleted; + + homeBasePositionList = new List<Vector3>(); + + for (int i = 0; i < StartingNodeList.Count; ++i) + { + Vector3 startPos = StartingNodeList[i].transform.position; + Vector3 pos = new Vector3(); + pos.x = startPos.x; + pos.y = startPos.y; + pos.z = startPos.z - tunelLength; + homeBasePositionList.Add(pos); + } } /// <summary> @@ -291,23 +354,39 @@ /// </summary> protected virtual void Update() { + if (EndlessGameUI.instance.state == EndlessGameUI.State.GameOver) return; + if (alwaysGainCurrency || !alwaysGainCurrency && EndlessLeveltate != LevelState.Building && EndlessLeveltate != LevelState.Intro) { CurrencyGainer.Tick(Time.deltaTime); } + // buff选择完成,开始波次 if (!isBuffSelectCompleted) { isBuffSelectCompleted = true; - WaveManager.StartWaves(CurrentLevel); + if (CurrentLevel > startLevel) + WaveManager.InitPort(CurrentLevel); EndlessUIStart.instance.Restart(); + WaveManager.StartWaves(CurrentLevel); } // 本关卡所有波次全部生成完成 && 敌人全部被清理了,然后就去尝试进入下一关 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); + } } } @@ -320,12 +399,6 @@ if (WaveManager != null) WaveManager.AllWaveCompleted -= AllWaveCompleted; - - // Iterate through home bases and unsubscribe - for (int i = 0; i < NumberOfHomeBases; i++) - { - HomeBases[i].died -= OnHomeBaseDestroyed; - } } /// <summary> @@ -334,6 +407,12 @@ protected virtual void AllWaveCompleted() { IsAllWaveCompleted = true; + int score = EndlessPortData.GetLevelScore(CurrentLevel); + Debug.Log($"--------------------- 通过第{CurrentLevel}关,+{score}分 ---------------------"); + // 关卡通过,加分 + EndlessScoreManager.instance.AddScore(score); + EndlessBossSkillManager.instance.ClearSkillList(); + EndlessBossCtrl.instance.ChangeState(EndlessBossActionState.Death); } /// <summary> @@ -343,9 +422,6 @@ { ++CurrentLevel; IsAllWaveCompleted = false; - - // 进入boss虚弱状态 - Debug.Log("--------------------- 进入boss虚弱状态 ---------------------"); // 所有关卡全部结束 if (CurrentLevel > EndlessPortData.MaxLevel) @@ -357,12 +433,24 @@ } /// <summary> + /// 新手更新关卡 + /// </summary> + public void NewbieUpdateLevel() + { + ++CurrentLevel; + WaveManager.InitPort(CurrentLevel); + IsAllWaveCompleted = false; + EndlessUIStart.instance.Restart(); + WaveManager.StartWaves(CurrentLevel); + } + + /// <summary> /// 延迟进入下一关 /// </summary> /// <returns></returns> private IEnumerator DelayToNextLevel() { - yield return new WaitForSeconds(5f); + yield return new WaitForSeconds(2f); BeginLevel(); } @@ -371,7 +459,18 @@ /// </summary> private void BeginLevel() { - ShowSelectBuffUI(); + if (EndlessGameUI.instance.state == EndlessGameUI.State.GameOver) return; + + if (CurrentLevel == startLevel) + WaveManager.InitPort(CurrentLevel); + + if (!GameConfig.IsNewbie) + ShowSelectBuffUI(); + else + { + EndlessUIStart.instance.Restart(); + WaveManager.StartWaves(CurrentLevel); + } } /// <summary> @@ -394,13 +493,14 @@ } /// <summary> - /// buff选择完成 + /// buff选择完成p /// </summary> /// <param name="index"></param> public void OnBuffSelectCompleted(int index) { isBuffSelectCompleted = false; - EndlessBuffManager.instance.AddBuff(EndlessBuffData.GetBuffByIndex(index)); + EndlessBuffManager.instance.AddBuff(EndlessBuffData.GetBuffById(22)); + EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.EndlessBuffRefresh); } /// <summary> @@ -463,6 +563,7 @@ /// </summary> protected virtual void SafelyCallLevelCompleted() { + EndlessDropManager.instance.PickUpAllDrop(); if (LevelCompleted != null) LevelCompleted(); } @@ -495,5 +596,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