public List<Tile> getTilesNear(LogicailArea area, Locatable locatable, double maxDistance) {
		List<Tile> tiles = new ArrayList<Tile>();

		final Filter<GameObject> filter = new Filter<GameObject>() {
			@Override
			public boolean accept(GameObject gameObject) {
				final GameObject.Type type = gameObject.type();
				return type == GameObject.Type.BOUNDARY || type == GameObject.Type.INTERACTIVE;
			}
		};

		for (Tile tile : area.getTileArray()) {
			if ((!tile.equals(locatable.tile()) || tile.matrix(ctx).reachable()) && Euclidean(locatable, tile) <= maxDistance) {
				if (ctx.objects.select().at(tile).select(filter).isEmpty()) {
					tiles.add(tile);
				}
			}
		}

		Collections.shuffle(tiles);

		return tiles;
	}