import java.awt.*;
import java.awt.image.*;
//
//
// AnimatedSprite
//
//
class AnimatedSprite extends Sprite {
             //int frames;         // frames in sprite
				// there are other private variables
         
			 //int pixels[];
			 int currentFrame;
			 int ticks;
			 //Image images[];
			 Sprite sprites[];
			 Point pos;

             

			 public AnimatedSprite(Image multiimage, int dx, int frames, int width, int height){
				 sprites = new Sprite[frames];
				 for(int i = 0;i<frames;i++){

					 try{ 
					//PixelGrabber pg = new PixelGrabber(multiimage,i*dx,0,width,height,true);
					PixelGrabber pg = new PixelGrabber(multiimage,0,0,-1,-1,true);
					
					//System.out.println("iter width:" + Integer.toString(width));
					if (pg.grabPixels()) {
						int spixels[] = (int[])pg.getPixels();

					
						//Thread.sleep(1000);
					
						//printPixels(spixels);
					//int width = pg.getWidth();
					//int height = pg.getHeight();

					Sprite s = new Sprite(spixels, (DirectColorModel)pg.getColorModel(), width, height);
					sprites[i] = s;
					currentFrame = 0;
					}

					}catch(Exception e){
						System.out.println(e);
					}


					
				 }
				 System.out.println("Created Animated Sprite");
			 }

			 void printPixels(int pixels[]){
				 for (int i=0; i<pixels.length;i++){
					 System.out.println(Integer.toString(pixels[i]));


				 }
			 }

			 void setTrans(boolean b){
				 for(int i = 0;i<sprites.length;i++){
					 sprites[i].setTrans(b);
				 }
			 }


			 void setAlpha(double d){
				 for(int i = 0;i<sprites.length;i++){
					 sprites[i].setAlpha(d);
				 }
			 }


			 void setPos(Point p){
				 pos = p;

				 for(int i = 0;i<sprites.length;i++){
					 sprites[i].setPos(p.x,p.y);
				 }
			 }

			 Point getPos(){
				 return pos;
			 }
				 
					
			 

			 
             
			 //public void addState(int track, int frame, int ticks, int dx, int dy);
             public void draw(Raster bgnd){
				 //sets parent's pixels
				 //pixel = pixels[currentFrame];
				 //calls Sprite.Draw
				 
				 sprites[currentFrame].draw(bgnd); 
				 //super.draw(bgnd);
				 //nextFrame();
			 }
             
			 public void nextFrame(){
				 if(currentFrame >= sprites.length) currentFrame=0;
				 else currentFrame++;
			 }

			 boolean insideSprite(int xi, int yi){
				 Sprite si = sprites[currentFrame];
				 Rectangle rect = new Rectangle(si.x,si.y,si.width,si.height);
				 //System.out.println(rect);
				 return rect.inside(xi,yi);

			 }

			 boolean overlapsNonTransparentPixel(int x, int y){
				 return sprites[currentFrame].overlapsNonTransparentPixel(x,y);
			 }
             
			 //public void setTrack();
}
