import java.util.List;
import java.util.ArrayList;

List sprites = new ArrayList();

void setup() {
    frameRate(20);
    size(300,300);
 
    sprites.add( new Sprite(loadImage("tree1-03.png"), 10, 12, 1, 1));
    sprites.add( new Sprite(loadImage("tree2-03.png"), 110, 12, 1, 1));
    sprites.add( new Sprite(loadImage("tree2-03.png"), 230, 12, 1, 1));
   
    sprites.add( new Sprite(loadImage("tree1-05.png"), 0, 10, 1, 2));
    sprites.add( new Sprite(loadImage("tree2-05.png"), 100, 10, 1, 2));
    sprites.add( new Sprite(loadImage("tree2-05.png"), 240, 10, 0.8, 2));
    
    sprites.add( new Sprite( loadImage( "bunny.png" ), 120, 0, 0.6, 0 ));
    
    sprites.add( new Sprite(loadImage("flower1.png"), 50, 0, 1, 3 ));
    sprites.add( new Sprite(loadImage("flower2.png"), 90, 0, 1, 3 ));
    sprites.add( new Sprite( loadImage("grass.png"), 250, 0, 1, 3));
   
}

int t = 16;
boolean up = true;
void draw() {
    List newSpr = new ArrayList();
    
    background(255);
    for( Iterator i = sprites.iterator(); i.hasNext(); ) {
        Sprite spr = (Sprite)i.next();
        spr.draw();
        if ( spr.layer > 0 ) {
          spr.moveBy( -1 * spr.layer, 0);
        } else {
          spr.moveBy( 0, up ? t : -2 * t  );
          
          if (up) {
            t = t / 2;
            up = (t > 1);
          } else {
            t = t * 2;
            up = ( t > 16 );
          }
        }
        
      
        if ( spr.isVisible()) {
          newSpr.add( spr );
        } else {
          spr = new Sprite( spr.img, 300, spr.y, spr.s, spr.layer );
          newSpr.add( spr );
      }  
    } 
    sprites = newSpr;   
}
