From 1c3d649735e61a65087d9c281729912831f95fce Mon Sep 17 00:00:00 2001 From: wangguan <wangguan@kt007.com> Date: Tue, 24 Nov 2020 10:55:11 +0800 Subject: [PATCH] 修改技能为右侧充能释放 --- Assets/Scripts/TowerDefense/Level/AgentInsManager.cs | 156 ++++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 138 insertions(+), 18 deletions(-) diff --git a/Assets/Scripts/TowerDefense/Level/AgentInsManager.cs b/Assets/Scripts/TowerDefense/Level/AgentInsManager.cs index a45f46f..3630a15 100644 --- a/Assets/Scripts/TowerDefense/Level/AgentInsManager.cs +++ b/Assets/Scripts/TowerDefense/Level/AgentInsManager.cs @@ -676,6 +676,7 @@ if (slinfo.atcmod.Count < 2) return; float radius = slinfo.atcmod[1]; + int deathCount = 0; for (int ti = 0; ti < mgrList.Length; ti++) { @@ -683,6 +684,14 @@ for (int idx = 0; idx < mgr.listAgent.Count; idx++) { Agent eag = mgr.listAgent[idx]; + Vector3 fpos = eag.transform.position; + fpos.y = 0; + float dist = Vector3.Distance(fpos, pos); + + if (radius < dist) + continue; + + bool isDeath = eag.isDead; if (eag.AgentType == SpawnAgentType.BubbleBomb) { @@ -695,12 +704,6 @@ } else { - Vector3 fpos = eag.transform.position; - fpos.y = 0; - float dist = Vector3.Distance(fpos, pos); - if (radius < dist) - continue; - float damage = slinfo.skilleffect[2]; damage += (slinfo.skilleffect[1] / 100.0f * eag.configuration.maxHealth); damage = (float)Math.Floor(damage); @@ -714,6 +717,9 @@ EndlessGameUI.instance.generateBloodText(fpos, damage, false, false); } + if (!isDeath && eag.isDead) + ++deathCount; + if (eag.isDead) continue; else @@ -722,6 +728,8 @@ } } + if (deathCount > 1) + EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.EndlessOneTimeKillCount, deathCount); return; } @@ -749,13 +757,21 @@ if (wavelineIns == null) return; List<Agent> listAg = wavelineIns.listAgent; + // 统计被火技能直接烧死的数量 + int deathCount = 0; for (int ti = listAg.Count - 1; ti >= 0; ti--) { Agent eag = listAg[ti]; + if (eag.isDead) continue; + if (eag.AgentType == SpawnAgentType.BubbleBomb) + { EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.EndlessFireSkillKillBubbleBomb, (eag as BubbleBombAgent).Id); + // 泡泡炸弹是直接就被火技能秒杀的 + ++deathCount; + } else { Vector3 fpos = eag.transform.position; @@ -771,8 +787,96 @@ else if (EndlessGameUI.instanceExists) EndlessGameUI.instance.generateBloodText(fpos, damage, false, false); } + + eag.PlayFireSkillHit(); + + if (eag.isDead) + ++deathCount; + } + + } + if (deathCount > 1) + EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.EndlessOneTimeKillCount, deathCount); + } + + + /// <summary> + /// 处理战场上的兵线伤害,以兵线为单位对怪物进行伤害---所有兵线 + /// </summary> + /// <param name="waveline"></param> + /// <param name="sid"></param> + /// <param name="slevel"></param> + /// <param name="opponent"></param> + public void ExecAllWavelineAttack(int sid, int slevel, bool opponent) + { + skilllevelinfo slinfo = JsonDataCenter.GetSkillLevelInfo(sid, slevel + 1); + if (slinfo == null) return; + + WaveLineAgentInsMgr wavelineIns; + if (opponent) + { + for (int i = 0; i < oppoAgentWaveLineArray.Length; i++) + { + wavelineIns = oppoAgentWaveLineArray[i]; + CalculateWavelineAttack(slinfo, wavelineIns, sid, slevel); } } + else + { + for (int i = 0; i < agentWaveLineArray.Length; i++) + { + wavelineIns = agentWaveLineArray[i]; + CalculateWavelineAttack(slinfo, wavelineIns, sid, slevel); + } + } + + } + + private void CalculateWavelineAttack(skilllevelinfo slinfo, WaveLineAgentInsMgr wavelineIns, int sid, int slevel) + { + if (wavelineIns == null) return; + + List<Agent> listAg = wavelineIns.listAgent; + // 统计被火技能直接烧死的数量 + int deathCount = 0; + + for (int ti = listAg.Count - 1; ti >= 0; ti--) + { + Agent eag = listAg[ti]; + + if (eag.isDead) continue; + + if (eag.AgentType == SpawnAgentType.BubbleBomb) + { + EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.EndlessFireSkillKillBubbleBomb, (eag as BubbleBombAgent).Id); + // 泡泡炸弹是直接就被火技能秒杀的 + ++deathCount; + } + else + { + Vector3 fpos = eag.transform.position; + float damage = slinfo.skilleffect[2]; + damage += (slinfo.skilleffect[1] / 100.0f * eag.configuration.maxHealth); + damage = (float)Math.Floor(damage); + + eag.TakeDamage(damage, fpos, null); + if (!eag.opponentAgent) + { + if (GameUI.instanceExists) + GameUI.instance.generateBloodText(fpos, damage, false, false); + else if (EndlessGameUI.instanceExists) + EndlessGameUI.instance.generateBloodText(fpos, damage, false, false); + } + + eag.PlayFireSkillHit(); + + if (eag.isDead) + ++deathCount; + } + + } + if (deathCount > 1) + EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.EndlessOneTimeKillCount, deathCount); } /// <summary> @@ -823,7 +927,7 @@ /// 对当前Agent同一列内一定区域内的怪物进行攻击: /// </summary> /// <param name="ag"></param> - public void StartExplodeAttack(Agent ag, float damage) + public int StartExplodeAttack(Agent ag, float damage) { WaveLineAgentInsMgr tmgr; if (!ag.opponentAgent) @@ -831,30 +935,45 @@ else tmgr = this.oppoAgentWaveLineArray[ag.waveLineID]; - if (tmgr.getAgentInsNum() <= 1) return; + if (tmgr.getAgentInsNum() <= 1) return 0; List<Agent> listAg = tmgr.listAgent; Vector3 tpos = ag.transform.position; + int deathCount = 0; + for (int ti = listAg.Count - 1; ti >= 0; ti--) { Agent eag = listAg[ti]; if (eag == ag) continue; - Vector3 fpos = eag.transform.position; - tpos.y = 0; - fpos.y = 0; - if (Vector3.Distance(tpos, fpos) < 8) + + if (eag.AgentType == SpawnAgentType.BubbleBomb) { - eag.TakeDamage(damage, fpos, null); - if (!eag.opponentAgent) + EventCenter.Ins.BroadCast((int)KTGMGemClient.EventType.EndlessBossSkillBubbleBombGetHit, (eag as BubbleBombAgent).Id); + } + else + { + Vector3 fpos = eag.transform.position; + tpos.y = 0; + fpos.y = 0; + if (Vector3.Distance(tpos, fpos) < 8) { - if (GameUI.instanceExists) - GameUI.instance.generateBloodText(fpos, damage, false, false); - else if (EndlessGameUI.instanceExists) - EndlessGameUI.instance.generateBloodText(fpos, damage, false, false); + eag.TakeDamage(damage, fpos, null); + if (!eag.opponentAgent) + { + if (GameUI.instanceExists) + GameUI.instance.generateBloodText(fpos, damage, false, false); + else if (EndlessGameUI.instanceExists) + EndlessGameUI.instance.generateBloodText(fpos, damage, false, false); + } + if (eag.isDead) + ++deathCount; } } } + + return deathCount; + /* foreach (Agent eag in listAg) { if (eag == ag) continue; @@ -910,6 +1029,7 @@ // 每一个被链式攻击的怪物,飘血. foreach (Agent ag in listBlood) { + if (ag.AgentType != SpawnAgentType.Normal) continue; int tid = ag.liveID; Damager damager = ag.GetComponent<Damager>(); ag.TakeDamage(chainAttackHurt, ag.position, alignment); -- Gitblit v1.9.1