From 85a92b4fc459b46a8f780ac31a9425f87f48821f Mon Sep 17 00:00:00 2001
From: liuzhiwei <liuzhiwei@qq.com>
Date: Wed, 18 Nov 2020 13:54:12 +0800
Subject: [PATCH] Merge branch 'master' of http://172.16.1.52:8090/r/GemBattle into master

---
 Assets/Scripts/TowerDefense/Towers/Projectiles/BallisticAttack.cs |   61 +++++++++++++++++++-----------
 1 files changed, 39 insertions(+), 22 deletions(-)

diff --git a/Assets/Scripts/TowerDefense/Towers/Projectiles/BallisticAttack.cs b/Assets/Scripts/TowerDefense/Towers/Projectiles/BallisticAttack.cs
index 57c0333..6b86165 100644
--- a/Assets/Scripts/TowerDefense/Towers/Projectiles/BallisticAttack.cs
+++ b/Assets/Scripts/TowerDefense/Towers/Projectiles/BallisticAttack.cs
@@ -33,6 +33,13 @@
         public float attackRise { get; set; }
 
         /// <summary>
+        /// 基础增加暴击伤害率
+        /// </summary>
+        private float baseCritDamageRate = 0.5f;
+
+        public Tower TowerPtr;
+
+        /// <summary>
         /// 处理代理收到的伤害,这里需要判断代理的类型分别去处理
         /// </summary>
         /// <param name="enemy"></param>
@@ -43,7 +50,6 @@
             {
                 case SpawnAgentType.Normal:
                     HandleNormal(enemy);
-                    (enemy as Agent).PlayGetHitParticle(attributeId);
                     break;
                 case SpawnAgentType.BubbleBomb:
                     HandleBubbleBomb(enemy);
@@ -84,32 +90,42 @@
         }
 
         /// <summary>
+        /// 判断本次伤害是否暴击
+        /// </summary>
+        /// <returns></returns>
+        private bool IsCrit()
+        {
+            CritProbabilityAdd critProbabilityAdd = (CritProbabilityAdd)EndlessBuffManager.instance.GetBuffInstanceByType(EndlessBuffEffectType.CritProbabilityAdd);
+            float crit = critProbabilityAdd.GetCrit(TowerPtr.attributeId);
+            float random = UnityEngine.Random.Range(0, 1f);
+
+            return random <= crit;
+        }
+
+        /// <summary>
+        /// 获取暴击伤害增加比率
+        /// </summary>
+        /// <returns></returns>
+        private float GetCritDamageRate()
+        {
+            CritDamageAdd critDamageAdd = (CritDamageAdd)EndlessBuffManager.instance.GetBuffInstanceByType(EndlessBuffEffectType.CritDamageAdd);
+            return critDamageAdd.GetCritDamageRate(TowerPtr.attributeId);
+        }
+
+        /// <summary>
         /// 处理普通小怪和boss收到的伤害
         /// </summary>
         /// <param name="enemy"></param>
         private void HandleNormal(Targetable enemy)
         {
             float finalDamage = damager.finalDamage;
-            // bool crit = damager.isCrit;
-            bool crit = false;
-            // if (crit)
-            //     finalDamage += finalDamage;
-
-            // 精英怪和Boss双倍攻击.
-            bool doubleHit = false;
-            // bool doubleHit = damager.doubleHit && enemy.bElit;
-            // if (doubleHit)
-            //     finalDamage *= 2;
-
-            // 处理光塔对应的攻击增加:
-            if (attackRise > 0)
-                finalDamage += (finalDamage * attackRise);
-            // 破甲状态
-            if (enemy.bShieldBreak)
-                finalDamage += (finalDamage * 0.1f);
+            bool crit = IsCrit();
 
             // 处理PVE无尽模式,buff增加的伤害
             finalDamage += ProcessEndlessBuffAttack(finalDamage);
+
+            if (crit)
+                finalDamage *= 1 + baseCritDamageRate + GetCritDamageRate();
 
             int deathCount = 0;
 
@@ -137,9 +153,9 @@
             if (!enemy.opponentAgent)
             {
                 if (GameUI.instanceExists)
-                    GameUI.instance.generateBloodText(backPos, finalDamage, crit, doubleHit);
+                    GameUI.instance.generateBloodText(backPos, finalDamage, crit);
                 else if (EndlessGameUI.instanceExists)
-                    EndlessGameUI.instance.generateBloodText(backPos, finalDamage, crit, doubleHit);
+                    EndlessGameUI.instance.generateBloodText(backPos, finalDamage, crit);
             }
 
             // 播放受击动画:
@@ -156,7 +172,7 @@
             // 非无尽模式
             if (!EndlessBuffManager.instanceExists) return 0;
 
-            List<EndlessBuffConfig> list = EndlessBuffManager.instance.GetBuffListByEffectType(EndlessBuffEffectType.Attack, attributeId);
+            List<EndlessBuffConfig> list = EndlessBuffManager.instance.GetBuffListByEffectType(EndlessBuffEffectType.AttackAdd, attributeId);
 
             if (list.Count == 0) return 0;
 
@@ -183,7 +199,8 @@
             switch (id)
             {
                 case 2:  // 减速.
-                    enemy.addSpeedSlowRate(0.25f);
+                    SlowDown slowDown = (SlowDown)EndlessBuffManager.instance.GetBuffInstanceByType(EndlessBuffEffectType.SlowDown);
+                    enemy.addSpeedSlowRate(0.25f + slowDown.GetSlowDownAdd(TowerPtr.attributeId));
                     enemy.SetTargetableMatColor(Color.blue);
                     break;
                 case 3:  // 中毒

--
Gitblit v1.9.1