// Sideways star field java.applet.Applet
// Arguments: NUMSTARS , X , Y (X and Y are java.applet.Applet size)
// Michael Ewert : morgansun@pinc.com

import java.awt.*;
import java.lang.*;

public class ModStars extends java.applet.Applet implements Runnable, ModuleInterface {
   boolean first = true;
   int MAXX = 400;
   int MAXY = 100;
   final int MAXZ = 200;
   int numStars;
   star starA[];
   java.awt.Color colorA[] = new java.awt.Color[MAXZ];
   Thread kicker = null;

   boolean resized = false;

	public final String strInfo = "Michael Ewert : morgansun@pinc.com";
	public final String strTitle = "Sideways star field";
	public final String strListname = "Stars";

	// Interface implementation
	public String getInfo() { return strInfo; }
	public String getTitle() { return strTitle; }
	public String getListname() { return strListname; }
	public java.applet.Applet getApplet() { return this; }



   public void init(){
/*
	String arg = getParameter("NUMSTARS");
	numStars = (arg != null) ? Integer.valueOf(arg).intValue() :  25;
	starA = new star[numStars];
	arg = getParameter("X");
	MAXX = (arg != null) ? Integer.valueOf(arg).intValue() : MAXX;
	arg = getParameter("Y");
	MAXY = (arg != null) ? Integer.valueOf(arg).intValue() : MAXY;
	resize(MAXX,MAXY);
	for(int i = 0 ; i < numStars ; i++) {
	   starA[i] = new star((int)(java.lang.Math.random()*MAXX),
		(int)(java.lang.Math.random()*MAXY),
		(int)(java.lang.Math.random()*(MAXZ-1)));
	}
	for(int i = 1 ; i <= MAXZ ; i++) colorA[i-1] = new Color(256-i,256-i,256-i);

*/

   }

   public void start(){
		if (kicker == null) {
		   kicker = new Thread(this);
		   kicker.setPriority(kicker.MIN_PRIORITY);
		   kicker.start();
		}
   }

   public void stop(){
		kicker = null;
   }

   public void paint(Graphics g){
     if (!resized) {
		MAXX = getSize().width;
		MAXY = getSize().height;

		numStars = 25;
		starA = new star[numStars];
		resize(MAXX,MAXY);
		for(int i = 0 ; i < numStars ; i++) {
		   starA[i] = new star((int)(java.lang.Math.random()*MAXX),
			(int)(java.lang.Math.random()*MAXY),
			(int)(java.lang.Math.random()*(MAXZ-1)));
		}
		for(int i = 1 ; i <= MAXZ ; i++) colorA[i-1] = new Color(256-i,256-i,256-i);

      resized = true;
     }

	  g.setColor(Color.black);
	  g.fillRect(0,0,MAXX,MAXY);
	  first = false;
   }
   public void update(Graphics g) {

	for(int i = 0 ; i < numStars ; i++){
	   int z = starA[i].z;
	   starA[i].xa = starA[i].x;
	   starA[i].ya = starA[i].y;
	   int dx = (int)(9.*((200. - (double)z)/200.));
	   starA[i].x += dx+1;

	   if(starA[i].x > 6000){
	   starA[i] = new star(0,(int)(java.lang.Math.random()*MAXY),
			  (int)(java.lang.Math.random()*MAXZ));
	   }
	   if(starA[i].x > MAXX)
		starA[i].x = 6000;

	 }

	for(int i = 0 ; i < numStars ; i++){
	   int xa = starA[i].xa;
	   int ya = starA[i].ya;
	   int x = starA[i].x;
	   int y = starA[i].y;
	   int z = starA[i].z;
	   g.setColor(Color.black);
	   g.drawLine(xa,ya,xa+1,ya+1);
	   g.drawLine(xa+1,ya,xa,ya+1);            

	   g.setColor(colorA[z]);
	   g.drawLine(x,y,x+1,y+1);
	   g.drawLine(x+1,y,x,y+1);     
	   g.setColor(Color.black);
	}
	if(first) paint(g);
}
   public void run() {
      while(kicker != null){
	repaint();
	try {kicker.sleep(25);} catch (InterruptedException e) {}
      }
   
}
   public boolean mouseDown(java.awt.Event evt, int x, int y) {
	first = true;
	repaint();
	return true;
   }


class star {
   int x,y,z; 
   int xa,ya;

   star(int i, int j, int k){
	x = i;
	y = j;
	z = k;
	xa = i;
	ya = j;
   }

}

}

