package games.strategy.triplea.ui.screen; import java.awt.Color; import java.awt.Graphics2D; import java.awt.Polygon; import java.awt.Rectangle; import java.awt.geom.AffineTransform; import java.util.Iterator; import java.util.List; import games.strategy.engine.data.GameData; import games.strategy.engine.data.Territory; import games.strategy.triplea.ui.mapdata.MapData; import games.strategy.triplea.ui.screen.drawable.IDrawable; public class TerritoryOverLayDrawable implements IDrawable { public static enum OP { FILL, DRAW } private final String m_territoryName; private final Color m_color; private final OP m_op; public TerritoryOverLayDrawable(final Color color, final String name, final OP op) { m_color = color; m_territoryName = name; m_op = op; } public TerritoryOverLayDrawable(final Color color, final String name, final int alpha, final OP op) { m_color = new Color(color.getRed(), color.getGreen(), color.getBlue(), alpha); m_territoryName = name; m_op = op; } @Override public void draw(final Rectangle bounds, final GameData data, final Graphics2D graphics, final MapData mapData, final AffineTransform unscaled, final AffineTransform scaled) { final Territory territory = data.getMap().getTerritory(m_territoryName); final List<Polygon> polys = mapData.getPolygons(territory); graphics.setColor(m_color); final Iterator<Polygon> polyIter = polys.iterator(); while (polyIter.hasNext()) { Polygon polygon = polyIter.next(); // if we dont have to draw, dont if (!polygon.intersects(bounds) && !polygon.contains(bounds)) { continue; } // use a copy since we will move the polygon polygon = new Polygon(polygon.xpoints, polygon.ypoints, polygon.npoints); polygon.translate(-bounds.x, -bounds.y); if (m_op == OP.FILL) { graphics.fillPolygon(polygon); } else { graphics.drawPolygon(polygon); } } } @Override public int getLevel() { return TERRITORY_OVERLAY_LEVEL; } }