//
//    CHAPTER@22
//    Class Source Name [MoverArray.java]
//    Package name      [userClass.App]
//                                    1996.3
//                 Author [ Junzo hagimoto ]

package  userClass.App;

import java.applet.*;
import java.awt.*;
import userClass.App.*;

public class  MoverArray {
    Applet       a;
    Image        img[];
    boolean      start = true;
    int          maxImage;
    int          maxMover;
    int          curIdx=0;
    int          counter=-1;
    Mover        mover[];

    public MoverArray(Applet a,String gifHedName,int maxGif,int maxMover){
        maxImage = maxGif;
        this.a = a;
        this.maxMover = maxMover;
        mover = new Mover[maxMover];
        img  =  new Image[maxImage];
        for(int i=0;i < maxImage;i++){
            img[i]  = a.getImage(a.getCodeBase(), gifHedName + ( i + 1 ) + ".gif");
        }
    }
    public final Image  getImage(int i ){ return img[i];  }
    public final int    getImageWidth(int i) { return img[i].getWidth(a); }
    public final int    getImageHeight(int i) { return img[i].getHeight(a); }
    public final int    countMover(){
        return counter+1;
    }
    public final void   createMover(){
        addMover( new Mover() );
    }
    public final boolean   cloneMover(Mover m){
          return addMover( m.copy() );
    }
    public final void     compact(){
       boolean bFound=false;
        for(int i=0; i < curIdx ;i++){             //
            if(  mover[i].isDelete() || bFound ) { //
                 if( i + 1  < curIdx ){
                      mover[i] = mover[i+1] ;
                  }
                  bFound = true;
            }
        }
        if(  bFound ){
             curIdx--;
        }
    }
    public final boolean  deleteMover(Mover m){
        if(  1  <  curIdx ){
            for(int i=0; i < curIdx ;i++){
                if( m.id == mover[i].id ){        // 
                      mover[i].delete() ;         // 
                      return true;
                }
            }
        }
        return false;
    }
    public final boolean   addMover(Mover m){
        if( maxMover != curIdx ){
              m.setOwner(this);
              mover[curIdx++] = m;
              return true;
        }
        return false;
    }
    public final Mover  nextMover(){
        ++counter;
        if( counter == curIdx ){
              counter = -1;
              compact();
              return null;
        }
        return mover[counter] ;
    }
}


              //