IEnumerator StunTimer(AbilitiesAndStatusEffects effect) { yield return(new WaitForSeconds(effect.GetStatusEffectLifeTime())); isStunned = false; GetComponent <DefenceApplicator>().RemoveStatusEffect(effect.GetStatusEffect()); }
IEnumerator Relentless(AbilitiesAndStatusEffects ability) { Debug.Log("Relentless started."); Attacker attacker = GetComponent <Attacker>(); float startingAttackSpeed = attacker.GetAttackSpeed(); isRelentlessInProgress = true; bool isEnemyInRange = true; while (isEnemyInRange) { Debug.Log("Relentless continues."); isEnemyInRange = false; Enemy[] enemies = FindObjectsOfType <Enemy>(); foreach (Enemy enemy in enemies) { if (Vector3.Distance(enemy.transform.position, transform.position) <= attacker.GetRange()) { isEnemyInRange = true; } } yield return(new WaitForSeconds(1f)); attacker.SetAttackSpeed(attacker.GetAttackSpeed() + ability.GetAttackSpeedIncrease()); Debug.Log("New attack speed = " + attacker.GetAttackSpeed()); } Debug.Log("Relentless Ended."); attacker.SetAttackSpeed(startingAttackSpeed); isRelentlessInProgress = false; }
public void ApplyStatusEffect(AbilitiesAndStatusEffects effect) { if (poisonCo != null) { StopCoroutine(poisonCo); } poisonCo = StartCoroutine(ProcessPoison(effect)); }
IEnumerator ProcessPoison(AbilitiesAndStatusEffects effect) { for (int i = 0; i < effect.GetStatusEffectLifeTime(); i++) { yield return(new WaitForSeconds(1)); LoseHealth(effect.GetStatusEffectDamage()); } GetComponent <DefenceApplicator>().RemoveStatusEffect(effect.GetStatusEffect()); }
private void TriggerStatusEffect(AbilitiesAndStatusEffects effect) { if (effect.GetStatusEffect() == statusEffects.Poisoned) { GetComponent <Health>().ApplyStatusEffect(effect); } if (effect.GetStatusEffect() == statusEffects.Stunned) { GetComponent <Mover>().ApplyStatusEffect(effect); } }
public void ApplyStatusEffect(AbilitiesAndStatusEffects effect) { if (Mathf.RoundToInt(Random.Range(0.5f, effect.GetEffectChance() + (0.5f - Mathf.Epsilon))) == 1) { isStunned = true; navMeshAgent.ResetPath(); StartCoroutine(StunTimer(effect)); } else { GetComponent <DefenceApplicator>().RemoveStatusEffect(effect.GetStatusEffect()); } }