bool CircleUpdate()
    {
        circleTimeElapsed     += Time.deltaTime;
        circleIntervalElapsed += Time.deltaTime;
        if (shotElapsed >= shotTime)
        {
            shotElapsed = 0f;
            circles[Random.Range(0, circles.Count - 1)].entity.GetComponent <Enemy>().Shoot();
        }

        for (int i = 0; i < circles.Count; i++)
        {
            circles[i] = Circle(circles[i]);
        }
        circles.RemoveAll(z => z.circleStage > 3);
        if (circleTimeElapsed >= circleTime)
        {
            return(circles.Count == 0);
        }

        if (circleIntervalElapsed >= circleInterval)
        {
            circleIntervalElapsed = 0f;

            Transform t;
            bool      contains;
            int       itrs = 0;
            do
            {
                if (++itrs > Enemy.enemies.Count)
                {
                    return(false);
                }
                t        = Enemy.enemies[Random.Range(0, Enemy.enemies.Count - 1)].transform;
                contains = false;
                foreach (CircleHolder c in circles)
                {
                    if (t == c.entity)
                    {
                        contains = true;
                        break;
                    }
                }
            } while (contains);

            CircleHolder circle = new CircleHolder();
            circle.Initialize(t, circleRadius, FindObjectOfType <Player>().transform.position);
            circles.Add(circle);
        }
        return(false);
    }
    CircleHolder Circle(CircleHolder c)
    {
        if (c.circleStage > 3)
        {
            Debug.Log("Invalid");
        }
        else if (c.circleStage > 2)
        {
            c.entity.LookAt(c.origPos);
            c.entity.position += c.entity.forward * circleMoveSpeed * Time.deltaTime;
            if (Vector3.Distance(c.entity.position, c.origPos) <= circleEpsilon)
            {
                c.circleStage     = 4;
                c.entity.rotation = Quaternion.identity;
            }
        }
        else if (c.circleStage > 1)
        {
            c.entity.RotateAround(c.center, c.entity.up, circleRotateSpeed * Time.deltaTime);
            if (Vector3.Distance(c.entity.position, c.origPos) > c.curDist + circleEpsilon)
            {
                c.passed = true;
            }
            if (c.passed && Vector3.Distance(c.entity.position, c.origPos) <= c.curDist + circleEpsilon)
            {
                c.circleStage = 3;
            }
        }
        else
        {
            c.entity.LookAt(c.center);
            c.entity.position += c.entity.forward * circleMoveSpeed * Time.deltaTime;
            if (Vector3.Distance(c.entity.position, c.center) <= c.radius + circleEpsilon)
            {
                c.entity.rotation = Quaternion.identity;
                c.curDist         = Vector3.Distance(c.entity.position, c.origPos);
                c.circleStage     = 2;
            }
        }

        return(c);
    }