wangguan
2020-11-11 fd1ac06475bf155996ac4aed6307eb43f9e04f53
Assets/Scripts/TowerDefense/Level/EndlessLevelManager.cs
@@ -24,7 +24,7 @@
    {
        /// <summary>
        /// 起始关卡
        /// </summary>
        /// </summary>'
        /// <value></value>
        protected int startLevel { get; set; } = 1;
@@ -169,6 +169,51 @@
        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>
@@ -286,17 +331,29 @@
            NumberOfHomeBases = HomeBases.Length;
            NumberOfHomeBasesLeft = NumberOfHomeBases;
            for (int i = 0; i < NumberOfHomeBases; i++)
            {
                HomeBases[i].homebaseIdx = i % MAX_TOWER;
                HomeBases[i].died += OnHomeBaseDestroyed;
            }
            // 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>
@@ -304,6 +361,8 @@
        /// </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);
@@ -313,7 +372,8 @@
            if (!isBuffSelectCompleted)
            {
                isBuffSelectCompleted = true;
                WaveManager.InitPort(CurrentLevel);
                if (CurrentLevel > startLevel)
                    WaveManager.InitPort(CurrentLevel);
                EndlessUIStart.instance.Restart();
                WaveManager.StartWaves(CurrentLevel);
            }
@@ -348,10 +408,10 @@
                WaveManager.AllWaveCompleted -= AllWaveCompleted;
            // Iterate through home bases and unsubscribe
            for (int i = 0; i < NumberOfHomeBases; i++)
            {
                HomeBases[i].died -= OnHomeBaseDestroyed;
            }
            // for (int i = 0; i < NumberOfHomeBases; i++)
            // {
            //     HomeBases[i].died -= OnHomeBaseDestroyed;
            // }
        }
        /// <summary>
@@ -360,6 +420,8 @@
        protected virtual void AllWaveCompleted()
        {
            IsAllWaveCompleted = true;
            EndlessBossSkillManager.instance.ClearSkillList();
            EndlessBossCtrl.instance.ChangeState(EndlessBossActionState.Death);
        }
        /// <summary>
@@ -397,7 +459,7 @@
        /// <returns></returns>
        private IEnumerator DelayToNextLevel()
        {
            yield return new WaitForSeconds(5f);
            yield return new WaitForSeconds(2f);
            BeginLevel();
        }