//

import render.*;
import java.awt.*;

public class PollyTrack extends RenderApplet
{
   Polly polly;
   double theta = 0;

   public boolean keyUp(Event e, int key) {                  // SET ACTIONS VIA KEYBOARD
      if (! super.keyUp(e, key))
         action(key - 'a');
      return true;
   }

   public void action(int a) { polly.setAction(a); }            // SELECT AN ACTION

   public void initialize() {                                // INITIALIZE EVERYTHING

      addLight(1,1,1, 1,1,1);          // LIGHTS
      addLight(0,-1,0, 1,1,1);
      setBgColor(.2,.2,.8);            // BACKGROUND COLOR
      setFL(6);                        // CAMERA FOCAL LENGTH
      push();
	 rotateX(Math.PI/6);
	 rotateY(9 * Math.PI / 8);
	 transform(world);             // INITIAL VIEW ANGLE
      pop();

      world.add().setMaterial((new Material()).setColor(1,1,1).setTransparency(.5));
      world.child[0].cylinder(20);
      push();                          // MAKE THE TRANSPARENT FLOOR
	 scale(3,.001,3);
	 rotateX(Math.PI/2);
	 transform(world.child[0]);
      pop();

      world.add(polly = new Polly());  // CREATE POLLY
   }

   double prevTime = 0, size = .8, radius = 2;

   public void animate(double time) {                        // ANIMATE ONE FRAME
      polly.animate(time);

      push();
	 rotateY(theta);
	 translate(radius,0,0);
	 scale(size,size,size);
	 transform(polly);
      pop();

      if (prevTime == 0) prevTime = time;
      theta += size * polly.getTravel(time - prevTime) / radius;
      prevTime = time;
   }
}