From e1a9ed955b247e4cc4615e8700b0ea34d7683224 Mon Sep 17 00:00:00 2001 From: liuzhiwei <liuzhiwei@qq.com> Date: Tue, 15 Dec 2020 17:19:48 +0800 Subject: [PATCH] Merge branch 'master' of http://172.16.1.52:8090/r/GemBattle into master --- Assets/Scripts/TowerDefense/UI/FreezeBreath.cs | 51 ++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 48 insertions(+), 3 deletions(-) diff --git a/Assets/Scripts/TowerDefense/UI/FreezeBreath.cs b/Assets/Scripts/TowerDefense/UI/FreezeBreath.cs index 28b05e4..d3affd3 100644 --- a/Assets/Scripts/TowerDefense/UI/FreezeBreath.cs +++ b/Assets/Scripts/TowerDefense/UI/FreezeBreath.cs @@ -1,5 +1,4 @@ using UnityEngine.UI; -using System.Collections; using System.Collections.Generic; using UnityEngine; using DG.Tweening; @@ -8,6 +7,8 @@ using TowerDefense.Agents; using Core.Health; using TowerDefense.UI.HUD; +using TowerDefense.Towers; +using TowerDefense.Towers.Projectiles; /** * 水精灵技能-冷冻气息控制脚本 @@ -83,7 +84,7 @@ /// </summary> /// <param name="waveLineId">哪条兵线</param> /// <param name="damage">伤害值</param> - public void ReleaseFreeze(int waveLineId, float damage, IAlignmentProvider alignmentProvider) + public void ReleaseFreeze(int waveLineId, Tower tower, IAlignmentProvider alignmentProvider) { WaveLineAgentInsMgr[] agentInsMgrs = AgentInsManager.instance.GetWaveLineList(); WaveLineAgentInsMgr waveLineAgentInsMgr = agentInsMgrs[waveLineId]; @@ -110,13 +111,31 @@ if (agent.AgentType == SpawnAgentType.Normal) { + float damage = GetFinalDamage(tower, agent); + bool needFrost = BallisticAttack.HandleWaterFrost(201, agent, ref damage); agent.addSpeedSlowRate(0.15f); agent.PlayOnHitImmediately(); - EndlessGameUI.instance.FloatSlowDownWord(agent.position); + + if (!agent.HasSlowDownText) + { + EndlessGameUI.instance.FloatSlowDownWord(agent.position); + agent.HasSlowDownText = true; + } + + agent.TakeDamage(damage, agent.position, alignmentProvider); if (agent.isDead) ++deathCount; + else if (needFrost) + { + agent.IsFrost = true; + agent.FrostRemainTime = FrostTimeAdd.DefaultFrostTime; + FrostTimeAdd frostTimeAdd = (FrostTimeAdd)EndlessBuffManager.instance.GetBuffInstanceByType(EndlessBuffEffectType.FrostTimeAdd); + + if (frostTimeAdd != null) + agent.FrostRemainTime = frostTimeAdd.GetFrostTime(201); + } } else if (agent.AgentType == SpawnAgentType.BubbleBomb) EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.EndlessBossSkillBubbleBombGetHit, (agent as BubbleBombAgent).Id); @@ -124,6 +143,30 @@ if (deathCount > 1) EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.EndlessOneTimeKillCount, deathCount); + } + + private float GetFinalDamage(Tower tower, Agent agent) + { + if (tower == null || agent == null) return 0; + + int elfId = 201; + // 基础伤害 = elf_info 基础攻击力 * elf_upgrade 攻击比率 / 1000f + float basicDamage = ElfInfoData.GetBasicDamage(elfId, tower.currentLevel); + elf_info info = ElfInfoData.GetDataById(elfId); + + // 处理PVE无尽模式,buff增加的伤害 + if (EndlessBuffManager.instanceExists) + basicDamage += EndlessBuffManager.instance.ProcessEndlessBuffAttack(basicDamage, elfId); + + bool crit = BallisticAttack.IsCrit(elfId); + + if (crit) + { + float basicCritDamageRate = info != null ? info.b_critdmg / 1000f : 0f; + basicDamage *= 1 + basicCritDamageRate + BallisticAttack.GetCritDamageRate(elfId); + } + + return basicDamage; } public void PlayFreezeEffect(int waveLineId) @@ -141,6 +184,8 @@ ps.transform.position = EndlessLevelManager.instance.WaveManager.GetWaveEndPos(waveLineId); ps.Play(); + AudioSourceManager.Ins.Play(AudioEnum.WaterTowerSkill); + } } } \ No newline at end of file -- Gitblit v1.9.1