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