wangguan
2020-11-24 a27b3510185c04eb385f5ab3ad24fd4e87a27626
Assets/Scripts/TowerDefense/UI/EndlessBossSkill/BossSkillBubbleBomb.cs
@@ -1,5 +1,3 @@
using TowerDefense.UI.HUD;
using Core.Utilities;
using System.Collections.Generic;
using UnityEngine;
using TowerDefense.Agents;
@@ -12,6 +10,9 @@
 */
namespace KTGMGemClient
{
    /// <summary>
    /// 泡泡炸弹配置数据
    /// </summary>
    public class BubbleBombConfig
    {
        public BubbleBombAgent Agent { get; set; }
@@ -81,10 +82,7 @@
    public class BossSkillBubbleBomb : EndlessBossSkill
    {
        public BossSkillBubbleBomb(boss_skill param) : base(param)
        {
            random = new System.Random();
        }
        public BossSkillBubbleBomb(boss_skill param) : base(param) { }
        /// <summary>
        /// 被攻击的次数
@@ -98,14 +96,10 @@
        /// </summary>
        protected List<BubbleBombConfig> bubbleBombList;
        protected System.Random random;
        /// <summary>
        /// 泡泡炸弹对象池
        /// </summary>
        protected List<GameObject> bubbleBombPool;
        protected int capacity = 10;
        private int getCount;
@@ -118,7 +112,6 @@
        {
            base.ReleaseSkill();
            Debug.Log("--------------------- 泡泡炸弹释放 ---------------------");
            // cx test
            SpawnBubbleBomb();
        }
@@ -159,6 +152,7 @@
                bubbleBomb.AgentType = SpawnAgentType.BubbleBomb;
                bubbleBomb.opponentAgent = false;
                bubbleBomb.Reset();
                bubbleBomb.Initialize();
                // 出生位置
                Vector3 spawnPosition = EndlessLevelManager.instance.GetTunelWorldPosition(tunelIdList[i], (EndlessBossSkillTunelType)SkillData.target[1]);
@@ -176,39 +170,6 @@
                config.MoveSpeed = SkillData.effect[1];
                bubbleBombList.Add(config);
            }
        }
        /// <summary>
        /// 获取赛道列表
        /// </summary>
        protected List<int> GetTunelList()
        {
            List<int> tunelIdList = new List<int>();
            int count = 0;
            // 剩余没有用到的赛道
            List<int> remainList = new List<int>() { 1, 2, 3, 4, 5 };
            for (int i = 0; i < SkillData.tunnel.Count; ++i)
            {
                // 统计6这种类型的数量
                if (SkillData.tunnel[i] == 6)
                {
                    ++count;
                    continue;
                }
                tunelIdList.Add(SkillData.tunnel[i]);
                remainList.Remove(SkillData.tunnel[i]);
            }
            for (int i = 0; i < count; ++i)
            {
                int num = random.Next(remainList.Count);
                tunelIdList.Add(remainList[num]);
                remainList.Remove(remainList[num]);
            }
            return tunelIdList;
        }
        public override void Reset()
@@ -246,18 +207,9 @@
        public override void Init()
        {
            base.Init();
            Debug.Log("--------------------- 泡泡炸弹技能初始化 ---------------------");
            Debug.Log("---- 泡泡炸弹技能初始化 ----");
            bubbleBombList = new List<BubbleBombConfig>();
            bubbleBombPool = new List<GameObject>();
            GameObject prefab = Resources.Load<GameObject>(prefabPath);
            for (int i = 0; i < capacity; ++i)
            {
                GameObject obj = GameObject.Instantiate(prefab);
                obj.SetActive(false);
                bubbleBombPool.Add(obj);
            }
        }
        /// <summary>
@@ -335,9 +287,10 @@
                {
                    BubbleBombConfig config = bubbleBombList[i];
                    // 攻击次数够了被打死了 或者 达到基地了
                    if (config.Agent.bInDeathState) return;
                    if (config.IsAttackDeath || config.IsArrived) return;
                    ++config.AttackCount;
                    Debug.Log($"---- BubbleBombAgent Id: {id}, AttackCount: {config.AttackCount} ----");
                    if (config.AttackCount >= config.NeedAttackCount)
                        AgentDead(config);
@@ -359,7 +312,7 @@
                {
                    BubbleBombConfig config = bubbleBombList[i];
                    if (config.Agent.bInDeathState) return;
                    if (config.IsAttackDeath || config.IsArrived) return;
                    AgentDead(config);
                    break;
@@ -380,7 +333,7 @@
                {
                    BubbleBombConfig config = bubbleBombList[i];
                    if (config.Agent.bInDeathState) return;
                    if (config.IsAttackDeath || config.IsArrived) return;
                    config.IsDizzinessed = true;
                    config.Agent.CanMove = false;
@@ -397,11 +350,10 @@
        /// <param name="config"></param>
        private void AgentDead(BubbleBombConfig config)
        {
            config.IsAttackDeath = true;
            AgentInsManager.instance.removeAgent(config.Agent);
            config.Agent.StopNormalEffect();
            config.Agent.PlayExplodeEffect();
            AgentInsManager.instance.removeAgent(config.Agent);
            config.Agent.bInDeathState = true;
            config.IsAttackDeath = true;
        }
        /// <summary>
@@ -411,10 +363,9 @@
        private void AgentArrived(BubbleBombConfig config)
        {
            config.IsArrived = true;
            AgentInsManager.instance.removeAgent(config.Agent);
            config.Agent.StopNormalEffect();
            config.Agent.PlayExplodeEffect();
            AgentInsManager.instance.removeAgent(config.Agent);
            config.Agent.bInDeathState = true;
        }
        public override void Update(float deltaTime)
@@ -424,6 +375,8 @@
            for (int i = 0; i < bubbleBombList.Count; ++i)
            {
                BubbleBombConfig config = bubbleBombList[i];
                if (config.Agent == null || config.obj == null) continue;
                // 泡泡炸弹已经触发了攻击,延时一会过后掉爱心
                if (config.IsAttack)
@@ -469,7 +422,7 @@
                }
                // 更新移动
                if (config.Agent != null && !config.Agent.bInDeathState && config.Agent.CanMove)
                if (config.Agent != null && config.Agent.CanMove)
                {
                    Vector3 pos = config.obj.transform.position;
                    pos.z -= deltaTime * config.MoveSpeed;