public void getNeighbours(final ArrayList<Space> spaces, final Space center, final Criterion criterion) {
        if(intersects(center)) {


            if(!criterion.permitDiagonal) {
                final float epsilon = 0.01f;
                Rectangle i = intersection(center);
                if(i.width < epsilon && i.height < epsilon) {
                    return;
                }
            }

            switch(getCriterionReponse(criterion)) {
                case PASS:
                    if(this != center) {
                        spaces.add(this);
                    }
                    break;
                case DISBURSE:
                    disburse();
                    assert !isLeaf();

                    for(Space space : nodes) {
                        space.getNeighbours(spaces, center, criterion);
                    }

                    break;
            }
        }
    }