import java.awt.*;
import java.applet.*;

public class SpriteDemo extends Applet implements Runnable
{
	private Image viewArea;
  private Playfield playfield;
	private Thread animate;
	private boolean noredraw;

	/* The purpose of init is to initialize the system of sprites
	   and to start the animation thread. */
  public void init()
  {
  	Image image;
  	Sprite sprite;
  	
  	noredraw = false;
  	
    image = getImage(getCodeBase(), "desert.gif");
    sprite = new Sprite(image, 0, 0, 0);
  	
  	playfield = new Playfield(sprite.getWidth(), sprite.getHeight());
  		
  	playfield.addSprite(sprite);
  	
  	image = getImage(getCodeBase(), "odie1.gif");
  	sprite = new Sprite(image, 0, 0, 0);
  	playfield.addSprite(sprite);
  	
  	image = getImage(getCodeBase(), "odie2.gif");
  	sprite = new Sprite(image, 200, 0, 0);
  	playfield.addSprite(sprite);
  	
  	image = getImage(getCodeBase(), "lima.gif");
  	sprite = new Sprite(image, 100, 100, 0);
  	playfield.addSprite(sprite);
  	
  	renderPlayfield();
  	animate = new Thread(this);
  	animate.start();
	}
	
	public void renderPlayfield()
	{
		if (noredraw) return;
		
		playfield.updateSprites();
		viewArea = playfield.toImage();
	}
	
	public void run()
	{
		while (true)
		{
			renderPlayfield();
			repaint();
		}
	}
	
	public boolean mouseDown(Event e, int x, int y)
	{
		return playfield.mouseDown(e, x, y);
	}
	
	public boolean mouseMove(Event e, int x, int y)
	{
		return playfield.mouseMove(e, x, y);
	}
	
	public void update(Graphics g) 
	{
  	paint(g);
  }
	
	public void paint(Graphics g) 	
  {
  	if (g.drawImage(viewArea, 0, 0, this) == false)
  		noredraw = true;
  	else
  		noredraw = false;
  }
}