import java.applet.*; 
import java.awt.*; 
import java.awt.image.*; 
import java.awt.event.*; 
import java.io.*; 
import java.net.*; 
import java.text.*; 
import java.util.*; 
import java.util.zip.*; 

public class planes extends BApplet {
Plane[] planes = new Plane[100];

void setup()
{
  size(100,500);
  framerate(40);
  lights();
  noStroke();
  background(0);
  rectMode(CENTER_DIAMETER);
  initPlanes();
}

void loop()
{

  translate(width/2, height/2);
  //rotateX(PI/2.5);
  rotateX(PI/4);

  for (int i = 0; i < planes.length; i++)
  {
    planes[i].draw();
  }
}

  void mousePressed()
  {
    initPlanes();
  }

void initPlanes()
{
  int colors[] = new int[7];
  int c = 0;
  colors[c++] = color(72,140,44);
  colors[c++] = color(168,212,156);
  colors[c++] = color(159,214,238);
  colors[c++] = color(204,0,51);
  colors[c++] = color(255,255,255);
  colors[c++] = color(255,255,255);
  colors[c++] = color(255,255,255);
  
  for (int i = 0; i < planes.length; i++)
  {
    planes[i] = new Plane(random(100), random(30), random(300)-150, colors[(int)(random(colors.length))]);
  }
}



class Plane
{
  public Plane(float x, float y, float z, int c)
  {
    myX = x;
    myY = y;
    myZ = z;
    myAngle = initAngle();
    myAngularVel = initVel();
    myColor = c;
    myHeight = initHeight();
    myWidth = myHeight;
  }
  
  private float initAngle()
  {
    float val = random(100);
    val -= 50.0f;
    return val/50;
  }
  
  private float initVel()
  {
    float val = random(100);
    val -= 50.0f;
    return val/400;
  }
  
  private float initHeight()
  {
    return random(200);
  }
  
  
  public void draw()
  {
    push();
      rotate(myAngle);
      translate(myX, myY, myZ);
      fill(myColor);
      triangle(0,0, 0,myHeight, myWidth,0);
      if (abs(myAngularVel) > .001f)
      {
            updateAngle();
      }
    pop();
  }
  
  private void updateAngle()
  {
    myAngle += myAngularVel;
    myAngularVel = myAngularVel / 1.01f;
    if (myAngle > (PI*2))
    {
      myAngle = 0;
    }
  }
  
  

  private float myX;
  private float myY;
  private float myZ;
  private float myAngle;
  private float myAngularVel;
  private int myColor;
  private float myHeight;
  private float myWidth;
}

}
