wangguan
2020-11-17 3da3d10bfdd30a1ad7f8c48ab9fd7e7745e3d053
Assets/Scripts/TowerDefense/Towers/Projectiles/BallisticAttack.cs
@@ -36,19 +36,41 @@
        /// 处理代理收到的伤害,这里需要判断代理的类型分别去处理
        /// </summary>
        /// <param name="enemy"></param>
        public void DealDamage(Targetable enemy)
        /// <param name="attributeId">子弹的属性id</param>
        public void DealDamage(Targetable enemy, int attributeId = -1)
        {
            switch ((enemy as Agent).AgentType)
            {
                case SpawnAgentType.Normal:
                    HandleNormal(enemy);
                    (enemy as Agent).PlayGetHitParticle(attributeId);
                    break;
                case SpawnAgentType.BubbleBomb:
                    HandleBubbleBomb(enemy);
                    break;
                case SpawnAgentType.WoodPile:
                    HandleWoodPile(enemy, attributeId);
                    break;
            }
        }
        /// <summary>
        /// 处理木桩墙壁收到的伤害
        /// </summary>
        /// <param name="enemy"></param>
        private void HandleWoodPile(Targetable enemy, int id)
        {
            float finalDamage = damager.finalDamage;
            if (id == 10101)
                finalDamage *= (enemy as WoodPileAgent).FireHurtRate;
            int tid = enemy.liveID;
            Vector3 backPos = enemy.position;
            // 这里也可以把碰撞点传进来
            enemy.TakeDamage(finalDamage, enemy.position, damager.alignmentProvider);
            EndlessGameUI.instance.generateBloodText(backPos, finalDamage);
        }
        /// <summary>
@@ -68,14 +90,16 @@
        private void HandleNormal(Targetable enemy)
        {
            float finalDamage = damager.finalDamage;
            bool crit = damager.isCrit;
            if (crit)
                finalDamage += finalDamage;
            // bool crit = damager.isCrit;
            bool crit = false;
            // if (crit)
            //     finalDamage += finalDamage;
            // 精英怪和Boss双倍攻击.
            bool doubleHit = damager.doubleHit && enemy.bElit;
            if (doubleHit)
                finalDamage *= 2;
            bool doubleHit = false;
            // bool doubleHit = damager.doubleHit && enemy.bElit;
            // if (doubleHit)
            //     finalDamage *= 2;
            // 处理光塔对应的攻击增加:
            if (attackRise > 0)
@@ -87,15 +111,25 @@
            // 处理PVE无尽模式,buff增加的伤害
            finalDamage += ProcessEndlessBuffAttack(finalDamage);
            int deathCount = 0;
            // 提前处理非当前Enemy的爆炸攻击:
            if (chainAttackRate > 0)
                AgentInsManager.instance.StartExplodeAttack((Agent)enemy, finalDamage);
                deathCount = AgentInsManager.instance.StartExplodeAttack((Agent)enemy, finalDamage);
            int tid = enemy.liveID;
            Vector3 backPos = enemy.position;
            // 这里也可以把碰撞点传进来
            enemy.TakeDamage(finalDamage, enemy.position, damager.alignmentProvider);
            enemy.TakeDamage(finalDamage, enemy.position, damager.alignmentProvider, 0);
            if (chainAttackRate > 0)
            {
                if (enemy.isDead)
                    ++deathCount;
                if (deathCount > 1)
                    EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.EndlessOneTimeKillCount, deathCount);
            }
            // 处理塔位的技能攻击:
            ProcessTowerAttributeAttack(enemy, finalDamage, attributeId);
@@ -135,7 +169,7 @@
                add += list[i].Config.buff_effect[2];
            }
            return finalDamage * (1 + ratio / 100f) + add;
            return finalDamage * (ratio / 100f) + add;
        }
        /// <summary>
@@ -153,8 +187,8 @@
                    enemy.SetTargetableMatColor(Color.blue);
                    break;
                case 3:  // 中毒
                    enemy.poisonAgent(damage, attid);
                    enemy.SetTargetableMatColor(Color.green);
                    // enemy.poisonAgent(damage, attid);
                    // enemy.SetTargetableMatColor(Color.green);
                    break;
                case 5:  // 破甲
                    enemy.bShieldBreak = true;