public Set<WorldArea> getOverlappingWAs(Vect3D searchCenter, float radius) {

		// go to root
		WorldArea root = this;
		while (root.hasParent()) {
			root = root.getParent();
		}

		Set<WorldArea> matchingAreas = new HashSet<>();
		List<WorldArea> currentlyExaminedAreas = new ArrayList<>();
		List<WorldArea> tempAreas = new ArrayList<>();
		tempAreas.add(root);
		if (tempAreas.isEmpty()) {
			matchingAreas.add(root);
		}

		while (!tempAreas.isEmpty()) {
			currentlyExaminedAreas.clear();
			currentlyExaminedAreas.addAll(tempAreas);
			tempAreas.clear();

			for (WorldArea wa : currentlyExaminedAreas) {
				if (wa.getNotNullChildren().isEmpty()) {
					matchingAreas.add(wa);
				} else {
					boolean match = false;
					for (WorldArea wa2 : wa.getNotNullChildren()) {
						if (Math.abs(wa2.center.x - searchCenter.x) <= wa2.width / 2 + radius
								&& Math.abs(wa2.center.y - searchCenter.y) <= wa2.width / 2 + radius) {
							tempAreas.add(wa2);
							match = true;
						}
					}
					if (!match) {
						matchingAreas.add(wa);
					}
				}
			}
		}

		return matchingAreas;
	}