private IEnumerator ExecuteAbility() { Coroutine effect = null; string log = ""; if (_choosedAbility.type == Ability.AbilityType.ATTACK) { if (_choosedAbility.target == Ability.AbilityTarget.MULTI) { foreach (Fighter fighter in _fighters.FindAll(e => e.player != _activeFighter.player && e.dead == false)) { effect = StartCoroutine(fighter.TakeDamage(_choosedAbility.damage)); // TODO : clean that and move to a different component GameObject bubble = Instantiate(damageBubble, new Vector3(fighter.transform.position.x, fighter.transform.position.y, 0f), Quaternion.identity, _activeFighter.transform.parent.parent); bubble.GetComponentInChildren <DamageTextAnimation>().ChangeText(_choosedAbility.damage.ToString()); } log = _activeFighter.name + " attack the enemies with " + _choosedAbility.abilityName; } else { effect = StartCoroutine(_fighterToAttack.TakeDamage(_choosedAbility.damage)); // TODO : clean that and move to a different component GameObject bubble = Instantiate(damageBubble, new Vector3(_fighterToAttack.transform.position.x, _fighterToAttack.transform.position.y, 0f), Quaternion.identity, _activeFighter.transform.parent.parent); bubble.GetComponentInChildren <DamageTextAnimation>().ChangeText(_choosedAbility.damage.ToString()); log = _activeFighter.name + " attack " + _fighterToAttack.name + " with " + _choosedAbility.abilityName; } } else { if (_choosedAbility.target == Ability.AbilityTarget.MULTI) { foreach (Fighter fighter in _fighters.FindAll(e => e.player == _activeFighter.player && e.dead == false)) { effect = StartCoroutine(fighter.Heal(_choosedAbility.heal)); } log = _activeFighter.name + " heal all alies with " + _choosedAbility.abilityName; } else { effect = StartCoroutine(_fighterToAttack.Heal(_choosedAbility.heal)); log = _activeFighter.name + " heal " + _fighterToAttack.name + " with " + _choosedAbility.abilityName; } } // Add debuff foreach (Status debuff in _choosedAbility.debuffs) { if (_choosedAbility.target == Ability.AbilityTarget.MULTI) { foreach (Fighter enemy in _fighters.FindAll(e => e.player != _activeFighter.player && e.dead == false)) { enemy.AddDebuff(debuff); } } else { _fighterToAttack.AddDebuff(debuff); } } // Add buff foreach (Status buff in _choosedAbility.buffs) { if (_choosedAbility.target == Ability.AbilityTarget.MULTI) { foreach (Fighter ally in _fighters.FindAll(e => e.player == _activeFighter.player && e.dead == false)) { ally.AddBuff(buff); } } else { _activeFighter.AddBuff(buff); } } // Display combat log EventManager.TriggerEvent(EventList.DISPLAY_TEXT.ToString(), new { text = log }); while (!CombatLogManager.instance.doneDisplaying) { yield return(null); } yield return(effect); }