/****************************************************
 *    6.837 Project 1:  Sprite-based Applets        *
 *    Created by:  Rielyn Sarabia                   *
 *    September 28, 1998                            *
 ****************************************************/


package project1;

import java.awt.*;
import java.awt.image.*;
import java.net.*;
import java.applet.Applet;
import java.io.*;
import java.util.*;

public class SpriteDemo extends Applet implements Runnable {
  //SpriteDemo is the applet in which 2 sprites, frog and ant, are displayed
  //   on a playfield
  //Please use the file MySprite.html to view this applet.

  Playfield playfield;
  AnimatedSprite frog;
  AnimatedSprite ant;
  Image output;         //image to which the playfield raster is drawn
  Thread animate;
  
  public void init() {

    //initialize the playfield
    playfield = new Playfield(getImage(getDocumentBase(), getParameter("playfield")), Integer.parseInt(getParameter("numSprites")));
    
    //initialize the frog sprite
    StringTokenizer st = new StringTokenizer(getParameter("frog"), " ,");
    frog = new AnimatedSprite(getImage(getDocumentBase(), st.nextToken()), Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()));
    while (st.hasMoreTokens()) {
      int track = Integer.parseInt(st.nextToken()); 
      int frame = Integer.parseInt(st.nextToken()); 
      int ticks = Integer.parseInt(st.nextToken()); 
      int dx = Integer.parseInt(st.nextToken()); 
      int dy = Integer.parseInt(st.nextToken()); 
      frog.addState(track, frame, ticks, dx, dy);
    }
    
    //initialize the ant sprite
    st = new StringTokenizer(getParameter("ant"), " ,");
    ant = new AnimatedSprite(getImage(getDocumentBase(), st.nextToken()), Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()));
    while (st.hasMoreTokens()) {
      int track = Integer.parseInt(st.nextToken()); 
      int frame = Integer.parseInt(st.nextToken()); 
      int ticks = Integer.parseInt(st.nextToken()); 
      int dx = Integer.parseInt(st.nextToken()); 
      int dy = Integer.parseInt(st.nextToken()); 
      ant.addState(track, frame, ticks, dx, dy);
    }
    
    //add the ant and frog to the playfield
    playfield.addSprite(0, ant);
    playfield.addSprite(1, frog);

    //now, draw the playfield
    renderPlayfield();
  }
  
  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 void renderPlayfield() {
    playfield.Draw();
    output = playfield.toImage();
    frog.nextState();   //set the next frame in the animation
    ant.nextState();
    repaint();
  }

  public void paint(Graphics g) {
    g.drawImage(output, 0, 0, this);
    
  }
  
  public void update(Graphics g) {
    paint(g);
  }
  
  public boolean mouseDown(Event e, int x, int y) {
    //move the ant and mouse to x and y
    frog.setXY(x-5,y);
    frog.setTrack();
    ant.setXY(x+375, y);
    ant.setTrack();
    renderPlayfield( );
    return true;
  }
  
  
}
