liuzhiwei
2020-11-26 243d65af53aae9e3084f20ea9c5815f5b29df09e
Assets/Scripts/TowerDefense/Level/EndlessWave.cs
@@ -52,11 +52,6 @@
        public event Action SpawnNewAgent;
        /// <summary>
        /// 波次发生改变
        /// </summary>
        public event Action WaveChanged;
        /// <summary>
        /// 怪出生开始节点
        /// </summary>
        public Node StartingNode;
@@ -65,6 +60,11 @@
        /// 当前的兵线是否已经停止.
        /// </summary>
        protected bool isWaveStoped = false;
        /// <summary>
        /// 暂停兵线出怪
        /// </summary>
        protected bool isWavePaused = false;
        /// <summary>
        /// 怪物刷新速度的缩放.
@@ -91,9 +91,13 @@
            isWaveStoped = false;
            spawnedEnemies = 0;
            SpawnCurrent();
            spawnTimer = new RepeatingTimer(data.Config.interval / 1000f, SpawnCurrent);
            StartTimer(spawnTimer);
            if (!isWavePaused)
            {
                SpawnCurrent();
                StartTimer(spawnTimer);
            }
        }
        /// <summary>
@@ -108,22 +112,21 @@
        public void PauseWave()
        {
            PauseTimer(spawnTimer);
            isWaveStoped = true;
            isWavePaused = true;
        }
        public void RestartWave()
        {
            StartTimer(spawnTimer);
            isWaveStoped = false;
            isWavePaused = false;
            if (spawnedEnemies == 0)
                SpawnCurrent();
        }
        /// <summary>
        /// Handles spawning the current agent and sets up the next agent for spawning
        /// 在场景内孵化出来一个Boss,这个核心函数最后被规则性的数据接管
        /// </summary>
        protected virtual void SpawnCurrent()
        {
            if (isWaveStoped) return;
            if (isWaveStoped || isWavePaused) return;
            if (!TrySetupNextSpawn())
            {
@@ -134,8 +137,15 @@
            else
            {
                ++spawnedEnemies;
                if (SpawnNewAgent != null)
                    SpawnNewAgent();
                if (spawnedEnemies >= waveData.Config.amount)
                {
                    StopWave();
                    SafelyBroadcastWaveCompletedEvent();
                }
            }
        }
@@ -145,12 +155,16 @@
        /// <returns>Agent</returns>
        protected virtual void SpawnAgent()
        {
            int index = GetIndexByResId(waveData.EnemyData.resource);
            endless_enemy enemyData = waveData.EnemyDataList[waveData.Config.enemy_id > 0 ? 0 : spawnedEnemies];
            int index = GetIndexByResId(enemyData.resource);
            // 木属性小怪需要同时生成两个,先这么写吧(WTF)
            bool isDouble = waveData.EnemyData.resource == 103;
            bool isDouble = enemyData.resource == 103;
            Poolable agentPoolable = Poolable.TryGetPoolable<Poolable>(AgentConfigurationList[index].agentPrefab.gameObject);
            Agent newAgent = agentPoolable.GetComponent<Agent>();
            newAgent.EnemyData = enemyData;
            newAgent.transform.position = StartingNode.transform.position;
            if (isDouble)
@@ -166,9 +180,9 @@
            newAgent.Initialize();
            // 最终血量 = 基础血量 * 血量增幅,速度和金币都是一个公式
            float hp = waveData.Config.b_hp * waveData.EnemyData.hp_rate;
            float speed = waveData.Config.b_speed * waveData.EnemyData.speed_rate;
            int gold = waveData.Config.b_coin * waveData.EnemyData.coin_rate;
            float hp = waveData.Config.b_hp * enemyData.hp_rate;
            float speed = waveData.Config.b_speed * enemyData.speed_rate;
            int gold = waveData.Config.b_coin * enemyData.coin_rate;
            newAgent.SetAgentData(hp, speed, gold);
            // todo 这里先填1级后面需要修改
@@ -176,11 +190,11 @@
            // 加入Manager统一管理.
            AgentInsManager.instance.addAgent(newAgent);
            if (isDouble)
            {
                Poolable agentPoolable2 = Poolable.TryGetPoolable<Poolable>(AgentConfigurationList[index].agentPrefab.gameObject);
                Agent doubleAgent = agentPoolable2.GetComponent<Agent>();
                doubleAgent.EnemyData = enemyData;
                doubleAgent.transform.position = StartingNode.transform.position;
                Vector3 pos = doubleAgent.transform.position;
@@ -229,7 +243,7 @@
        }
        /// <summary>
        /// 暂时先这么处理
        /// 暂时先这么处理 cx test
        /// </summary>
        /// <param name="resId">endless_enemy表的资源id</param>
        /// <returns>所有可选的agent列表的索引</returns>