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