@Override
	protected void paintLevel() {
		super.paintLevel();

		Level level = getState().getLevel();
		World world = getState().getWorld();
		if (passableImage == null) {
			BufferedImage image = new BufferedImage(getScreen()
					.getScreenWidth(), getScreen().getScreenHeight(),
					BufferedImage.TYPE_4BYTE_ABGR);
			BufferedImage adjacencyImage = new BufferedImage(getScreen()
					.getScreenWidth(), getScreen().getScreenHeight(),
					BufferedImage.TYPE_4BYTE_ABGR);
			Graphics2D imGfx = image.createGraphics();
			imGfx.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
					RenderingHints.VALUE_ANTIALIAS_ON);
			Graphics2D imAdjacencyGfx = adjacencyImage.createGraphics();
			imAdjacencyGfx.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
					RenderingHints.VALUE_ANTIALIAS_ON);

			double testRadius = getScreen().screenToWorldDistance(10); // 10
																		// screen
																		// pixels
			double stepSize = getScreen().screenToWorldDistance(3); // 3 screen
																	// pixels
			for (double x = testRadius; x <= level.getWorldWidth() - testRadius; x += stepSize) {
				for (double y = testRadius; y <= level.getWorldHeight()
						- testRadius; y += stepSize) {
					double randomizedX = x + (-0.5 + Math.random()) * stepSize
							* 2;
					double randomizedY = y + (-0.5 + Math.random()) * stepSize
							* 2;
					Graphics2D targetGraphics = imGfx;
					boolean isPassable = false;
					if (getFacade().isImpassable(world, randomizedX,
							randomizedY, testRadius)) {
						targetGraphics.setColor(new Color(255, 0, 0, 4));
					} else if (getFacade().isAdjacent(world, randomizedX,
							randomizedY, testRadius)) {
						targetGraphics = imAdjacencyGfx;
						targetGraphics.setColor(new Color(0, 255, 0, 64));
					} else {
						isPassable = true;
						targetGraphics.setColor(new Color(0, 0, 255, 4));
					}
					if (!isPassable || PAINT_PASSABLE) {
						Double circle = GUIUtils.circleAt(
								getScreenX(randomizedX),
								getScreenY(randomizedY), getScreen()
										.worldToScreenDistance(testRadius));
						targetGraphics.fill(circle);
					}
				}
			}
			imGfx.drawImage(adjacencyImage, 0, 0, null);
			imAdjacencyGfx.dispose();
			imGfx.dispose();
			this.passableImage = image;
		}

		currentGraphics.drawImage(passableImage, 0, 0, null);

		drawCrossMarker(getScreenX(0), getScreenY(0), 10, Color.BLUE);
		drawCrossMarker(getScreenX(0), getScreenY(getLevel().getWorldHeight()),
				10, Color.BLUE);
		drawCrossMarker(getScreenX(getLevel().getWorldWidth()), getScreenY(0),
				10, Color.BLUE);
		drawCrossMarker(getScreenX(getLevel().getWorldWidth()),
				getScreenY(getLevel().getWorldHeight()), 10, Color.BLUE);
	}