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

package  userClass.App;

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

public class   Mover {
    static  int counter=0;
    boolean deleted = false;
    int     id;
    int     imgSelect=0;
    int     x_Plus=1;
    int     y_Plus=1;
    MoverArray   owner;
 
    public  int     imgCount=0;
    public  int     x;
    public  int     y;
    public  int     save_x=0;
    public  int     save_y=0;
    public  int     hitTimer=0;
    
    public Mover(){
        id = counter++;
    }
                                  // 
    public void delete(){         // ADD
         deleted= true;           // ADD
    }                             // ADD
    public boolean isDelete(){    // ADD
        return deleted;           // ADD
    }                             // ADD 
    
    public final Image  getImage(int i )      { return owner.getImage(i);        }
    public final int    getImageWidth(int i)  { return  owner.getImageWidth( i); }
    public final int    getImageHeight(int i) { return owner.getImageHeight(i);  }
    
    public final void   setOwner(MoverArray mArray){
        owner = mArray;
    }

    //
    //  Moverのクローンを作成する。
    //                                         
    public Mover    copy(){                    
        Mover  m = new Mover();                
        return copy(m);                        
    }                                          
    public Mover    copy(Mover m){             
        m.x = x;                               
        m.y = y;                               
        m.x_Plus = x_Plus * -1;                
        m.y_Plus = y_Plus * -1;                
        m.imgSelect  = Math.abs(imgSelect - 3);
        return m;                              
    }                                          
    //
    //  Moverの表示。
    //
    public void   drawImage(Graphics g){
        if( hitTimer ==0 ){
           g.drawImage(owner.img[imgCount++/3 + imgSelect ],x,y,owner.a);
           if(imgCount / 3 == 3      ){                              
               imgCount = 0;                                          
           }                                                          
        }else{
           g.drawImage(owner.img[(hitTimer/2) % owner.maxImage ],save_x,save_y,owner.a);
        }
    }
    //
    //  Moverの次の表示座標を計算する。
    //
    public void   calcxy(Dimension d,int speed){
        if( x  >  d.width - getImageWidth(0) ){   
            x = d.width   - getImageWidth(0) -1;   
            x_Plus = -1 ;                               
            imgSelect = 3;                              
        }                                               
        if( x  <  0 ){                                  
            x = 0;                                      
            x_Plus = 1 ;                                
            imgSelect = 0;                              
        }                                               
        if( y >  d.height -  getImageHeight(0) ){  
             y = d.height -  getImageHeight(0)-1;  
             y_Plus = -1;                               
        }                                               
        if(  y < 0 ){                                   
             y =0;                                      
             y_Plus = 1;                                
        }                                               
        if( x_Plus==1 ){                                
            x += (int)(Math.random() * speed * x_Plus); 
            y += (int)(Math.random() * speed * y_Plus); 
        }else{                                          
            x += speed   *   x_Plus ;                   
            y += speed / 2 * y_Plus ;                   
        }                                               
    }                                                    
    
}                                                  
              //