/**
*
*/
package iamrescue.belief.gui;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Polygon;
import java.awt.Shape;
import java.awt.Stroke;
import rescuecore2.misc.gui.ScreenTransform;
import rescuecore2.standard.entities.Building;
import rescuecore2.standard.entities.Edge;
import rescuecore2.standard.view.AreaLayer;
/**
* @author Sebastian
*
*/
public class EnhancedBuildingLayer extends AreaLayer<Building> {
private static final Color HEATING = new Color(176, 176, 56, 128);
private static final Color BURNING = new Color(204, 122, 50, 128);
private static final Color INFERNO = new Color(160, 52, 52, 128);
private static final Color WATER_DAMAGE = new Color(50, 120, 130, 128);
private static final Color MINOR_DAMAGE = new Color(100, 140, 210, 128);
private static final Color MODERATE_DAMAGE = new Color(100, 70, 190, 128);
private static final Color SEVERE_DAMAGE = new Color(80, 60, 140, 128);
private static final Color BURNT_OUT = new Color(0, 0, 0, 255);
private static final Color OUTLINE_COLOUR = Color.GRAY.darker();
private static final Color ENTRANCE = new Color(120, 120, 120);
private static final Stroke WALL_STROKE = new BasicStroke(2,
BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER);
private static final Stroke ENTRANCE_STROKE = new BasicStroke(1,
BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER);
/**
* Construct a building view layer.
*/
public EnhancedBuildingLayer() {
super(Building.class);
}
@Override
public String getName() {
return "Building shapes";
}
@Override
protected void paintEdge(Edge e, Graphics2D g, ScreenTransform t) {
g.setColor(OUTLINE_COLOUR);
g.setStroke(e.isPassable() ? ENTRANCE_STROKE : WALL_STROKE);
g.drawLine(t.xToScreen(e.getStartX()), t.yToScreen(e.getStartY()), t
.xToScreen(e.getEndX()), t.yToScreen(e.getEndY()));
}
@Override
protected void paintShape(Building b, Polygon shape, Graphics2D g) {
drawBrokenness(b, shape, g);
drawFieryness(b, shape, g);
}
private void drawFieryness(Building b, Polygon shape, Graphics2D g) {
if (!b.isFierynessDefined()) {
return;
}
switch (b.getFierynessEnum()) {
case UNBURNT:
return;
case HEATING:
g.setColor(HEATING);
break;
case BURNING:
g.setColor(BURNING);
break;
case INFERNO:
g.setColor(INFERNO);
break;
case WATER_DAMAGE:
g.setColor(WATER_DAMAGE);
break;
case MINOR_DAMAGE:
g.setColor(MINOR_DAMAGE);
break;
case MODERATE_DAMAGE:
g.setColor(MODERATE_DAMAGE);
break;
case SEVERE_DAMAGE:
g.setColor(SEVERE_DAMAGE);
break;
case BURNT_OUT:
g.setColor(BURNT_OUT);
break;
default:
throw new IllegalArgumentException(
"Don't know how to render fieryness "
+ b.getFierynessEnum());
}
g.fill(shape);
}
private void drawBrokenness(Building b, Shape shape, Graphics2D g) {
if (!b.isBrokennessDefined()) {
return;
}
int brokenness = b.getBrokenness();
// CHECKSTYLE:OFF:MagicNumber
int colour = Math.max(0, 135 - brokenness / 2);
// CHECKSTYLE:ON:MagicNumber
g.setColor(new Color(colour, colour, colour));
g.fill(shape);
}
}