#include "ponorka.h"

#define MAX_UHOL 40 //neradim davat viac ako 89 a menej ako 1
//znazornuje, ze ako velmi moze ist hore/dole

double vzdial(double x1, double y1, double x2, double y2)
{
  return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}

Ponorka::Ponorka()
{
  SetMax_speed(0.5);
  max_torpedo = 1000;
  torpedo = 5;
  max_navnada = 2000;
  navnada = 10;
  SetZrychlenie(0.005);
  SetOtacanie(0.25);
  SetSx(0.0);
  SetSy(0.0);
  SetPx(150);
  SetPy(384);
  SetUhol(90);
  SetSpeed(GetZrychlenie());
  SetBitmap(screen);
  SetPrebijanie(0);
  SetReload(100);
  money = 0;
  SetObrazok(load_bitmap("gfx/submarine/sub_player_right.tga",NULL));
  max_obrat = 0;
  obrat = 0;
  obrazok2 = create_bitmap(100,25);
  rectfill(obrazok2,0,0,100,25,makecol(255,0,255));
  int j;
  for(j=0;j<4;j++)
  {
    nabijanie[j]=1000;
    prebi[j]=1000;
  }
  nabijanie[4]=150;
  prebi[4]=150;
  nabijanie[5]=10000;
  prebi[5]=10000;
  nabijanie[6]=40000;
  prebi[6]=40000;
  nabijanie[7]=40;
  prebi[7]=40;
}

Ponorka::~Ponorka()
{
  destroy_bitmap(obrazok2);
}

void Ponorka::Maxspeed()
{
  if(GetSpeed()>GetMax_speed())
  {
    SetSpeed(GetMax_speed());
  }
  if(GetSpeed() < -GetMax_speed()/2)
  {
    SetSpeed(-GetMax_speed()/2);
  }
}

void Ponorka::Ovladanie()  //Pochopitelne co najrealistickejsie
{
  int j;
  for(j=0;j<8;j++)
  {
    nabijanie[j]++;
    if(nabijanie[j] > prebi[j])
      nabijanie[j] = prebi[j];
  }

  if(keypressed() && GetPy() > 768/10 + 10 && GetPy() < 768*8/10 - 10) //Vsetky klavesy, ktore sa daju urobit bez toho, aby bola potrebna vyssia moc (BigBoss)
  {
    if(key[KEY_RIGHT])
    {         
      if(GetObrat()>=0 && GetObrat()<=90)
        SetSpeed(GetSpeed()+GetZrychlenie()); 
      else
        SetSpeed(GetSpeed()-GetZrychlenie());
    }
    if(key[KEY_LEFT])
    {
      if(GetObrat()>=0 && GetObrat()<=90)
        SetSpeed(GetSpeed()-GetZrychlenie()); 
      else
        SetSpeed(GetSpeed()+GetZrychlenie());
    }
    if(key[KEY_S])
    {
    if(GetObrat()>=0 && GetObrat()<=90)
      SetUhol(GetUhol()-GetOtacanie());
    else
      SetUhol(GetUhol()+GetOtacanie());
    }
    if(key[KEY_W])
    {
    if(GetObrat()>=0 && GetObrat()<=90)
      SetUhol(GetUhol()+GetOtacanie());
    else
      SetUhol(GetUhol()-GetOtacanie());
    }
  }
  if(GetUhol()>360)
    SetUhol(GetUhol()-360);
  if(GetUhol()<0)
    SetUhol(GetUhol()+360);
  if(GetUhol()<MAX_UHOL && GetUhol() > 0)
    SetUhol(MAX_UHOL);
  if(GetUhol()>180-MAX_UHOL && GetUhol() < 180)
    SetUhol(180-MAX_UHOL);
  if(GetUhol()<270-MAX_UHOL && GetUhol() > 180)
    SetUhol(270-MAX_UHOL);
  if(GetUhol()>360-MAX_UHOL && GetUhol() < 360)
    SetUhol(360-MAX_UHOL);
    
    //ked je prilis nizko
  if(GetPy()>768*8/10)
  {
    if(GetUhol() >= 0 && GetUhol() < 105)
      SetUhol(GetUhol() + GetOtacanie()*5);
    if(GetUhol() < 360 && GetUhol() > 255)
      SetUhol(GetUhol() - GetOtacanie()*5);
    SetSpeed(GetSpeed() - 0.02);
    if(GetSpeed()<=0.3)
      SetSpeed(0.3); 
  }             
  //vztlakova komora
  if(GetPy() > 768/10 + 10 && GetPy() < 768*8/10 - 10)
  {
  if(key[KEY_UP])
    SetHoredole(-0.1);
  if(key[KEY_DOWN])   
    SetHoredole(0.1);
  }  
  
  if(GetPy() < 768/10 + 25)
  {
    SetPy(768/10 + 25); 
  }
  
  if(!key[KEY_DOWN] && !key[KEY_UP])   
    SetHoredole(0.0);  
    
  if(key[KEY_SPACE] && GetMax_obrat() == 0)
  {
    if(GetObrat() == 0)
      SetMax_obrat(1); 
    if(GetObrat() == 180)
      SetMax_obrat(2); 
  }  
  if(GetMax_obrat()==1 || GetMax_obrat()==3)
  {
    SetObrat(GetObrat()+1);
    if(GetObrat()==90)
    {
      SetObrazok(load_bitmap("gfx/submarine/sub_player_left.tga",NULL));
      SetMax_obrat(3);    
    SetUhol(360-GetUhol());
    }
  } 
  if(GetMax_obrat()==2 || GetMax_obrat()==4)
  {
    SetObrat(GetObrat()-1);   
    if(GetObrat()==90)
    {
      SetObrazok(load_bitmap("gfx/submarine/sub_player_right.tga",NULL));
      SetMax_obrat(4);       
    SetUhol(360-GetUhol());
    }
  }
  if(GetObrat() >= 180)
  {
    SetObrat(180);
    SetMax_obrat(0);
  } 
  if(GetObrat() <= 0)
  {
    SetObrat(0);
    SetMax_obrat(0);   
  }
  
  SetVx((50*sin(GetUhol()*pi180))+ GetPx());
  SetVy((50*cos(GetUhol()*pi180))+ GetPy());
  if(GetOtacanie()<=90)
    SetVx(GetVx()- 50 - GetOtacanie()/90);
  else  
    SetVx(GetVx()+ 150 - (GetOtacanie()-180)/180*100);
  
}

void Ponorka::Nakresli()
{
  double alfa = 0.71111111*GetUhol();
  SetPy(GetPy() + GetHoredole());            
  if(GetObrat()<90 && GetObrat() > 0)
    stretch_sprite(bitmap,GetObrazok(),(int) (GetPx()-50 + 50*((GetObrat()-90)/90)) ,(int) (GetPy()-12.5), (int) (100/(90/(90-GetObrat()))), (int) (25));                  
  if(GetObrat()>90 && GetObrat() < 180)
    stretch_sprite(bitmap,GetObrazok(),(int) (GetPx()-50 - 50*((GetObrat()-90)/90)),(int) (GetPy()-12.5), (int) (100*((GetObrat()-90)/90)), (int) (25)); 
  if(GetObrat() == 0)
    rotate_sprite(bitmap,GetObrazok(),(int) (GetPx()-50 + 50*((GetObrat()-90)/90)) ,(int) (GetPy()-12.5), itofix(320 - (int) alfa));                                  
  if(GetObrat() == 180)
    rotate_sprite(bitmap,GetObrazok(),(int) (GetPx()-50 - 50*((GetObrat()-90)/90)) ,(int) (GetPy()-12.5), itofix(448 - (int) alfa));       
  
}

