/** ----------------------------
 *  Speelt de plaatjes T1.gif, T2.dif, ..., TN.gif af naast Duke.
 *  
 *  RK 2000-03-02
 *  ----------------------------
 */
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;
import java.io.*;

public class Animatie extends Applet 
                      implements Runnable, ActionListener {
  private int nimg, interval, pause;
  private String nimgName = "nimg";
  private String intervalName = "interval";
  private String pauseName = "pause";
  private Image duke;
  private Image huidigePlaatje;
  private Vector plaatjes = new Vector();
  private Thread filmpje;
  private Status mode = new Status();
  private int inr = 0;

  public void init() {
    // Verzamel parameters.
    try { nimg = Integer.parseInt( getParameter(nimgName) ); }
    catch (NumberFormatException e) {
      System.out.println( "Invalid parameter "+ nimgName + ": " + getParameter(nimgName) );
    }
    try { interval = Integer.parseInt( getParameter(intervalName) ); }
    catch (NumberFormatException e) {
      System.out.println( "Invalid parameter "+ intervalName + ": " + getParameter(intervalName) );
    }
    try { pause = Integer.parseInt( getParameter(pauseName) ); }
    catch (NumberFormatException e) {
      System.out.println( "Invalid parameter "+ pauseName + ": " + getParameter(pauseName) );
    }
    System.out.println( "params: "+ nimg + " " + interval + " " + pause ); //vvv

    // Verzamel de plaatjes.
    duke = getImage( getCodeBase(), "duke.gif" );
    for (int i=0; i<nimg; i++) {
      plaatjes.addElement( getImage(getCodeBase(), "T" + (i + 1) + ".gif") );
      System.out.println("T" + (i + 1) + ".gif"); //vvv
    }
    huidigePlaatje = (Image)plaatjes.firstElement();

    // Creeer buttons. 
    Button knop = new Button( "Start/Stop" );
    add( knop );
    knop.addActionListener( this ); // Meld de listener aan bij de knop.

  }

  public void start() {
    if (filmpje == null) {
      filmpje = new Thread( this );
      filmpje.start();
      mode.setStatus( true );
    }
  }

  public void run() {
    while ( filmpje == Thread.currentThread() ) {
      try {
        Thread.sleep(pause); // Begin altijd met het voor een tijdje tonen van eerste plaatje.
        inr = 0;
        while ( true ) {
          while ( mode.getStatus() ) {
            if ( mode.getStatus() ) {
              if ( inr>=plaatjes.size() ) inr = 0;
              huidigePlaatje = (Image)plaatjes.elementAt(inr);
              repaint();
              Thread.sleep(interval);
              inr++;
            }
            if ( mode.getStatus() ) {
              if ( inr==plaatjes.size() ) Thread.sleep(pause);
            }
          }
          Thread.sleep(interval); // Zorg dat die omvattende while loop niet helemaal niets te doen heeft, 
                                  // want anders slaat hij op hol en hangt de boel door performancegebrek.
        }
      } 
      catch (InterruptedException e) {}
    }
  }

  public void paint( Graphics g ) {
    g.drawString( "Hallo Wereld! " + inr + " " + mode.getStatus(), 10, 20 );
    g.drawImage( duke, 40, 70, this );
    g.drawImage( huidigePlaatje, 110, 40, this );
  }

  public void actionPerformed( ActionEvent e ) {
    if ( mode.getStatus() ) {
      mode.setStatus( false );
      repaint();
    }
    else {
      mode.setStatus( true );
      repaint();
    }
  }

  public void stop() { filmpje = null; }
}
