wangguan
2020-11-18 484de84927f4ee4de80558c31f1d19be0ec09f3c
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 = 1;
        public float FireRate
        {
            get { return 1 / GetFireDuration(); }
        }
        /// <summary>
        /// 是否木属性数据
@@ -134,6 +135,29 @@
        protected float inFreezeBreath = 0;
        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);
                float rateAdd = fireRateAdd.GetFireSpeedAdd(towerPtr.attributeId);
                return rateAdd > 1 ? rateAdd : fireSpeed;
            }
        }
        /// <summary>
        /// Gets the search rate from the targetter
@@ -289,7 +313,7 @@
                if (fillBulletTime <= 0.3f)
                {
                    if (towerPtr && towerPtr.bulletCtl)
                        towerPtr.bulletCtl.resetToMaxBullet();
                        towerPtr.bulletCtl.ResetToMaxBullet();
                }
                if (fillBulletTime <= 0)
@@ -315,11 +339,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 +380,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 +467,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 +490,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 +531,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 +546,6 @@
                    tmpDamager.damageMulti = 10.0f;
                    tmpDamager.damage = damagerProjectile.damage;
                }
            }
            else
            {