package Code.graphics.GestureProgrammer.GestureProgrammerUtils; import java.awt.Graphics; import java.awt.Dimension; import java.awt.Color; import java.awt.Polygon; import javax.swing.JPanel; import javax.swing.border.LineBorder; /** * @author Alex Styler (astyler@gmail.com) */ public class FinchSimViewPanel extends JPanel { private final int pixelSize = 300; private final int middle = pixelSize / 2; //temp private double left = 0.0; private double right = 0.0; private Color beakColor = Color.BLACK; private final Polygon finchBody = new Polygon(new int[]{middle, middle + 39, middle - 39}, new int[]{middle - 40, middle + 30, middle + 30}, 3); private final Polygon leftWheel = new Polygon(new int[]{middle - 30, middle - 30, middle - 40, middle - 40}, new int[]{middle + 20, middle + 40, middle + 40, middle + 20}, 4); private final Polygon rightWheel = new Polygon(new int[]{middle + 30, middle + 30, middle + 40, middle + 40}, new int[]{middle + 20, middle + 40, middle + 40, middle + 20}, 4); private final Polygon beak = new Polygon(new int[]{middle, middle + 10, middle - 10}, new int[]{middle - 40, middle - 24, middle - 24}, 3); public FinchSimViewPanel() { super(true); Dimension size = new Dimension(pixelSize, pixelSize); this.setMinimumSize(size); this.setMaximumSize(size); this.setSize(size); this.setBorder(new LineBorder(Color.BLACK, 1)); } public void paintComponent(Graphics g) { //draw background g.setColor(Color.white); g.fillRect(0, 0, pixelSize, pixelSize); //draw finch body g.setColor(Color.black); g.drawPolygon(finchBody); g.fillPolygon(leftWheel); g.fillPolygon(rightWheel); //draw beak g.setColor(beakColor); g.fillPolygon(beak); //draw wheel velocities g.setColor(Color.magenta); int fullLength = -1; int left = (int)(this.left * fullLength); int offset = left < 0 ? -5 : 5; g.drawLine(middle - 35, middle + 30, middle - 35, middle + 30 + left); g.drawLine(middle - 35, middle + 30 + left, middle - 40, middle + 30 + left - offset); g.drawLine(middle - 35, middle + 30 + left, middle - 30, middle + 30 + left - offset); int right = (int)(this.right * fullLength); offset = right < 0 ? -5 : 5; g.drawLine(middle + 35, middle + 30, middle + 35, middle + 30 + right); g.drawLine(middle + 35, middle + 30 + right, middle + 40, middle + 30 + right - offset); g.drawLine(middle + 35, middle + 30 + right, middle + 30, middle + 30 + right - offset); } public void update(double left, double right, Color beak) { this.left = left; this.right = right; this.beakColor = beak; this.repaint(); } }