package icpc.challenge.view;
import icpc.challenge.world.AbstractView;
import icpc.challenge.world.Bumper;
import icpc.challenge.world.Puck;
import icpc.challenge.world.Sled;
import icpc.challenge.world.World;
import java.awt.geom.Point2D;
import java.awt.geom.Point2D.Double;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
public class TracePlayer
{
private static void usage(String paramString)
{
if (paramString != null)
System.err.println(paramString);
System.err.println("usage: TracePlayer");
System.err.println(" [-trace <trace file>]");
System.err.println(" [-view simple]");
System.err.println(" [-view 3D]");
System.err.println(" [-speed <multiplier>]");
System.exit(-1);
}
public static boolean waitUntil(long paramLong, double paramDouble1, double paramDouble2)
{
long l1 = System.currentTimeMillis() - paramLong;
int i = 0;
while (paramDouble1 > paramDouble2 * l1) {
try {
long l2 = ()(paramDouble1 - paramDouble2 * l1);
i = 1;
Thread.sleep(l2);
}
catch (InterruptedException localInterruptedException) {
}
l1 = System.currentTimeMillis() - paramLong;
}
return i;
}
public static void main(String[] paramArrayOfString)
{
Object localObject1 = System.in;
double d1 = 1.0D;
Object localObject2 = null;
try
{
int i = 0;
while (i < paramArrayOfString.length) {
int j = 0;
if ((paramArrayOfString[i].equals("-view")) && (i + 1 < paramArrayOfString.length))
{
if (paramArrayOfString[(i + 1)].equals("simple")) {
if (localObject2 != null)
usage("Only one view permitted");
localObject2 = new SimpleView();
j = 2;
}
if (paramArrayOfString[(i + 1)].equals("3D")) {
if (localObject2 != null)
usage("Only one view permitted");
localObject2 = new View3D();
j = 2;
}
}
if ((paramArrayOfString[i].equals("-trace")) && (i + 1 < paramArrayOfString.length))
{
localObject1 = new FileInputStream(paramArrayOfString[(i + 1)]);
j = 2;
}
if ((paramArrayOfString[i].equals("-speed")) && (i + 1 < paramArrayOfString.length))
{
d1 = Double.valueOf(paramArrayOfString[(i + 1)]).doubleValue();
j = 2;
}
if (j == 0)
usage(null);
i += j;
}
} catch (Exception localException1) {
System.err.println(localException1);
usage(null);
}
if (localObject2 == null)
localObject2 = new SimpleView();
try
{
Scanner localScanner = new Scanner((InputStream)localObject1);
long l = System.currentTimeMillis();
while (true) { String str;
do while (true) { while (true) { while (true) { double d9;
while (true) { Object localObject3;
double d5;
double d8;
if ("end".equals(str = localScanner.next()))
break label996;
if (!(str.equals("snapshot"))) break;
World localWorld = new World();
double d3 = localScanner.nextDouble();
i1 = localScanner.nextInt();
localWorld.plist.clear();
for (int i2 = 0; i2 < i1; ++i2) {
localObject3 = new Puck();
d5 = localScanner.nextDouble();
d8 = localScanner.nextDouble();
((Puck)localObject3).pos.setLocation(d5, d8);
((Puck)localObject3).color = localScanner.nextInt();
localWorld.plist.add(localObject3);
}
i1 = localScanner.nextInt();
localWorld.blist.clear();
for (i2 = 0; i2 < i1; ++i2) {
localObject3 = new Bumper();
d5 = localScanner.nextDouble();
d8 = localScanner.nextDouble();
((Bumper)localObject3).pos.setLocation(d5, d8);
((Bumper)localObject3).color = localScanner.nextInt();
localWorld.blist.add(localObject3);
}
i1 = localScanner.nextInt();
localWorld.slist.clear();
localWorld.trail.clear();
for (i2 = 0; i2 < i1; ++i2)
{
localObject3 = new Sled();
LinkedList localLinkedList = new LinkedList();
double d7 = localScanner.nextDouble();
d9 = localScanner.nextDouble();
((Sled)localObject3).pos.setLocation(d7, d9);
((Sled)localObject3).setDir(localScanner.nextDouble());
((Sled)localObject3).color = localScanner.nextInt();
localWorld.slist.add(localObject3);
int i6 = localScanner.nextInt();
for (int i7 = 0; i7 < i6; ++i7) {
d7 = localScanner.nextDouble();
d9 = localScanner.nextDouble();
localLinkedList.add(new Point2D.Double(d7, d9));
}
localWorld.trail.add(localLinkedList);
}
waitUntil(l, d3, d1);
((AbstractView)localObject2).snapshot(d3, localWorld); }
if (!(str.equals("sledLoop"))) break;
d2 = localScanner.nextDouble();
k = localScanner.nextInt();
i1 = localScanner.nextInt();
ArrayList localArrayList1 = new ArrayList();
for (int i3 = 0; i3 < i1; ++i3) {
int i4 = localScanner.nextInt();
ArrayList localArrayList2 = new ArrayList();
for (int i5 = 0; i5 < i4; ++i5) {
d9 = localScanner.nextDouble();
double d10 = localScanner.nextDouble();
localArrayList2.add(new Point2D.Double(d9, d10));
}
localArrayList1.add(localArrayList2);
}
((AbstractView)localObject2).sledLoop(d2, k, localArrayList1); }
if (!(str.equals("hitWall"))) break;
d2 = localScanner.nextDouble();
k = localScanner.nextInt();
i1 = localScanner.nextInt();
d4 = localScanner.nextDouble();
double d6 = localScanner.nextDouble();
((AbstractView)localObject2).hitWall(d2, k, i1, d4, d6); }
if (!(str.equals("sledWrap"))) break;
d2 = localScanner.nextDouble();
k = localScanner.nextInt();
i1 = localScanner.nextInt();
double d4 = localScanner.nextDouble();
((AbstractView)localObject2).sledWrap(d2, k, i1, d4); }
while (!(str.equals("collision")));
double d2 = localScanner.nextDouble();
int k = localScanner.nextInt();
int i1 = localScanner.nextInt();
label996: ((AbstractView)localObject2).collision(d2, k, i1);
}
}
catch (Exception localException2) {
System.err.println(localException2);
}
}
}