package icpc.challenge.view;
import [[D;
import com.sun.opengl.util.j2d.TextRenderer;
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.Container;
import java.awt.Font;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.geom.Point2D;
import java.awt.geom.Point2D.Double;
import java.awt.geom.Rectangle2D;
import java.io.IOException;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCanvas;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.glu.GLU;
import javax.media.opengl.glu.GLUtessellator;
import javax.media.opengl.glu.GLUtessellatorCallback;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class View3D
implements InteractiveView
{
private static final double wallBottom = 4.0D;
private static final double wallTop = 14.0D;
private static final float BG_GREY = 0.2F;
private static final GLU glu = new GLU();
private GLCanvas canvas;
private Mesh puckMesh;
private Mesh bumperMesh;
private Mesh sledMesh;
private ClipPlayer clipPlayer = null;
private World world;
private int redScore;
private int greyScore;
private int blueScore;
private Point2D[] bumperVel = { new Point2D.Double(0.0D, 0.0D), new Point2D.Double(0.0D, 0.0D), new Point2D.Double(0.0D, 0.0D), new Point2D.Double(0.0D, 0.0D) };
private Point2D[] bumperAccel = { new Point2D.Double(0.0D, 0.0D), new Point2D.Double(0.0D, 0.0D), new Point2D.Double(0.0D, 0.0D), new Point2D.Double(0.0D, 0.0D) };
private int winWidth = 1;
private int winHeight = 1;
ArrayList<Animator> animators = new ArrayList();
public View3D()
{
this.clipPlayer = Audio.getPlayer();
JFrame localJFrame = new JFrame("3D View");
this.canvas = new GLCanvas();
this.canvas.addGLEventListener(new JavaRenderer(this));
localJFrame.getContentPane().add(this.canvas);
localJFrame.setSize(1000, 800);
localJFrame.addWindowListener(new WindowAdapter(this) {
public void windowClosing() {
System.exit(0);
}
});
localJFrame.setVisible(true);
}
public void addKeyListener(KeyListener paramKeyListener) {
this.canvas.addKeyListener(paramKeyListener);
this.canvas.setFocusable(true);
this.canvas.requestFocusInWindow();
}
public void snapshot(double paramDouble, World paramWorld)
{
try
{
SwingUtilities.invokeAndWait(new Runnable(this, paramWorld)
{
public void run() {
int[] arrayOfInt = { 0, 0, 0 };
for (java.lang.Object localObject = this.val$worldVal.plist.iterator(); ((Iterator)localObject).hasNext(); ) { Puck localPuck = (Puck)((Iterator)localObject).next();
arrayOfInt[localPuck.color] += 1;
}
View3D.access$702(this.this$0, arrayOfInt[0]);
View3D.access$902(this.this$0, arrayOfInt[1]);
View3D.access$802(this.this$0, arrayOfInt[2]);
View3D.access$302(this.this$0, this.val$worldVal);
View3D.access$1000(this.this$0).display();
localObject = this.this$0.animators.listIterator();
while (true) { do if (!(((ListIterator)localObject).hasNext())) return;
while (((View3D.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) {
int i = (int)paramDouble2 / 8 * 8;
float f1 = (float)(Math.abs(paramDouble3) / 24.0D * 2.0D);
float f2 = f1 * (float)(paramDouble2 - i) / 8.0F;
float f3 = f1 * (1.0F - (float)(paramDouble2 - i) / 8.0F);
if (this.clipPlayer != null)
if (paramInt1 < this.world.plist.size())
this.clipPlayer.play(3, 1);
else
this.clipPlayer.play(2, 1);
try
{
SwingUtilities.invokeAndWait(new Runnable(this, paramInt2, f3, i, f2) {
public void run() {
this.this$0.animators.add(new View3D.Animator(this) {
private int steps;
public static final int STEP_LIMIT = 6;
public void postDraw() {
paramGL.glDisable(2896);
paramGL.glEnable(3042);
paramGL.glBlendFunc(770, 771);
paramGL.glDisable(2929);
float f = this.steps / 6.0F;
paramGL.glBegin(7);
switch (this.this$1.val$wdex)
{
case 0:
paramGL.glColor4f(1.0F, 1.0F, 0.5F, this.this$1.val$w1 * (1.0F - f));
paramGL.glVertex3d(0.0D, this.this$1.val$seg1, 14.0D);
paramGL.glVertex3d(0.0D, this.this$1.val$seg1, 4.0D);
paramGL.glVertex3d(0.0D, this.this$1.val$seg1 + 8, 4.0D);
paramGL.glVertex3d(0.0D, this.this$1.val$seg1 + 8, 14.0D);
paramGL.glColor4f(1.0F, 1.0F, 0.5F, this.this$1.val$w2 * (1.0F - f));
paramGL.glVertex3d(0.0D, this.this$1.val$seg1 + 8, 14.0D);
paramGL.glVertex3d(0.0D, this.this$1.val$seg1 + 8, 4.0D);
paramGL.glVertex3d(0.0D, this.this$1.val$seg1 + 16, 4.0D);
paramGL.glVertex3d(0.0D, this.this$1.val$seg1 + 16, 14.0D);
break;
case 1:
paramGL.glColor4f(1.0F, 1.0F, 0.5F, this.this$1.val$w1 * (1.0F - f));
paramGL.glVertex3d(this.this$1.val$seg1, 0.0D, 14.0D);
paramGL.glVertex3d(this.this$1.val$seg1, 0.0D, 4.0D);
paramGL.glVertex3d(this.this$1.val$seg1 + 8, 0.0D, 4.0D);
paramGL.glVertex3d(this.this$1.val$seg1 + 8, 0.0D, 14.0D);
paramGL.glColor4f(1.0F, 1.0F, 0.5F, this.this$1.val$w2 * (1.0F - f));
paramGL.glVertex3d(this.this$1.val$seg1 + 8, 0.0D, 14.0D);
paramGL.glVertex3d(this.this$1.val$seg1 + 8, 0.0D, 4.0D);
paramGL.glVertex3d(this.this$1.val$seg1 + 16, 0.0D, 4.0D);
paramGL.glVertex3d(this.this$1.val$seg1 + 16, 0.0D, 14.0D);
break;
case 2:
paramGL.glColor4f(1.0F, 1.0F, 0.5F, this.this$1.val$w1 * (1.0F - f));
paramGL.glVertex3d(800.0D, this.this$1.val$seg1, 14.0D);
paramGL.glVertex3d(800.0D, this.this$1.val$seg1, 4.0D);
paramGL.glVertex3d(800.0D, this.this$1.val$seg1 + 8, 4.0D);
paramGL.glVertex3d(800.0D, this.this$1.val$seg1 + 8, 14.0D);
paramGL.glColor4f(1.0F, 1.0F, 0.5F, this.this$1.val$w2 * (1.0F - f));
paramGL.glVertex3d(800.0D, this.this$1.val$seg1 + 8, 14.0D);
paramGL.glVertex3d(800.0D, this.this$1.val$seg1 + 8, 4.0D);
paramGL.glVertex3d(800.0D, this.this$1.val$seg1 + 16, 4.0D);
paramGL.glVertex3d(800.0D, this.this$1.val$seg1 + 16, 14.0D);
break;
case 3:
paramGL.glColor4f(1.0F, 1.0F, 0.5F, this.this$1.val$w1 * (1.0F - f));
paramGL.glVertex3d(this.this$1.val$seg1, 800.0D, 14.0D);
paramGL.glVertex3d(this.this$1.val$seg1, 800.0D, 4.0D);
paramGL.glVertex3d(this.this$1.val$seg1 + 8, 800.0D, 4.0D);
paramGL.glVertex3d(this.this$1.val$seg1 + 8, 800.0D, 14.0D);
paramGL.glColor4f(1.0F, 1.0F, 0.5F, this.this$1.val$w2 * (1.0F - f));
paramGL.glVertex3d(this.this$1.val$seg1 + 8, 800.0D, 14.0D);
paramGL.glVertex3d(this.this$1.val$seg1 + 8, 800.0D, 4.0D);
paramGL.glVertex3d(this.this$1.val$seg1 + 16, 800.0D, 4.0D);
paramGL.glVertex3d(this.this$1.val$seg1 + 16, 800.0D, 14.0D);
}
paramGL.glEnd();
paramGL.glDisable(3042);
paramGL.glEnable(2929);
paramGL.glEnable(2896);
}
public boolean step() {
this.steps += 1;
return (this.steps < 6);
}
});
}
});
}
catch (Exception localException) {
}
}
public void sledWrap(double paramDouble1, int paramInt1, int paramInt2, double paramDouble2) {
if (this.clipPlayer != null)
this.clipPlayer.play(1, 1);
try
{
SwingUtilities.invokeAndWait(new Runnable(this, paramInt2, paramDouble2) {
public void run() {
this.this$0.animators.add(new View3D.Animator(this) {
private int steps;
public static final int STEP_LIMIT = 10;
public void postDraw() {
paramGL.glDisable(2896);
paramGL.glEnable(3042);
paramGL.glBlendFunc(770, 771);
paramGL.glDisable(2929);
float f = this.steps / 10.0F;
paramGL.glColor4f(1.0F, 1.0F, 1.0F, 1.0F - f);
paramGL.glBegin(1);
if (this.this$1.val$wdex % 2 == 0) {
paramGL.glVertex3d(0.0D, this.this$1.val$offset + f * 10.0F, 4.0D);
paramGL.glVertex3d(0.0D, this.this$1.val$offset + f * 10.0F, 14.0D);
paramGL.glVertex3d(0.0D, this.this$1.val$offset - f * 10.0F, 4.0D);
paramGL.glVertex3d(0.0D, this.this$1.val$offset - f * 10.0F, 14.0D);
paramGL.glVertex3d(800.0D, this.this$1.val$offset + f * 10.0F, 4.0D);
paramGL.glVertex3d(800.0D, this.this$1.val$offset + f * 10.0F, 14.0D);
paramGL.glVertex3d(800.0D, this.this$1.val$offset - f * 10.0F, 4.0D);
paramGL.glVertex3d(800.0D, this.this$1.val$offset - f * 10.0F, 14.0D);
} else {
paramGL.glVertex3d(this.this$1.val$offset + f * 10.0F, 0.0D, 4.0D);
paramGL.glVertex3d(this.this$1.val$offset + f * 10.0F, 0.0D, 14.0D);
paramGL.glVertex3d(this.this$1.val$offset - f * 10.0F, 0.0D, 4.0D);
paramGL.glVertex3d(this.this$1.val$offset - f * 10.0F, 0.0D, 14.0D);
paramGL.glVertex3d(this.this$1.val$offset + f * 10.0F, 800.0D, 4.0D);
paramGL.glVertex3d(this.this$1.val$offset + f * 10.0F, 800.0D, 14.0D);
paramGL.glVertex3d(this.this$1.val$offset - f * 10.0F, 800.0D, 4.0D);
paramGL.glVertex3d(this.this$1.val$offset - f * 10.0F, 800.0D, 14.0D);
}
paramGL.glEnd();
paramGL.glDisable(3042);
paramGL.glEnable(2929);
paramGL.glEnable(2896);
}
public boolean step() {
this.steps += 1;
return (this.steps < 10);
}
});
}
});
}
catch (Exception localException)
{
}
}
public void sledLoop(double paramDouble, int paramInt, ArrayList<ArrayList<Point2D>> paramArrayList) {
[[D[] arrayOf[[D = new double[paramArrayList.size()][][];
for (int i = 0; i < paramArrayList.size(); ++i) {
arrayOf[[D[i] = new double[((ArrayList)paramArrayList.get(i)).size()][3];
for (int j = 0; j < ((ArrayList)paramArrayList.get(i)).size(); ++j) {
arrayOf[[D[i][j][0] = ((Point2D)((ArrayList)paramArrayList.get(i)).get(j)).getX();
arrayOf[[D[i][j][1] = ((Point2D)((ArrayList)paramArrayList.get(i)).get(j)).getY();
arrayOf[[D[i][j][2] = 1.0D;
}
}
if (this.clipPlayer != null)
this.clipPlayer.play(0, 2);
try
{
SwingUtilities.invokeAndWait(new Runnable(this, paramInt, arrayOf[[D) {
public void run() {
this.this$0.animators.add(new View3D.Animator(this) {
private int steps;
public static final int STEP_LIMIT = 8;
public void postDraw() {
paramGL.glDisable(2896);
paramGL.glEnable(3042);
paramGL.glBlendFunc(770, 771);
float f = this.steps / 8.0F;
paramGL.glColor4f(Util3D.sideColors[this.this$1.val$sdex][0], Util3D.sideColors[this.this$1.val$sdex][1], Util3D.sideColors[this.this$1.val$sdex][2], 1.0F - f);
paramGL.glPushMatrix();
paramGL.glTranslatef(0.0F, 0.0F, (float)(this.steps * 1.5D));
View3D.MyTessCallback localMyTessCallback = new View3D.MyTessCallback(this.this$1.this$0, paramGL, View3D.access$200());
GLUtessellator localGLUtessellator = View3D.access$200().gluNewTess();
View3D.access$200().gluTessCallback(localGLUtessellator, 100101, localMyTessCallback);
View3D.access$200().gluTessCallback(localGLUtessellator, 100100, localMyTessCallback);
View3D.access$200().gluTessCallback(localGLUtessellator, 100102, localMyTessCallback);
View3D.access$200().gluTessCallback(localGLUtessellator, 100103, localMyTessCallback);
for (int i = 0; i < this.this$1.val$ptLists.length; ++i) {
View3D.access$200().gluTessBeginPolygon(localGLUtessellator, null);
View3D.access$200().gluTessBeginContour(localGLUtessellator);
for (int j = 0; j < this.this$1.val$ptLists[i].length; ++j)
View3D.access$200().gluTessVertex(localGLUtessellator, this.this$1.val$ptLists[i][j], 0, this.this$1.val$ptLists[i][j]);
View3D.access$200().gluTessEndContour(localGLUtessellator);
View3D.access$200().gluTessEndPolygon(localGLUtessellator);
}
paramGL.glPopMatrix();
paramGL.glDisable(3042);
paramGL.glEnable(2896);
}
public boolean step() {
this.steps += 1;
return (this.steps < 8);
} } );
}
});
}
catch (Exception localException) {
}
}
public void collision(double paramDouble, int paramInt1, int paramInt2) {
if (this.clipPlayer != null)
if ((paramInt1 < this.world.plist.size()) && (paramInt2 < this.world.plist.size()))
this.clipPlayer.play(5, 1);
else
this.clipPlayer.play(4, 1);
}
public void ready()
{
}
public void shutdown()
{
}
public void finished()
{
}
class MyTessCallback implements GLUtessellatorCallback {
private javax.media.opengl.GL gl;
private GLU glu;
public MyTessCallback(, javax.media.opengl.GL paramGL, GLU paramGLU) {
this.gl = paramGL;
this.glu = paramGLU;
}
public void begin() {
this.gl.glBegin(paramInt);
}
public void end() {
this.gl.glEnd();
}
public void vertex()
{
if (paramObject instanceof double[]) {
double[] arrayOfDouble = (double[])(double[])paramObject;
this.gl.glVertex3dv(arrayOfDouble, 0);
}
}
public void vertexData(, java.lang.Object paramObject2)
{
}
public void combine(, java.lang.Object[] paramArrayOfObject1, float[] paramArrayOfFloat, java.lang.Object[] paramArrayOfObject2)
{
double[] arrayOfDouble = new double[3];
arrayOfDouble[0] = paramArrayOfDouble[0];
arrayOfDouble[1] = paramArrayOfDouble[1];
arrayOfDouble[2] = paramArrayOfDouble[2];
paramArrayOfObject2[0] = arrayOfDouble;
}
public void combineData(, java.lang.Object[] paramArrayOfObject1, float[] paramArrayOfFloat, java.lang.Object[] paramArrayOfObject2, java.lang.Object paramObject)
{
}
public void error()
{
String str = this.glu.gluErrorString(paramInt);
System.err.println("Tessellation Error: " + str);
System.exit(0);
}
public void beginData(, java.lang.Object paramObject)
{
}
public void endData()
{
}
public void edgeFlag()
{
}
public void edgeFlagData(, java.lang.Object paramObject)
{
}
public void errorData(, java.lang.Object paramObject)
{
}
}
public class JavaRenderer
implements GLEventListener, KeyListener
{
private TextRenderer textRenderer;
private void drawField()
{
paramGL.glBegin(7);
paramGL.glNormal3d(0.0D, 0.0D, 1.0D);
paramGL.glVertex3d(0.0D, 0.0D, 0.0D);
paramGL.glVertex3d(800.0D, 0.0D, 0.0D);
paramGL.glVertex3d(800.0D, 800.0D, 0.0D);
paramGL.glVertex3d(0.0D, 800.0D, 0.0D);
paramGL.glEnd();
}
public void display() {
int i;
java.lang.Object localObject2;
int j;
java.lang.Object localObject4;
javax.media.opengl.GL localGL = paramGLAutoDrawable.getGL();
localGL.glClear(16384);
localGL.glClear(256);
localGL.glDepthFunc(515);
double d1 = 1.0D;
if (View3D.access$000(this.this$0) > 0)
d1 = View3D.access$100(this.this$0) / View3D.access$000(this.this$0);
localGL.glMatrixMode(5889);
localGL.glLoadIdentity();
View3D.access$200().gluPerspective(45.0D, d1, 160.0D, 2400.0D);
localGL.glMatrixMode(5888);
localGL.glLoadIdentity();
View3D.access$200().gluLookAt(400.0D, -160.0D, 784.0D, 400.0D, 336.0D, 0.0D, 0.0D, 1.0D, 1.0D);
localGL.glEnable(2896);
localGL.glEnable(16384);
float[] arrayOfFloat1 = { 0.0F, 0.0F, 400.0F, 1.0F };
float[] arrayOfFloat2 = { 0.9F, 0.9F, 0.9F, 0.0F };
localGL.glLightfv(16384, 4609, arrayOfFloat2, 0);
localGL.glLightfv(16384, 4611, arrayOfFloat1, 0);
localGL.glEnable(16385);
float[] arrayOfFloat3 = { 800.0F, 800.0F, 400.0F, 1.0F };
float[] arrayOfFloat4 = { 0.2F, 0.2F, 0.2F, 0.0F };
localGL.glLightfv(16385, 4611, arrayOfFloat3, 0);
localGL.glLightfv(16385, 4609, arrayOfFloat4, 0);
for (java.lang.Object localObject1 = this.this$0.animators.iterator(); ((Iterator)localObject1).hasNext(); ) { localObject2 = (View3D.Animator)((Iterator)localObject1).next();
((View3D.Animator)localObject2).preDraw(localGL);
}
Util3D.materialColor(localGL, 0.4F, 0.8F, 0.4F);
drawField(localGL);
if (View3D.access$300(this.this$0) != null) {
localGL.glDisable(2929);
localGL.glDisable(2896);
localGL.glColor3f(0.3F, 0.5F, 0.3F);
localGL.glEnable(12288);
localGL.glEnable(12289);
localObject1 = new double[] { -1.0D, 0.0D, 0.0D, 800.0D };
localGL.glClipPlane(12288, localObject1, 0);
localObject2 = new double[] { 0.0D, -1.0D, 0.0D, 800.0D };
localGL.glClipPlane(12289, localObject2, 0);
localGL.glPushMatrix();
localGL.glTranslated(arrayOfFloat1[0], arrayOfFloat1[1], arrayOfFloat1[2]);
double[] arrayOfDouble = { 1.0D, 0.0D, 0.0D, 0.0D, 0.0D, 1.0D, 0.0D, 0.0D, 0.0D, 0.0D, 1.0D, -1.0D / arrayOfFloat1[2], 0.0D, 0.0D, 0.0D, 0.0D };
localGL.glMultMatrixd(arrayOfDouble, 0);
localGL.glTranslated(-arrayOfFloat1[0], -arrayOfFloat1[1], -arrayOfFloat1[2]);
for (j = 0; j < View3D.access$300(this.this$0).blist.size(); ++j) {
localObject4 = (Bumper)View3D.access$300(this.this$0).blist.get(j);
localGL.glPushMatrix();
localGL.glTranslated(((Bumper)localObject4).pos.getX(), ((Bumper)localObject4).pos.getY(), 0.0D);
localGL.glScalef(8.5F, 8.5F, 8.5F);
View3D.access$400(this.this$0).drawGeometry(localGL);
localGL.glPopMatrix();
}
for (j = 0; j < View3D.access$300(this.this$0).slist.size(); ++j) {
localObject4 = (Sled)View3D.access$300(this.this$0).slist.get(j);
localGL.glPushMatrix();
localGL.glTranslated(((Sled)localObject4).pos.getX(), ((Sled)localObject4).pos.getY(), 0.0D);
localGL.glRotated(270.0D + ((Sled)localObject4).getDir() * 180.0D / 3.141592653589793D, 0.0D, 0.0D, 1.0D);
localGL.glScalef(8.0F, 8.0F, 8.0F);
View3D.access$500(this.this$0).drawGeometry(localGL);
localGL.glPopMatrix();
}
for (j = 0; j < View3D.access$300(this.this$0).plist.size(); ++j) {
localObject4 = (Puck)View3D.access$300(this.this$0).plist.get(j);
localGL.glPushMatrix();
localGL.glTranslated(((Puck)localObject4).pos.getX(), ((Puck)localObject4).pos.getY(), 0.0D);
localGL.glScalef(8.0F, 8.0F, 8.0F);
View3D.access$600(this.this$0).drawGeometry(localGL);
localGL.glPopMatrix();
}
localGL.glPopMatrix();
localGL.glDisable(12289);
localGL.glDisable(12288);
localGL.glEnable(2896);
localGL.glEnable(2929);
localGL.glDisable(3042);
for (j = 0; j < View3D.access$300(this.this$0).blist.size(); ++j) {
localObject4 = (Bumper)View3D.access$300(this.this$0).blist.get(j);
localGL.glPushMatrix();
localGL.glTranslated(((Bumper)localObject4).pos.getX(), ((Bumper)localObject4).pos.getY(), 0.0D);
localGL.glScalef(8.5F, 8.5F, 8.5F);
View3D.access$400(this.this$0).draw(localGL, j / 2);
localGL.glPopMatrix();
}
for (j = 0; j < View3D.access$300(this.this$0).slist.size(); ++j) {
localObject4 = (Sled)View3D.access$300(this.this$0).slist.get(j);
localGL.glPushMatrix();
localGL.glTranslated(((Sled)localObject4).pos.getX(), ((Sled)localObject4).pos.getY(), 0.0D);
localGL.glRotated(270.0D + ((Sled)localObject4).getDir() * 180.0D / 3.141592653589793D, 0.0D, 0.0D, 1.0D);
localGL.glScalef(8.0F, 8.0F, 8.0F);
View3D.access$500(this.this$0).draw(localGL, j);
localGL.glPopMatrix();
}
for (j = 0; j < View3D.access$300(this.this$0).plist.size(); ++j) {
localObject4 = (Puck)View3D.access$300(this.this$0).plist.get(j);
localGL.glPushMatrix();
localGL.glTranslated(((Puck)localObject4).pos.getX(), ((Puck)localObject4).pos.getY(), 0.0D);
localGL.glScalef(8.0F, 8.0F, 8.0F);
View3D.access$600(this.this$0).draw(localGL, ((Puck)localObject4).color);
localGL.glPopMatrix();
}
}
localGL.glDisable(2929);
localGL.glDisable(2896);
localGL.glEnable(3042);
localGL.glBlendFunc(770, 771);
localGL.glColor4f(0.6F, 0.7F, 0.6F, 0.5F);
localGL.glBegin(7);
double d2 = 4.0D;
double d4 = 796.0D;
localGL.glNormal3d(0.0D, -1.0D, 0.0D);
localGL.glVertex3d(d2, 0.0D, 4.0D);
localGL.glVertex3d(d4, 0.0D, 4.0D);
localGL.glVertex3d(d4, 0.0D, 14.0D);
localGL.glVertex3d(d2, 0.0D, 14.0D);
localGL.glNormal3d(0.0D, 1.0D, 0.0D);
localGL.glVertex3d(d4, 800.0D, 4.0D);
localGL.glVertex3d(d2, 800.0D, 4.0D);
localGL.glVertex3d(d2, 800.0D, 14.0D);
localGL.glVertex3d(d4, 800.0D, 14.0D);
localGL.glNormal3d(-1.0D, 0.0D, 0.0D);
localGL.glVertex3d(0.0D, d4, 4.0D);
localGL.glVertex3d(0.0D, d2, 4.0D);
localGL.glVertex3d(0.0D, d2, 14.0D);
localGL.glVertex3d(0.0D, d4, 14.0D);
localGL.glNormal3d(1.0D, 0.0D, 0.0D);
localGL.glVertex3d(800.0D, d2, 4.0D);
localGL.glVertex3d(800.0D, d4, 4.0D);
localGL.glVertex3d(800.0D, d4, 14.0D);
localGL.glVertex3d(800.0D, d2, 14.0D);
localGL.glEnd();
if (View3D.access$300(this.this$0) != null)
for (i = 0; i < View3D.access$300(this.this$0).trail.size(); ++i) {
if (i == 0)
localGL.glColor4f(1.0F, 0.0F, 0.0F, 0.5F);
else
localGL.glColor4f(0.0F, 0.0F, 1.0F, 0.5F);
if (((LinkedList)View3D.access$300(this.this$0).trail.get(i)).size() > 0) {
localObject2 = ((LinkedList)View3D.access$300(this.this$0).trail.get(i)).listIterator(0);
java.lang.Object localObject3 = null;
localGL.glBegin(8);
while (((ListIterator)localObject2).hasNext()) {
localPoint2D = (Point2D)((ListIterator)localObject2).next();
if ((localObject3 != null) && (localPoint2D.distance((Point2D)localObject3) >= 30.0D))
{
localGL.glEnd();
localGL.glBegin(8);
}
localGL.glVertex3d(localPoint2D.getX(), localPoint2D.getY(), 8.0D);
localGL.glVertex3d(localPoint2D.getX(), localPoint2D.getY(), 1.5D);
localObject3 = localPoint2D;
}
Point2D localPoint2D = ((Sled)View3D.access$300(this.this$0).slist.get(i)).pos;
if ((localObject3 != null) && (localPoint2D.distance((Point2D)localObject3) >= 30.0D))
{
localGL.glEnd();
localGL.glBegin(8);
}
localGL.glVertex3d(localPoint2D.getX(), localPoint2D.getY(), 8.0D);
localGL.glVertex3d(localPoint2D.getX(), localPoint2D.getY(), 1.5D);
localGL.glEnd();
localObject3 = null;
localGL.glBegin(3);
localObject2 = ((LinkedList)View3D.access$300(this.this$0).trail.get(i)).listIterator(0);
while (((ListIterator)localObject2).hasNext()) {
localPoint2D = (Point2D)((ListIterator)localObject2).next();
if ((localObject3 != null) && (localPoint2D.distance((Point2D)localObject3) >= 30.0D))
{
localGL.glEnd();
localGL.glBegin(3);
}
localGL.glVertex3d(localPoint2D.getX(), localPoint2D.getY(), 8.0D);
localObject3 = localPoint2D;
}
localPoint2D = ((Sled)View3D.access$300(this.this$0).slist.get(i)).pos;
if ((localObject3 != null) && (localPoint2D.distance((Point2D)localObject3) >= 30.0D))
{
localGL.glEnd();
localGL.glBegin(3);
}
localGL.glVertex3d(localPoint2D.getX(), localPoint2D.getY(), 8.0D);
localGL.glEnd();
localObject3 = null;
localGL.glBegin(3);
localObject2 = ((LinkedList)View3D.access$300(this.this$0).trail.get(i)).listIterator(0);
while (((ListIterator)localObject2).hasNext()) {
localPoint2D = (Point2D)((ListIterator)localObject2).next();
if ((localObject3 != null) && (localPoint2D.distance((Point2D)localObject3) >= 30.0D))
{
localGL.glEnd();
localGL.glBegin(3);
}
localGL.glVertex3d(localPoint2D.getX(), localPoint2D.getY(), 1.5D);
localObject3 = localPoint2D;
}
localPoint2D = ((Sled)View3D.access$300(this.this$0).slist.get(i)).pos;
if ((localObject3 != null) && (localPoint2D.distance((Point2D)localObject3) >= 30.0D))
{
localGL.glEnd();
localGL.glBegin(3);
}
localGL.glVertex3d(localPoint2D.getX(), localPoint2D.getY(), 1.5D);
localGL.glEnd();
}
}
localGL.glEnable(2929);
for (Iterator localIterator = this.this$0.animators.iterator(); localIterator.hasNext(); ) { localObject2 = (View3D.Animator)localIterator.next();
((View3D.Animator)localObject2).postDraw(localGL);
}
localGL.glDisable(2929);
localGL.glDisable(2896);
localGL.glEnable(3042);
localGL.glMatrixMode(5889);
localGL.glLoadIdentity();
View3D.access$200().gluOrtho2D(-20.0D, 20.0D, -20.0D, 20.0D);
localGL.glMatrixMode(5888);
localGL.glLoadIdentity();
double d3 = 18.0D;
double d5 = View3D.access$700(this.this$0) + View3D.access$800(this.this$0) + View3D.access$900(this.this$0);
double d6 = View3D.access$700(this.this$0) / d5;
double d7 = (View3D.access$700(this.this$0) + View3D.access$800(this.this$0)) / d5;
double d8 = 18.5D;
double d9 = 19.0D;
d6 = (d6 - 0.5D) * 2.0D * d3;
d7 = (d7 - 0.5D) * 2.0D * d3;
localGL.glBegin(7);
localGL.glColor4f(1.0F, 0.0F, 0.0F, 0.9F);
localGL.glVertex2d(-d3, d8);
localGL.glVertex2d(d6, d8);
localGL.glVertex2d(d6, d9);
localGL.glVertex2d(-d3, d9);
localGL.glColor4f(0.8F, 0.8F, 0.8F, 0.9F);
localGL.glVertex2d(d6, d8);
localGL.glVertex2d(d7, d8);
localGL.glVertex2d(d7, d9);
localGL.glVertex2d(d6, d9);
localGL.glColor4f(0.0F, 0.0F, 1.0F, 0.9F);
localGL.glVertex2d(d7, d8);
localGL.glVertex2d(d3, d8);
localGL.glVertex2d(d3, d9);
localGL.glVertex2d(d7, d9);
localGL.glEnd();
this.textRenderer.beginRendering(View3D.access$100(this.this$0), View3D.access$000(this.this$0));
String str = Integer.toString(View3D.access$700(this.this$0));
Rectangle2D localRectangle2D = this.textRenderer.getBounds(str);
this.textRenderer.setColor(1.0F, 0.1F, 0.1F, 0.9F);
this.textRenderer.draw(str, View3D.access$100(this.this$0) * 1 / 20, View3D.access$000(this.this$0) * 28 / 30);
str = Integer.toString(View3D.access$900(this.this$0));
localRectangle2D = this.textRenderer.getBounds(str);
this.textRenderer.setColor(0.1F, 0.1F, 1.0F, 0.9F);
this.textRenderer.draw(str, (int)Math.round(View3D.access$100(this.this$0) * 19 / 20 - localRectangle2D.getWidth()), View3D.access$000(this.this$0) * 28 / 30);
this.textRenderer.endRendering();
localGL.glEnable(2929);
localGL.glDisable(3042);
localGL.glEnable(2896);
}
public void displayChanged(, boolean paramBoolean1, boolean paramBoolean2)
{
}
public void init()
{
try {
View3D.access$602(this.this$0, new Mesh());
View3D.access$600(this.this$0).read("/icpc/challenge/model/puck.mesh");
View3D.access$402(this.this$0, new Mesh());
View3D.access$400(this.this$0).read("/icpc/challenge/model/bumper.mesh");
View3D.access$502(this.this$0, new Mesh());
View3D.access$500(this.this$0).read("/icpc/challenge/model/sled.mesh");
} catch (IOException localIOException) {
System.err.println("Can't load mesh data");
System.err.println(localIOException);
System.exit(1);
}
javax.media.opengl.GL localGL = paramGLAutoDrawable.getGL();
localGL.glShadeModel(7425);
localGL.glClearColor(0.2F, 0.2F, 0.2F, 0.0F);
localGL.glClearDepth(1.0D);
localGL.glEnable(2929);
localGL.glHint(3152, 4354);
localGL.glEnable(2977);
this.textRenderer = new TextRenderer(new Font("SansSerif", 1, 16));
paramGLAutoDrawable.addKeyListener(this);
}
public void reshape(, int paramInt1, int paramInt2, int paramInt3, int paramInt4)
{
javax.media.opengl.GL localGL = paramGLAutoDrawable.getGL();
View3D.access$102(this.this$0, paramInt3);
View3D.access$002(this.this$0, paramInt4);
}
public void keyPressed() {
if (paramKeyEvent.getKeyCode() == 27)
System.exit(0);
}
public void keyReleased()
{
}
public void keyTyped()
{
}
}
abstract class Animator
{
void preDraw()
{
}
void postDraw()
{
}
abstract boolean step();
}
}