package tiled.mapeditor.util;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import tiled.core.Tile;
import tiled.core.TileLayer;
public class MinimapGenerator {
final BufferedImage image;
final int tileSize;
public MinimapGenerator(int imageWidth, int imageHeight, int tileSize) {
image = new BufferedImage(imageWidth, imageHeight,
BufferedImage.TYPE_INT_ARGB);
this.tileSize = tileSize;
clearBackground();
}
private void clearBackground() {
Graphics g = image.getGraphics();
try {
g.setColor(new Color(128, 128, 128, 128));
g.fillRect(0, 0, image.getWidth(), image.getHeight());
} finally {
g.dispose();
}
}
public void addLayer(TileLayer layer) {
Graphics g = image.getGraphics();
try {
for (int x = 0; x < layer.getWidth(); ++x)
for (int y = 0; y < layer.getHeight(); ++y) {
Color color = getColor(layer.getTileAt(x, y));
if (null != color) {
g.setColor(color);
g.fillRect(x * tileSize, y * tileSize, tileSize,
tileSize);
}
}
} finally {
g.dispose();
}
}
private Color getColor(Tile tile) {
if (null != tile) {
String c = tile.getProperties().getProperty(
"newton_adventure.type", "unknown");
if (c.equals("platform")) {
return new Color(0, 0, 237);
} else if (c.equals("up_right_half_platform")) {
return new Color(0, 0, 237);
} else if (c.equals("up_left_half_platform")) {
return new Color(0, 0, 237);
} else if (c.equals("down_left_half_platform")) {
return new Color(0, 0, 237);
} else if (c.equals("down_right_half_platform")) {
return new Color(0, 0, 237);
} else if (c.equals("door")) {
return new Color(255, 255, 0);
} else if (c.equals("door_to_bonus_world")) {
return new Color(255, 0, 255);
} else if (c.equals("pikes_up")) {
return new Color(255, 0, 0);
} else if (c.equals("pikes_down")) {
return new Color(255, 0, 0);
} else if (c.equals("pikes_left")) {
return new Color(255, 0, 0);
} else if (c.equals("pikes_right")) {
return new Color(255, 0, 0);
} else if (c.equals("cannon_up")) {
return new Color(255, 0, 0);
} else if (c.equals("cannon_down")) {
return new Color(255, 0, 0);
} else if (c.equals("cannon_right")) {
return new Color(255, 0, 0);
} else if (c.equals("cannon_left")) {
return new Color(255, 0, 0);
} else if (c.equals("mobile_pike_anchor")) {
return new Color(255, 0, 0);
} else if (c.equals("axe_anchor")) {
return new Color(255, 0, 0);
} else if (c.equals("bounce_platform")) {
return new Color(0, 0, 237);
} else if (c.equals("activator1")) {
return new Color(80, 255, 40);
} else if (c.equals("activator2")) {
return new Color(80, 255, 40);
} else if (c.equals("activator3")) {
return new Color(80, 255, 40);
} else if (c.equals("blocker1")) {
return new Color(80, 255, 40);
} else if (c.equals("blocker2")) {
return new Color(80, 255, 40);
} else if (c.equals("blocker3")) {
return new Color(80, 255, 40);
} else if (!c.equals("unknown")) {
System.err.println("Unhandled tile type " + c);
}
}
return null;
}
public void save(String selectedFile) {
try {
ImageIO.write(image, "png", new File(selectedFile));
} catch (IOException e) {
System.err.println(e);
}
}
}