import java.awt.*;

class Playfield extends Raster {
    Raster background;          // background image
    Sprite sprite[];    // list of sprites on this playfield
    AnimatedSprite anim[]; //list of animated sprites
    
    
    
    public Playfield(Image bgnd, int numSprites, int numAnim)
    {
        super(bgnd);
        this.background = new Raster(bgnd);
        this.sprite = new Sprite[numSprites];
        this.anim = new AnimatedSprite[numAnim];
    }

    public void addSprite(int i, Sprite s)
    {
        sprite[i] = s;
    }
    
    public void addAnimSprite(int i,AnimatedSprite s)
    {
        anim[i] = s;
    }
    
    public void nextState()
    {
        for (int i=0;i<anim.length;i++)
        {
            anim[i].nextState();
        }
    }

    public void Draw()
    {
        //reset playfield to background
        for (int i=0;i<this.getWidth();i++)
        {
            for (int j=0;j<this.getHeight();j++)
            {
                this.setPixel(background.getPixel(i,j),i,j);
            }
        }
        
        //let sprites draw themselves on the playfield
        for (int i=0;i<sprite.length;i++)
        {
            sprite[i].Draw(this);   
        }
        
        for (int i=0;i<anim.length;i++)
        {
            anim[i].Draw(this);
        }
    }
    
    public int topSprite(int x, int y)
    {
        for (int i=sprite.length-1;i>-1;i--)
        {
            if ((sprite[i].x<x)&&((sprite[i].x+sprite[i].width)>x)&&
                 (sprite[i].y<y)&&((sprite[i].y+sprite[i].height)>y))
                 {
                    if (!(sprite[i].getColor(x-sprite[i].x,y-sprite[i].y)).equals(sprite[i].transparent))
                    {
                        return i;
                    }
                 }
        }
        return -1;
    }
    
    public boolean overlap(int a, int b)
    {
        //check if sprite a overlaps with sprite b
        boolean horiz = false;
        boolean vert = false;
        if (((sprite[a].x<sprite[b].x)&&(sprite[a].width>sprite[b].x-sprite[a].x))
            ||((sprite[b].x<sprite[a].x)&&(sprite[b].width>sprite[a].x-sprite[b].x)))
            {horiz = true;}
        if (((sprite[a].y<sprite[b].y)&&(sprite[a].height>sprite[b].y-sprite[a].y))
            ||((sprite[b].y<sprite[a].y)&&(sprite[b].height>sprite[a].y-sprite[b].y)))
            {vert = true;}
        if ((horiz)&&(vert))
        {return true;}
        else
        {return false;}
                
    }
}