package icpc.challenge.view;
import [I;
import icpc.challenge.world.Bumper;
import icpc.challenge.world.Move;
import icpc.challenge.world.Puck;
import icpc.challenge.world.Sled;
import icpc.challenge.world.World;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.KeyListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.geom.AffineTransform;
import java.awt.geom.Point2D;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class SimpleView
implements InteractiveView
{
private static final int WIN_SIZE = 800;
private static final int BUMPER_DIAG = (int)Math.round(8.0D / Math.sqrt(2.0D));
private World world;
private ViewComponent viewComp;
JLabel redScore;
JLabel greyScore;
JLabel blueScore;
ArrayList<Animator> animators = new ArrayList();
private static final Color[] clist = { Color.red, Color.blue, new Color(192, 192, 192) };
public SimpleView()
{
JFrame localJFrame = new JFrame("Capture");
this.viewComp = new ViewComponent(this);
this.viewComp.setDoubleBuffered(true);
localJFrame.getContentPane().setLayout(new BorderLayout());
localJFrame.getContentPane().add(this.viewComp, "Center");
JPanel localJPanel = new JPanel();
localJPanel.setLayout(new BorderLayout());
this.redScore = new JLabel("0", 2);
this.redScore.setForeground(clist[0]);
this.greyScore = new JLabel("112", 0);
this.blueScore = new JLabel("0", 4);
this.blueScore.setForeground(clist[1]);
localJPanel.add(this.redScore, "West");
localJPanel.add(this.greyScore, "Center");
localJPanel.add(this.blueScore, "East");
localJFrame.getContentPane().add(localJPanel, "South");
localJFrame.addWindowListener(new WindowAdapter(this) {
public void windowClosing() {
System.exit(0);
}
});
localJFrame.pack();
localJFrame.setVisible(true);
}
public void addKeyListener(KeyListener paramKeyListener) {
this.viewComp.addKeyListener(paramKeyListener);
this.viewComp.setFocusable(true);
this.viewComp.requestFocusInWindow();
}
public void snapshot(double paramDouble, World paramWorld) {
try {
SwingUtilities.invokeAndWait(new Runnable(this, paramWorld)
{
public void run() {
int[] arrayOfInt = { 0, 0, 0 };
for (Object localObject = this.val$worldVal.plist.iterator(); ((Iterator)localObject).hasNext(); ) { Puck localPuck = (Puck)((Iterator)localObject).next();
arrayOfInt[localPuck.color] += 1;
}
this.this$0.redScore.setText(Integer.toString(arrayOfInt[0]));
this.this$0.blueScore.setText(Integer.toString(arrayOfInt[1]));
this.this$0.greyScore.setText(Integer.toString(arrayOfInt[2]));
SimpleView.access$002(this.this$0, this.val$worldVal);
SimpleView.access$300(this.this$0).repaint();
localObject = this.this$0.animators.listIterator();
while (true) { do if (!(((ListIterator)localObject).hasNext())) return;
while (((SimpleView.Animator)((ListIterator)localObject).next()).step());
((ListIterator)localObject).remove();
}
}
});
}
catch (Exception localException)
{
}
}
public void moveReport(double paramDouble, Move paramMove1, Move paramMove2)
{
}
public void hitWall(double paramDouble1, int paramInt1, int paramInt2, double paramDouble2, double paramDouble3) {
}
public void sledWrap(double paramDouble1, int paramInt1, int paramInt2, double paramDouble2) {
}
public void sledLoop(double paramDouble, int paramInt, ArrayList<ArrayList<Point2D>> paramArrayList) {
[I[] arrayOf[I = new int[paramArrayList.size() * 2][];
for (int i = 0; i < paramArrayList.size(); ++i) {
arrayOf[I[(i * 2)] = new int[((ArrayList)paramArrayList.get(i)).size()];
arrayOf[I[(i * 2 + 1)] = new int[((ArrayList)paramArrayList.get(i)).size()];
for (int j = 0; j < ((ArrayList)paramArrayList.get(i)).size(); ++j) {
arrayOf[I[(i * 2)][j] = (int)Math.round(((Point2D)((ArrayList)paramArrayList.get(i)).get(j)).getX());
arrayOf[I[(i * 2 + 1)][j] = (int)Math.round(((Point2D)((ArrayList)paramArrayList.get(i)).get(j)).getY());
}
}
try
{
SwingUtilities.invokeAndWait(new Runnable(this, paramInt, arrayOf[I) {
public void run() {
this.this$0.animators.add(new SimpleView.Animator(this) {
private int steps;
public static final int STEP_LIMIT = 8;
public void preDraw() {
double d = this.steps / 8.0D;
Color localColor = new Color((int)(d * 238.0D + (1.0D - d) * SimpleView.access$100()[this.this$1.val$sdex].getRed()), (int)(d * 238.0D + (1.0D - d) * SimpleView.access$100()[this.this$1.val$sdex].getGreen()), (int)(d * 238.0D + (1.0D - d) * SimpleView.access$100()[this.this$1.val$sdex].getBlue()));
paramGraphics2D.setColor(localColor);
for (int i = 0; i < this.this$1.val$ptLists.length; i += 2)
paramGraphics2D.fillPolygon(this.this$1.val$ptLists[i], this.this$1.val$ptLists[(i + 1)], this.this$1.val$ptLists[i].length);
}
public boolean step()
{
this.steps += 1;
return (this.steps < 8);
}
});
}
});
}
catch (Exception localException)
{
}
}
public void collision(double paramDouble, int paramInt1, int paramInt2)
{
}
public void ready()
{
}
public void shutdown()
{
}
public void finished()
{
}
private class ViewComponent extends JComponent
{
ViewComponent()
{
setPreferredSize(new Dimension(800, 800));
}
public void paint()
{
if (SimpleView.access$000(this.this$0) != null) {
Object localObject2;
Graphics2D localGraphics2D = (Graphics2D)paramGraphics;
AffineTransform localAffineTransform1 = localGraphics2D.getTransform();
AffineTransform localAffineTransform2 = new AffineTransform(localAffineTransform1);
localAffineTransform2.scale(800.0D, 800.0D);
localAffineTransform2.scale(0.00125D, -0.00125D);
localAffineTransform2.translate(0.0D, -800.0D);
localGraphics2D.setTransform(localAffineTransform2);
for (Object localObject1 = this.this$0.animators.iterator(); ((Iterator)localObject1).hasNext(); ) { SimpleView.Animator localAnimator = (SimpleView.Animator)((Iterator)localObject1).next();
localAnimator.preDraw(localGraphics2D);
}
localObject1 = new AffineTransform();
for (int i = 0; i < SimpleView.access$000(this.this$0).blist.size(); ++i) {
localObject2 = (Bumper)SimpleView.access$000(this.this$0).blist.get(i);
if (localObject2 != null) {
((AffineTransform)localObject1).setTransform(localAffineTransform2);
((AffineTransform)localObject1).translate(((Bumper)localObject2).pos.getX(), ((Bumper)localObject2).pos.getY());
localGraphics2D.setTransform((AffineTransform)localObject1);
localGraphics2D.setColor(SimpleView.access$100()[localObject2.color]);
localGraphics2D.drawOval(-8, -8, 16, 16);
if ((i == 0) || (i == 3)) {
localGraphics2D.drawLine(-8, 0, 8, 0);
localGraphics2D.drawLine(0, -8, 0, 8);
}
else {
localGraphics2D.drawLine(-SimpleView.access$200(), -SimpleView.access$200(), SimpleView.access$200(), SimpleView.access$200());
localGraphics2D.drawLine(SimpleView.access$200(), -SimpleView.access$200(), -SimpleView.access$200(), SimpleView.access$200());
}
}
}
for (i = 0; i < SimpleView.access$000(this.this$0).plist.size(); ++i) {
localObject2 = (Puck)SimpleView.access$000(this.this$0).plist.get(i);
if (localObject2 != null) {
((AffineTransform)localObject1).setTransform(localAffineTransform2);
((AffineTransform)localObject1).translate(((Puck)localObject2).pos.getX(), ((Puck)localObject2).pos.getY());
localGraphics2D.setTransform((AffineTransform)localObject1);
localGraphics2D.setColor(SimpleView.access$100()[localObject2.color]);
localGraphics2D.fillOval(-5, -5, 10, 10);
}
}
for (i = 0; i < SimpleView.access$000(this.this$0).slist.size(); ++i) {
localObject2 = (Sled)SimpleView.access$000(this.this$0).slist.get(i);
((AffineTransform)localObject1).setTransform(localAffineTransform2);
((AffineTransform)localObject1).translate(((Sled)localObject2).pos.getX(), ((Sled)localObject2).pos.getY());
((AffineTransform)localObject1).rotate(((Sled)localObject2).getDir());
localGraphics2D.setTransform((AffineTransform)localObject1);
localGraphics2D.setColor(SimpleView.access$100()[localObject2.color]);
localGraphics2D.drawLine(-8, -8, 8, 0);
localGraphics2D.drawLine(-8, 8, 8, 0);
}
localGraphics2D.setTransform(localAffineTransform2);
for (i = 0; i < SimpleView.access$000(this.this$0).trail.size(); ++i) {
if (((LinkedList)SimpleView.access$000(this.this$0).trail.get(i)).size() > 0) {
localGraphics2D.setColor(SimpleView.access$100()[i]);
localObject2 = ((LinkedList)SimpleView.access$000(this.this$0).trail.get(i)).listIterator(0);
Object localObject3 = (Point2D)((ListIterator)localObject2).next();
while (((ListIterator)localObject2).hasNext()) {
localPoint2D = (Point2D)((ListIterator)localObject2).next();
d = localPoint2D.distance((Point2D)localObject3);
if (d < 30.0D)
localGraphics2D.drawLine((int)((Point2D)localObject3).getX(), (int)((Point2D)localObject3).getY(), (int)localPoint2D.getX(), (int)localPoint2D.getY());
localObject3 = localPoint2D;
}
Point2D localPoint2D = ((Sled)SimpleView.access$000(this.this$0).slist.get(i)).pos;
double d = localPoint2D.distance((Point2D)localObject3);
if (d < 30.0D) {
localGraphics2D.drawLine((int)((Point2D)localObject3).getX(), (int)((Point2D)localObject3).getY(), (int)localPoint2D.getX(), (int)localPoint2D.getY());
}
}
}
for (Iterator localIterator = this.this$0.animators.iterator(); localIterator.hasNext(); ) { localObject2 = (SimpleView.Animator)localIterator.next();
((SimpleView.Animator)localObject2).postDraw(localGraphics2D);
}
localGraphics2D.setTransform(localAffineTransform1);
}
}
}
abstract class Animator
{
void preDraw()
{
}
void postDraw()
{
}
abstract boolean step();
}
}