Beispiel #1
0
    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);
    }