From 40b918d5189a154bc0ff31627e69867742934720 Mon Sep 17 00:00:00 2001 From: chenxin <chenxin6991@163.com> Date: Tue, 17 Nov 2020 21:10:05 +0800 Subject: [PATCH] buff补充 --- Assets/Scripts/TowerDefense/Affectors/AttackAffector.cs | 73 ++++++++++++++++++++++++++++-------- 1 files changed, 57 insertions(+), 16 deletions(-) diff --git a/Assets/Scripts/TowerDefense/Affectors/AttackAffector.cs b/Assets/Scripts/TowerDefense/Affectors/AttackAffector.cs index fdb705b..d677ae2 100644 --- a/Assets/Scripts/TowerDefense/Affectors/AttackAffector.cs +++ b/Assets/Scripts/TowerDefense/Affectors/AttackAffector.cs @@ -3,14 +3,11 @@ using ActionGameFramework.Audio; using ActionGameFramework.Health; using Core.Health; -using TowerDefense.Agents; using TowerDefense.Targetting; using TowerDefense.Towers; using TowerDefense.Towers.Projectiles; using UnityEngine; using KTGMGemClient; -using TowerDefense.Towers.TowerLaunchers; -using TowerDefense.Level; namespace TowerDefense.Affectors { @@ -56,12 +53,16 @@ /// </summary> public int maxAttackNum = 1; - /// <summary> /// The fire rate in fires-per-second /// </summary> - public float fireRate; + [SerializeField] + private float projectileFireRate; + public float FireRate + { + get { return 1 / GetFireDuration(); } + } /// <summary> /// 是否木属性数据 @@ -135,6 +136,27 @@ protected float freezeBreathBackTimer = 0; + private int towerAttributeId; + + /// <summary> + /// 火精灵技能固定攻击倍速 + /// </summary> + /// <value></value> + protected float fireSpeed { get; set; } = 5f; + + /// <summary> + /// 火精灵攻击最终攻击倍速,里面计算了buff增加的倍速 + /// </summary> + /// <value></value> + public float finalFireSpeed + { + get + { + FireRateAdd fireRateAdd = (FireRateAdd)EndlessBuffManager.instance.GetBuffInstanceByType(EndlessBuffEffectType.FireRateAdd); + return fireRateAdd.GetFireSpeedAdd(towerAttributeId); + } + } + /// <summary> /// Gets the search rate from the targetter /// </summary> @@ -185,6 +207,15 @@ public override TowerDefense.Targetting.Targetter GetTargetter() { return targetter; + } + + private void Start() + { + if (projectile != null) + { + Damager damager = projectile.GetComponent<Damager>(); + towerAttributeId = damager.TowerAttributeId; + } } /// <summary> @@ -289,7 +320,7 @@ if (fillBulletTime <= 0.3f) { if (towerPtr && towerPtr.bulletCtl) - towerPtr.bulletCtl.resetToMaxBullet(); + towerPtr.bulletCtl.ResetToMaxBullet(); } if (fillBulletTime <= 0) @@ -315,11 +346,11 @@ if (proint == 10) { fireState = true; - fInEnergy = 5.0f; + fInEnergy = finalFireSpeed; myTower.SetFireMatSpeed(true);//设置了火宝石快速攻击 // 设置多倍攻击速度 fBackupTimer = m_FireTimer; - m_FireTimer = m_FireTimer / 5.0f; + m_FireTimer = m_FireTimer / finalFireSpeed; towerPtr.uiProOffset = 0; towerPtr.PlayEnergyEffect(true); @@ -356,7 +387,7 @@ Damager damager = projectile.gameObject.GetComponent<Damager>(); float finalDamage = damager.damage; - List<EndlessBuffConfig> list = EndlessBuffManager.instance.GetBuffListByEffectType(EndlessBuffEffectType.Attack, towerPtr.attributeId); + List<EndlessBuffConfig> list = EndlessBuffManager.instance.GetBuffListByEffectType(EndlessBuffEffectType.AttackAdd, towerPtr.attributeId); float ratio = 0; float add = 0; @@ -443,6 +474,15 @@ } /// <summary> + /// 获取子弹发射时间间隔 + /// </summary> + public float GetFireDuration() + { + DecreaseTowerAttackCD endlessBuff = (DecreaseTowerAttackCD)EndlessBuffManager.instance.GetBuffInstanceByType(EndlessBuffEffectType.DecreaseTowerAttackCD); + return endlessBuff.GetDecreaseCD(towerPtr.attributeId, 1 / projectileFireRate); + } + + /// <summary> /// Update the timers /// </summary> protected virtual void Update() @@ -457,12 +497,12 @@ if (m_TrackingEnemy != null && m_FireTimer < 0) { - m_FireTimer = 1 / fireRate; + m_FireTimer = GetFireDuration(); if (fInEnergy > 0) - m_FireTimer /= 5; + m_FireTimer /= finalFireSpeed; - towerLevel.FireSpeed = fInEnergy > 0 ? 5f : 1f; + towerLevel.FireSpeed = fInEnergy > 0 ? finalFireSpeed : 1f; if (towerPtr && towerPtr.bulletCtl != null) { @@ -498,11 +538,13 @@ if (towerPtr && (towerPtr.bulletCtl != null)) { int bnum = towerPtr.bulletCtl.decBullet(); + // 暴击子弹的数量,如果获得相应buff可能会修改暴击子弹数量 + int critBulletNum = towerPtr.bulletCtl.CritBulletNum; - if (bnum == 0) + if (bnum < critBulletNum) { - //damagerProjectile.damageMulti = 10.0f; - fillBulletTime = 2.0f; + if (bnum == 0) + fillBulletTime = 2.0f; //这里需要替换特效 var poolable = Core.Utilities.Poolable.TryGetPoolable<Core.Utilities.Poolable>(woodProjectile_SP); @@ -511,7 +553,6 @@ tmpDamager.damageMulti = 10.0f; tmpDamager.damage = damagerProjectile.damage; } - } else { -- Gitblit v1.9.1