package uk.co.flyingsquirrels.rendering;
import org.jbox2d.common.Color3f;
import org.jbox2d.common.Vec2;
import org.jbox2d.common.XForm;
import org.jbox2d.dynamics.DebugDraw;
import org.newdawn.slick.Color;
import org.newdawn.slick.Font;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.geom.Circle;
import org.newdawn.slick.geom.Polygon;
public class AdAstraDebugDraw extends DebugDraw {
private final Font font;
private Graphics g;
public AdAstraDebugDraw(Font font) {
this.font = font;
appendFlags(DebugDraw.e_shapeBit);
// appendFlags(DebugDraw.e_jointBit);
}
public void setGraphics(Graphics g) {
this.g = g;
this.g.setAntiAlias(true);
}
private void drawCircle(Vec2 center, float radius, Color3f color,
boolean solid, Vec2 axis) {
Circle circle = new Circle(center.x, center.y, radius);
Color slickColor = toSlickColor(color);
g.setColor(slickColor);
g.draw(circle);
if (solid) {
slickColor.a = 0.5f;
g.fill(circle);
if (axis != null) {
drawSegment(center, new Vec2(center.x + radius
* axis.x, center.y + radius * axis.y),
color);
}
}
}
@Override
public void drawCircle(Vec2 center, float radius, Color3f color) {
drawCircle(center, radius, color, false, null);
}
@Override
public void drawSolidCircle(Vec2 center, float radius, Vec2 axis,
Color3f color) {
drawCircle(center, radius, color, true, axis);
}
@Override
public void drawPoint(Vec2 position, float f, Color3f color3f) {
drawCircle(position, f, color3f, true, null);
}
private void drawPolygon(Vec2[] vertices, int vertexCount, Color3f color,
boolean solid) {
Polygon polygon = new Polygon();
for (int i = 0; i < vertexCount; ++i) {
polygon.addPoint(vertices[i].x, vertices[i].y);
}
Color slickColor = toSlickColor(color);
g.setColor(slickColor);
g.draw(polygon);
if (solid) {
slickColor.a = 0.5f;
g.fill(polygon);
}
}
@Override
public void drawPolygon(Vec2[] vertices, int vertexCount, Color3f color) {
drawPolygon(vertices, vertexCount, color, false);
}
@Override
public void drawSolidPolygon(Vec2[] vertices, int vertexCount, Color3f color) {
drawPolygon(vertices, vertexCount, color, true);
}
@Override
public void drawSegment(Vec2 p1, Vec2 p2, Color3f color) {
Color slickColor = toSlickColor(color);
g.setColor(slickColor);
g.setLineWidth(1);
g.drawLine(p1.x, p1.y, p2.x, p2.y);
}
@Override
public void drawString(float x, float y, String s, Color3f color) {
Color slickColor = toSlickColor(color);
g.setFont(font);
g.setColor(slickColor);
g.drawString(s, x, y);
}
@Override
public void drawXForm(XForm xf) {
// TODO Auto-generated method stub
}
private Color toSlickColor(Color3f color) {
Color slickColor = new Color(color.x / 255.0f, color.y / 255.0f,
color.z / 255.0f);
return slickColor;
}
}