float nextMove() {
        if (wiggleCount > 0) {
            return wiggle();
        }

        if (nextMoveUser != 0) return nextMoveUser;

        if (targetPoint != null) {
            return headForTarget();
        }

        if (circuit != null) {
            return followCircuit();
        }

        if (cloud != null) {
            return thermal();
        }

        if (circlePoint != null) {
            return circleAroundPoint();
        }

        // otherwise fly straight on
        return 0;
    }