From 515d6439e79793dc903b249cfeb8fc2f217f2e4e Mon Sep 17 00:00:00 2001
From: chenxin <chenxin6991@163.com>
Date: Wed, 11 Nov 2020 18:57:47 +0800
Subject: [PATCH] Merge commit 'f2f4e1e45981bb294a5221ade7b4646cc3e29d35' into master

---
 Assets/Scripts/TowerDefense/Level/EndlessLevelManager.cs |  122 +++++++++++++++++++++++++++++++++++-----
 1 files changed, 107 insertions(+), 15 deletions(-)

diff --git a/Assets/Scripts/TowerDefense/Level/EndlessLevelManager.cs b/Assets/Scripts/TowerDefense/Level/EndlessLevelManager.cs
index 6045c3c..1b382f2 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>
@@ -160,6 +165,53 @@
         /// </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>
@@ -277,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>
@@ -296,16 +354,21 @@
         /// </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);
             }
 
             // 本关卡所有波次全部生成完成 && 敌人全部被清理了,然后就去尝试进入下一关
@@ -336,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>
@@ -350,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>
@@ -370,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();
         }
 
@@ -385,6 +460,9 @@
         private void BeginLevel()
         {
             if (EndlessGameUI.instance.state == EndlessGameUI.State.GameOver) return;
+
+            if (CurrentLevel == startLevel)
+                WaveManager.InitPort(CurrentLevel);
 
             if (!GameConfig.IsNewbie)
                 ShowSelectBuffUI();
@@ -539,5 +617,19 @@
             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