public void logic() { //let's do one tick
        boolean allNull = true;

        for (int i = 0; i < DFOCI; i++) { //for each circle,
            /* We have 2 modes, "ALL AT ONCE" and "NOT ALL AT ONCE".
             * If we're in all-at-once mode, then we have to wait until all
             * of the circles get stuck before we make new circles.
             * If we're not in all-at-once mode, then we can call sublogic
             * on the null circle, and it will automatically generate a new one
             * for us to work with.
             */
            if (foci[i] != null || !DALLATONCE) { //skip null circle unless we're not in all-at-once mode.
                allNull = false;
                sublogic(i);
            }
        }

        if (allNull && DALLATONCE) { //if all of them are null, let's generate new circles (in all-at-once mode).
            for (int i = 0; i < DFOCI; i++) {
                generateCircle(i);
            }
        }

        /* If we have reached the maximum amount of circles per repeat, we can
         * then call totallyFilled, which does more stuff!
         */
        if (others.size() > DMAXCIRCLES) {
            totallyFilled();
            return;
        }
    }