import java.applet.*;
import java.awt.*;
import java.util.*;
import java.awt.event.*;
import AnimatedSprite;
import Playfield;

public class Checkpoint extends Applet implements Runnable {
  Playfield playfield;
  Image output;
  Thread animate;
  AnimatedSprite defender;
  int tick, bgWidth, bgHeight;
  int bgScrollX, bgScrollY;		// background scroll
    
  public void init()
  {
    String tokens, filename;
    StringTokenizer parse;
    int nframes;
    AnimatedSprite sprite;

    tick = 0;			// global time counter

    playfield = new Playfield(getImage(getDocumentBase(), getParameter("background")));
    bgWidth = playfield.getWidth();
    bgHeight = playfield.getHeight();
    bgScrollX = Integer.parseInt(getParameter("backgroundScrollX"));
    bgScrollY = Integer.parseInt(getParameter("backgroundScrollY"));

    tokens = getParameter("defender");
    if (tokens != null) {
      parse = new StringTokenizer(tokens, ", ");
      filename = parse.nextToken();
      nframes = Integer.parseInt(parse.nextToken());

      defender = new AnimatedSprite(getImage(getDocumentBase(), filename), nframes);
      //Set up animation frames...
    }
    else {
      defender = null;
    }

    //Initialize defender...
    //....

    addMouseListener(new MouseKeeper());	// Listen for button events
  }

  public void start() 
  {
    animate = new Thread(this);
    animate.start();
  }

  public void stop() 
  {
    animate = null;
  }

  public void run() 
  {
    while (true) {
      try {
	animate.sleep(100);
      } catch (InterruptedException e) {
      }
      renderPlayfield( );
    }
  }

  public synchronized void renderPlayfield( ) 
  {
    // Draw the picture
    playfield.Draw();
    output = playfield.toImage(this);

    // Scroll
    playfield.scroll(bgScrollX, bgScrollY);

    repaint();
  }

  public void paint(Graphics g) 
  {
    if (output != null)
      g.drawImage(output, 0, 0, this);
  }

  public void update(Graphics g) 
  {
    paint(g);
  }

  private class MouseKeeper extends MouseAdapter 
  {
    public void mousePressed (MouseEvent e) 
    {
      //Move the defender...
      //...
    }
  }

}
