package games.strategy.triplea.ui.screen.drawable;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.geom.AffineTransform;
import java.util.Optional;
import games.strategy.engine.data.GameData;
import games.strategy.triplea.ui.mapdata.MapData;
public interface IDrawable {
int BASE_MAP_LEVEL = 1;
int POLYGONS_LEVEL = 2;
int RELIEF_LEVEL = 3;
int OPTIONAL_EXTRA_TERRITORY_BORDERS_MEDIUM_LEVEL = 4;
int OPTIONAL_EXTRA_TERRITORY_BORDERS_HIGH_LEVEL = 18;
int TERRITORY_EFFECT_LEVEL = 6;
int CAPITOL_MARKER_LEVEL = 8;
int VC_MARKER_LEVEL = 9;
int DECORATOR_LEVEL = 11;
int TERRITORY_TEXT_LEVEL = 13;
int BATTLE_HIGHLIGHT_LEVEL = 14;
int UNITS_LEVEL = 15;
int TERRITORY_OVERLAY_LEVEL = 16;
/**
* This is for the optional extra territory borders. LOW means off
*/
enum OptionalExtraBorderLevel {
LOW, MEDIUM, HIGH
}
/**
* Draw the tile
* If the graphics are scaled, then unscaled and scaled will be non null.
*
* <p>
* The affine transform will be set to the scaled version.
* </p>
*/
void draw(Rectangle bounds, GameData data, Graphics2D graphics, MapData mapData, AffineTransform unscaled,
AffineTransform scaled);
int getLevel();
default void drawImage(final Graphics2D graphics, final Optional<Image> image, final Point location,
final Rectangle bounds) {
if (image.isPresent()) {
graphics.drawImage(image.get(), location.x - bounds.x, location.y - bounds.y, null);
}
}
}