//
import render.*;
import java.awt.*;
public class SnitchTest extends RenderApplet
{
Polly polly;
Snitch snitch;
boolean bulletTime = false;
int lookingState = 1, noddingState = 0, turningState = 0;
public boolean keyUp(Event e, int key) { // SET ACTIONS VIA KEYBOARD
if (! super.keyUp(e, key))
setAction(key - 'a');
return true;
}
public void setAction(int a) {
switch (a) {
case 't'-'a':
bulletTime = ! bulletTime;
break;
case 'v'-'a':
lookingState = (lookingState + 1) % 3;
polly.setGazeWeight(lookingState == 0 ? 0 : lookingState == 1 ? 1 : -1);
break;
case 'y'-'a':
noddingState = (noddingState + 1) % 3;
polly.setNodding(noddingState == 0 ? 0 : noddingState == 1 ? .5 : -.5);
break;
case 'z'-'a':
turningState = (turningState + 1) % 3;
polly.setTurning(turningState == 0 ? 0 : turningState == 1 ? .8 : -.8);
break;
default:
polly.setAction(a); // SELECT AN ACTION
break;
}
}
public void initialize() { // INITIALIZE EVERYTHING
addLight(1,1,1, 1,1,1); // LIGHTS
addLight(0,-1,0, 1,1,1);
addLight(-1,0,-1, 1,1,1);
setBgColor(.175,.175,.7); // BACKGROUND COLOR
setFOV(.8);
setFL(8); // CAMERA FOCAL LENGTH
push();
rotateX(Math.PI/6);
transform(world); // INITIAL VIEW ANGLE
pop();
Material floorColor = (new Material()).setColor(.2,.2,.4);
push(); // CREATE THE FLOOR
translate(0,-.03,0);
scale(2,.03,2);
rotateX(Math.PI/2);
transform(world.add().cube().setMaterial(floorColor));
pop();
world.add(polly = new Polly()); // CREATE POLLY
world.add(snitch = new Snitch()); // CREATE SNITCH
polly.setGazeWeight(1);
}
double oldTime = 0, bounce = 0, circle = 0;
double xyz[] = {0,0,0};
public void animate(double time) { // ANIMATE ONE FRAME
double elapsed = oldTime == 0 ? 0 : time - oldTime;
oldTime = time;
circle += (bulletTime ? .3 : 1) * elapsed;
xyz[0] = 0;
xyz[1] = 0;
xyz[2] = -2.5;
Vec.rotate(xyz, 1, circle);
snitch.setPosition(xyz[0], xyz[2] - .5);
snitch.setDirection(circle);
snitch.setRate(bulletTime ? 1.2 : 15);
snitch.animate(time);
polly.setPosition(-1,0);
polly.setDirection(Math.PI/2);
polly.animate(time);
polly.setGaze(snitch);
}
}