From 439510ca0d2da7fa0af0496d4a05096841f01f8f Mon Sep 17 00:00:00 2001 From: wangguan <wangguan@kt007.com> Date: Mon, 26 Oct 2020 14:20:42 +0800 Subject: [PATCH] 新手引导2.0 --- Assets/Scripts/TowerDefense/Affectors/AttackAffector.cs | 91 ++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 89 insertions(+), 2 deletions(-) diff --git a/Assets/Scripts/TowerDefense/Affectors/AttackAffector.cs b/Assets/Scripts/TowerDefense/Affectors/AttackAffector.cs index 43013f7..5ed2192 100644 --- a/Assets/Scripts/TowerDefense/Affectors/AttackAffector.cs +++ b/Assets/Scripts/TowerDefense/Affectors/AttackAffector.cs @@ -102,6 +102,18 @@ protected Targetable m_TrackingEnemy; /// <summary> + /// 处理装弹时间. + /// </summary> + protected float fillBulletTime = 0.0f; + + /// <summary> + /// 充能时间 + /// </summary> + protected float energyCalTime = 0; + protected float fInEnergy = 0; + protected float fBackupTimer = 0.0f; + + /// <summary> /// Gets the search rate from the targetter /// </summary> public float searchRate @@ -218,11 +230,70 @@ m_Launcher = GetComponent<ILauncher>(); } + + protected void updateTowerSkillData() + { + // + // 预留出来装填子弹的时间. + if (fillBulletTime > 0) + { + fillBulletTime -= Time.deltaTime; + if (fillBulletTime <= 0.3f) + { + if (towerPtr && towerPtr.bulletCtl) + towerPtr.bulletCtl.resetToMaxBullet(); + } + + if (fillBulletTime <= 0) + { + fillBulletTime = 0; + } + } + + // + // 充能时间的处理 + if( towerPtr && towerPtr.energyCtl) + { + if( this.fInEnergy <= 0) + { + this.energyCalTime += Time.deltaTime; + float process = energyCalTime % 11.0f; + int proint = (int)Math.Floor(process); + towerPtr.energyCtl.SetEnergyProgress(proint); + if (proint == 10) + { + fInEnergy = 5.0f; + + // 设置多倍攻击速度 + fBackupTimer = m_FireTimer; + m_FireTimer = m_FireTimer / 3.0f; + } + } + else + { + fInEnergy -= Time.deltaTime; + if( fInEnergy <= 0) + { + fInEnergy = 0.0f; + this.energyCalTime = 0.0f; + towerPtr.energyCtl.SetEnergyProgress(0); + + // 恢复正常攻击速度 + m_FireTimer = fBackupTimer; + } + } + + } + } + /// <summary> /// Update the timers /// </summary> protected virtual void Update() { + // 处理当前Affector所在Tower对应的技能 + updateTowerSkillData(); + m_FireTimer -= Time.deltaTime; if( trackingEnemy == null ) m_TrackingEnemy = targetter.GetTarget(waveLineID, bWoodAffector); @@ -230,6 +301,10 @@ { OnFireTimer(); m_FireTimer = 1 / fireRate; + + // 多倍攻速: + if (fInEnergy > 0.0f) + m_FireTimer = m_FireTimer / 3.0f; } } @@ -254,11 +329,10 @@ /// </summary> protected virtual void FireProjectile() { - // WORK START: 确保获取 // 不再处理多子弹攻击,确保只有一个弹道 isMultiAttack = false; m_TrackingEnemy = targetter.GetTarget( waveLineID, bWoodAffector ); - if (m_TrackingEnemy == null) + if ( (m_TrackingEnemy == null) || (fillBulletTime>0) ) { if (this.towerPtr) towerPtr.setTowerState(false); @@ -269,6 +343,19 @@ towerPtr.setTowerState(true); } + // + // 处理子弹充能相关的内容 + if( towerPtr && (towerPtr.bulletCtl != null)) + { + int bnum = towerPtr.bulletCtl.decBullet(); + // + if (bnum == 0) + { + damagerProjectile.damageMulti = 2.0f; + fillBulletTime = 2.0f; + } + } + if (isMultiAttack) { List<Targetable> enemies = towerTargetter.GetAllTargets(); -- Gitblit v1.9.1