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; } }