package equipment;
import java.awt.BasicStroke;
import java.awt.Graphics2D;
import java.util.ArrayList;
import java.util.Collection;
import render.RenderPreferences;
import render.XYTRenderNode;
import ships.Equipment;
import ships.Ship;
public class Structure implements Equipment {
private ArrayList<StructureNode> elements;
public static final int STRUCT_SIZE = 50;
public Structure() {
elements = new ArrayList<StructureNode>();
}
public void addLocation(int x, int y) {
elements.add(new StructureNode(x,y));
}
public static void draw(Graphics2D g, RenderPreferences prefs, Collection<StructureNode> elements) {
int scale = STRUCT_SIZE/2;
int[] x = new int[]{-1,-1,1,1,-1,1,-1,1};
int[] y = new int[]{-1,1,1,-1,1,1,-1,-1};
for (int i=0; i<x.length; i++) {
x[i]*=scale; y[i]*=scale;
}
g.setColor(prefs.borderColor());
int t = prefs.borderThickness();
g.setStroke(new BasicStroke(5+t*2, BasicStroke.CAP_ROUND,
BasicStroke.JOIN_ROUND));
for (StructureNode p : elements) {
for (int i=0;i<8;i++) { x[i]+=p.x*scale*2;y[i]+=p.y*scale*2; }
g.drawPolyline(x,y, 8);
for (int i=0;i<8;i++) { x[i]-=p.x*scale*2;y[i]-=p.y*scale*2; }
}
g.setColor(prefs.body3());
g.setStroke(new BasicStroke(5, BasicStroke.CAP_ROUND,
BasicStroke.JOIN_ROUND));
for (StructureNode p : elements) {
for (int i=0;i<8;i++) { x[i]+=p.x*scale*2;y[i]+=p.y*scale*2; }
g.drawPolyline(x,y, 8);
for (int i=0;i<8;i++) { x[i]-=p.x*scale*2;y[i]-=p.y*scale*2; }
}
g.setColor(prefs.body2());
g.setStroke(new BasicStroke(2, BasicStroke.CAP_ROUND,
BasicStroke.JOIN_MITER));
for (StructureNode p : elements) {
int offset = 4;
g.drawLine(offset-scale+p.x*scale*2, offset-scale+p.y*scale*2, scale-offset+p.x*scale*2, scale-offset+p.y*scale*2);
g.drawLine(scale-offset+p.x*scale*2, offset-scale+p.y*scale*2, offset-scale+p.x*scale*2, scale-offset+p.y*scale*2);
}
}
public void addedTo(Ship s) {
s.addBgRenderNode(new XYTRenderNode(0,0,0){
public void draw(Graphics2D g, RenderPreferences prefs) {
Structure.draw(g, prefs, elements);
}
});
}
public void reset() {
}
public void physicsTickPreForce() {
}
public void physicsTickPostForce() {
}
public void triggerSynchronizedEvent(char id, int cyclesAgo) {
}
}