
package com.osnova;


import android.content.Context;
import android.graphics.*;


/**
 * 14.02.23 p.i
 * @author BIVERUS
 * NEW SPRITE
 */
public class Sprite {
  
private int x,y,w,h,f=0;   
 Bitmap[] bi;   
 Bitmap b;   
  
private int st=1,is=0,p1,p2,bom;
int ox,oy,ow,oh; 
public int skFrame=2/*5*/,skAnime=5/*10*/,vk=1,box=0;
  
 
 // 26.10.22 новое
 Bitmap[] ai;
public boolean max=false;
public int ul=20;
public int a=0;
  
  
public Sprite(Bitmap b,int w,int h ,int a){
   
   
 this.b=b;
 this.w=w;
 this.h=h;
 this.a=a;
  
 int in=0;
 max=true;
 
  
 ai=new Bitmap[FW()*FH()];
 bi=new Bitmap[FW()*FH()];
 
  
 for(int j=0;j<FH();j++){
 for(int i=0;i<FW();i++){
 
 
 
  bi[in++]=Bitmap.createBitmap(b,i*w,j*h,w,h);

 
 }}
 
  Ai();
  
  
 }
  
 
 
 public void Ai(){
  
  int im=0;
  
 for(int j=0;j<FH()*FW();j++){

 
 
 
  ai[j]=Bitmap.createScaledBitmap(bi[im++],w+ul-a,h+ul,true);
  
 
 }
  
  
 }
 // 16_10_23 - регулирование размера
 public void Ul(int ul){
  this.ul=ul;
  Ai();
 }
 
 
 public Sprite(Bitmap b,int w,int h){
 this.b=b;
 this.w=w;
 this.h=h;
 
 int in=0;
 ul=0;
 
   
 
 bi=new Bitmap[FW()*FH()];
 
  
 for(int j=0;j<FH();j++){
 for(int i=0;i<FW();i++){
 
 
 
  bi[in++]=Bitmap.createBitmap(b,i*w,j*h,w,h);

 
 }}
 
 
 
}   
    
 
 public Sprite(){}
 
 
 public Sprite(Sprite s){
 
  this.b=s.b;
  this.w=s.w;
  this.h=s.h;
   
  int in=0;
  bi=new Bitmap[FW()*FH()];
  
  
  
  for(int j=0;j<FH();j++){
 for(int i=0;i<FW();i++){
 
 
 
  bi[in++]=Bitmap.createBitmap(b,i*w,j*h,w,h);

 
 }}
  
  
  
 
 }
 
 
public Sprite(Bitmap b){
this.b=b;
bi=new Bitmap[1];


w=b.getWidth();
h=b.getHeight();

bi[0]=Bitmap.createBitmap(b,0, 0, w,h );

  
 }



public void setImage(Bitmap b,int w,int h){

 this.b=b;
 this.w=w;
 this.h=h;

 int ii=0;
 


 for(int j=0;j<FH();j++){
 for(int i=0;i<FW();i++){
 
 
 
  bi[ii++]=Bitmap.createBitmap(b,i*w,j*h,w,h);
 
 
 }}

  
 if(max){Ai();}
  

}

 
 public void setFrame(int f){
     
   this.f=f;   
 }    
   

 // Анимация для карты 2 режима
public void setAnime(int k1,int k2,int k3){
    if(vk==1){
    if(bom<skAnime){f=k1;}
    
     bom++;
    
   if(bom>skAnime){f=k2;}
   if(bom>skAnime*2){f=k3;}
   if(bom>skAnime*3){bom=0;}}
  
    if(vk==2){
    
    
     if(box==1){bom++;}
    
   if(bom>skAnime){f=k1;}
   if(bom>skAnime*2){f=k2;}
   if(bom>skAnime*3){f=k3;}
       if(bom>skAnime*4){box=0;bom=0;}}
    
    
 } 



 
 
 public void nextFrame(int nk){
 
 // ДОБАВИЛ ЭТОТ МЕТОД 05.01.22 изменил 6 января 2022
 if(is==0){f=nk;is=1;}
 p1++;
 if(p1>skFrame){f++;p1=0;}
 if(f>=bi.length){f=nk;}
 
 
 
 
 
 }
 
 
 
 
 public void nextFrame(int nk,int pk){
 
 if(is==0){f=nk;is=1;}
 
 if(st==1){p1++;}
 if(st==2){p2++;}
 
 if(p1>skFrame){f++;p1=0;}
 if(f>pk){f=pk;st=2;}
 
 if(p2>skFrame){f--;p2=0;}
 if(f<nk){f=nk;st=1;}
 
 
 }
 
 
 //добавил 26 октября 2022
 // работает некорректно 
 /*int ps=0,p3;
 public void nextFrames(int nk,int pk){
 
 if(ps==0){f=nk;ps=1;}
 p1++;
 if(p1>skFrame){f++;p1=0;}
 if(f>pk){f=nk;}
 
 }
 * выкл 28.11.22
 */
 
 
  
 
 // ДЛЯ СТРЕЛЬБЫ
 public void next2Frame(int kadr1,int kadr2){
 p1++;
 if(p1>skFrame){f=kadr1;}
 
 if(p1>skFrame+skFrame){f=kadr2;p1=0;}
 }
 

 
 
 public void paint(Canvas g){
 
 if(max)
 {g.drawBitmap(ai[f], x, y, null);}
 
 if(!max)
 {g.drawBitmap(bi[f], x, y, null);}
 
 
 }
   





 
   
 final int FW(){
 
 return b.getWidth()/w;
 }
 
 final int FH(){
 
 return b.getHeight()/h;
 }
 
 public int X(){
 
 return x;
 }
 
 public int Y(){
 
 return y;
 }
 
 public int F(){
 
 return f;
 }
 
 public int W(){
 
 return w;
 }
 
 public int H(){
 
 return h;
 }
 
 public int getFrame(){
 
 return bi.length;
 }
 
 // 26.10.22
 public int W(int ul){
  
 return w+ul-a;
 }
 
 public int H(int ul){
 
 return h+ul; 
 }
 
 
 public void setPosition(int x,int y){
 this.x=x;
 this.y=y;
 
 }
 
 
 
 public void RegCollides(int x,int y,int w,int h){
ox=x;
oy=y;
ow=w;
oh=h;

}




public boolean collides(Sprite sb){

     
return
  X()+W(ul)>=sb.X()+ow & 
  X()<=sb.X()+sb.W(sb.ul)-ox & 
  Y()+H(ul)>=sb.Y()+oh & 
  Y()<=sb.Y()+sb.H(sb.ul)-oy;

 
}
 
 // new 22.02.22
public boolean collides(Sprite sb,int ox,int oy,int ow,int oh){

    
return 
  X()+W(ul)>=sb.X()+ow &
  X()<=sb.X()+sb.W(sb.ul)-ox &
  Y()+H(ul)>=sb.Y()+oh & 
  Y()<=sb.Y()+sb.H(sb.ul)-oy;
   
  // Оригинал
 // X()+w>=sb.X()+ow & X()<=sb.X()+sb.w-ox & Y()+h>=sb.Y()+oh &  Y()<=sb.Y()+sb.h-oy;


}





public boolean radar(int x,int y,int Ex,int Ey,int ra){

 
  return x+ra>=Ex & x<=Ex+ra & y+ra>=Ey & y<=Ey+ra;

} 
 
 

public boolean rect(int x,int y,int Ex,int Ey,int ra,int rb){

 // НАЧАЛО КООРДИНАТ В ПРАВОМ НИЖНЕМ УГЛУ _11.07.21
 // Original return x+w>=Ex & x<=Ex+ra & y+h>=Ey & y<=Ey+rb;
return x+w>=Ex & x<=Ex+ra & y+h>=Ey & y<=Ey+rb;
}

// 25.11.23
// Исправил на H(ul) вместо 30
 // теперь работает точно
public boolean Prm(Sprite c){

return Y()<c.Y()+H(ul);
}

public boolean Prb(Sprite c){

return Y()>c.Y()+H(ul);
}



    
}
