IEnumerator RangeAttack()
    {
        rangeAttackCoroutineRunning = true;
        while (RangeActive)
        {
            List <Transform> enemys = GetClosestEnemy(ProjectileAmount);
            for (int i = 0; i < enemys.Count; i++)
            {
                if (i >= ProjectileAmount)
                {
                    continue;
                }

                if (ProjectileAmount > 0)
                {
                    Vector3 enemyPosition      = enemys[i].position;
                    float   horizontalDistance = 0;
                    float   verticalDistance   = 0;
                    bool    upAttack           = true;
                    bool    rightAttack        = true;

                    if (enemyPosition.x > transform.position.x)
                    {
                        rightAttack        = true;
                        horizontalDistance = enemyPosition.x - transform.position.x;
                    }
                    else if (enemyPosition.x < transform.position.x)
                    {
                        rightAttack        = false;
                        horizontalDistance = (transform.position.x - enemyPosition.x);
                    }

                    if (enemyPosition.y > transform.position.y)
                    {
                        upAttack         = true;
                        verticalDistance = enemyPosition.y - transform.position.y;
                    }
                    else if (enemyPosition.y < transform.position.y)
                    {
                        upAttack         = false;
                        verticalDistance = (transform.position.y - enemyPosition.y);
                    }

                    if (horizontalDistance > verticalDistance)
                    {
                        if (rightAttack)
                        {
                            SetRangeAnimator(RangeAnimatorStates.AttackRIGHT);
                        }
                        else
                        {
                            SetRangeAnimator(RangeAnimatorStates.AttackLEFT);
                        }
                    }
                    else
                    {
                        if (upAttack)
                        {
                            SetRangeAnimator(RangeAnimatorStates.AttackUP);
                        }
                        else
                        {
                            SetRangeAnimator(RangeAnimatorStates.AttackDOWN);
                        }
                    }
                }

                GameObject           arrow           = Instantiate(ProjectilePrefab, projectileSpawnPosition.position, Quaternion.identity);
                ProjectileController arrowController = arrow.GetComponent <ProjectileController>();
                arrowController.InitArrow(enemys[i], ProjectileSpeed, RangeDamage);
            }
            yield return(new WaitForSecondsRealtime(1 / (Attackspeed <= 0 ? 0.5f : Attackspeed)));
        }
        SetRangeAnimator(RangeAnimatorStates.Idle);
        rangeAttackCoroutineRunning = false;
    }