package equipment;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics2D;
import physics.Body;
import physics.XYTSource;
import render.BodyRenderNode;
import render.RenderNode;
import render.RenderPreferences;
import render.XYTRenderNode;
import ships.Equipment;
import ships.Ship;
public class Generator implements Equipment, XYTSource {
private Ship ship;
private int x, y, t;
private long powerPerTick;
public Generator(int x, int y, int t, int powerPerTick) {
this.x = x;
this.y = y;
this.t = t;
this.powerPerTick = powerPerTick;
}
public static RenderNode makeIndependantPart(Body base) {
return new BodyRenderNode(base) {
public void draw(Graphics2D g, RenderPreferences prefs) {
Generator.draw(g, prefs, Color.green, false, 20);
}
};
}
public static void draw(Graphics2D g, RenderPreferences prefs, Color bar, boolean flash, int len) {
int scale = 15;
g.setColor(prefs.borderColor());
int t = prefs.borderThickness();
g.setStroke(new BasicStroke(2 * t,
BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
g.drawRect(-scale, -scale, 2*scale, 2*scale);
g.setColor(prefs.body2());
g.fillRect(-scale, -scale, scale*2, scale*2);
g.setColor(prefs.borderColor());
if (flash) {
g.setColor(prefs.body1());
}
g.drawRect(-10, -2, 20, 4);
g.setColor(bar);
g.fillRect(-10, -2, len, 4);
}
public void addedTo(Ship s) {
ship = s;
s.addRenderNode(new XYTRenderNode(this) {
public void draw(Graphics2D g, RenderPreferences prefs) {
int color = (int) (ship.power.getPower() * 255 / ship.power.getCapacity());
int len = (int) (ship.power.getPower() * 20 / ship.power.getCapacity());
boolean flash = ship.getCpuFreeze() > 0 && System.currentTimeMillis()%500 < 250;
color = Math.max(0, Math.min(color,255));
Generator.draw(g, prefs, new Color(255-color, color, 0), flash, len);
}
});
}
public void reset() {
}
public void physicsTickPreForce() {
}
public void physicsTickPostForce() {
ship.power.contribute(powerPerTick);
}
public void triggerSynchronizedEvent(char id, int cyclesAgo) {
}
public float position_x() {
return x;
}
public float position_y() {
return y;
}
public float alignment_theta() {
return t;
}
}