/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.petah.spring.bai.map.target;
import com.springrts.ai.oo.AIFloat3;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import org.petah.common.util.GraphicsUtil;
import org.petah.common.util.profiler.Profiler;
import org.petah.spring.bai.GlobalOptions;
import org.petah.spring.bai.cache.CachedUnit;
import org.petah.spring.bai.util.MapUtil;
/**
*
* @author Petah
*/
public class TargetMapRenderer {
private static BufferedImage metal;
private static BufferedImage energy;
private static BufferedImage commander;
private static BufferedImage nuke;
private static BufferedImage building;
private static BufferedImage factory;
private static BufferedImage builder;
private static BufferedImage unit;
private static BufferedImage aircraft;
private static BufferedImage defencetower;
private static BufferedImage antiair;
private static BufferedImage ship;
private static BufferedImage hovercraft;
private static BufferedImage nano;
private static BufferedImage unknown;
static {
try {
metal = ImageIO.read(TargetMapRenderer.class.getResource("images/metal.png"));
energy = ImageIO.read(TargetMapRenderer.class.getResource("images/energy.png"));
commander = ImageIO.read(TargetMapRenderer.class.getResource("images/commander.png"));
nuke = ImageIO.read(TargetMapRenderer.class.getResource("images/nuke.png"));
building = ImageIO.read(TargetMapRenderer.class.getResource("images/building.png"));
factory = ImageIO.read(TargetMapRenderer.class.getResource("images/factory.png"));
builder = ImageIO.read(TargetMapRenderer.class.getResource("images/builder.png"));
unit = ImageIO.read(TargetMapRenderer.class.getResource("images/unit.png"));
aircraft = ImageIO.read(TargetMapRenderer.class.getResource("images/aircraft.png"));
defencetower = ImageIO.read(TargetMapRenderer.class.getResource("images/defencetower.png"));
antiair = ImageIO.read(TargetMapRenderer.class.getResource("images/antiair.png"));
ship = ImageIO.read(TargetMapRenderer.class.getResource("images/ship.png"));
hovercraft = ImageIO.read(TargetMapRenderer.class.getResource("images/hovercraft.png"));
nano = ImageIO.read(TargetMapRenderer.class.getResource("images/nano.png"));
unknown = ImageIO.read(TargetMapRenderer.class.getResource("images/unknown.png"));
} catch (IOException ex) {
Logger.getLogger(TargetMapRenderer.class.getName()).log(Level.SEVERE, null, ex);
}
}
private static void renderTargetMap(final Graphics2D g, TargetMap targetMap, int width, int height) {
g.setColor(Color.BLACK);
g.fillRect(0, 0, width, height);
for (TargetZone zone : targetMap.getTargetZones()) {
AIFloat3 center = zone.getPosition();
int radius = (int) MapUtil.terrainToMap(zone.getRadius());
// if (radius > 300) {
// zone.iterateUnits(new ElementProcessor<CachedUnit>() {
//
// public void process(CachedUnit unit) {
// System.err.println(FormatUtil.formatAIFloat3(unit.getPos()));
// }
// });
// }
g.setColor(new Color(1, 0, 0, 0.2f));
g.fillOval((int) MapUtil.terrainToMap(center.x) - radius, (int) MapUtil.terrainToMap(center.z) - radius, radius * 2, radius * 2);
g.setColor(Color.RED);
g.drawOval((int) MapUtil.terrainToMap(center.x) - radius, (int) MapUtil.terrainToMap(center.z) - radius, radius * 2, radius * 2);
BufferedImage image;
switch (zone.getTargetType()) {
case Commander:
image = commander;
break;
case Energy:
image = energy;
break;
case Metal:
image = metal;
break;
case AntiAir:
image = antiair;
break;
case DefenceTowers:
image = defencetower;
break;
case Units:
image = unit;
break;
case Nuke:
image = nuke;
break;
case AntiNuke:
image = nuke;
break;
case Factory:
image = factory;
break;
case Buildings:
image = building;
break;
case Builders:
image = builder;
break;
case Ships:
image = ship;
break;
case Nanos:
image = nano;
break;
case Hovercraft:
image = hovercraft;
break;
case Aircraft:
image = aircraft;
break;
default:
image = unknown;
}
g.drawImage(image, (int) MapUtil.terrainToMap(center.x) - 8, (int) MapUtil.terrainToMap(center.z) - 8, 16, 16, null);
}
g.setColor(Color.GREEN);
for (TargetZone zone : targetMap.getTargetZones()) {
for (CachedUnit zoneUnit : zone.getUnits()) {
AIFloat3 pos = zoneUnit.getPos();
GraphicsUtil.drawCross(g, (int) MapUtil.terrainToMap(pos.x), (int) MapUtil.terrainToMap(pos.z), 2);
}
}
}
public static void renderTargetMap(TargetMap targetMap, BufferedImage image) {
Profiler.start(TargetMapRenderer.class, "renderTargetMap()");
Graphics2D g = (Graphics2D) image.getGraphics();
if (GlobalOptions.isAntiAlias()) {
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
}
renderTargetMap(g, targetMap, image.getWidth(), image.getHeight());
g.dispose();
Profiler.stop(TargetMapRenderer.class, "renderTargetMap()");
}
}