Esempio n. 1
0
// Idle callback
// Para controlar el tiempo
void Idle_cb() {
  static unsigned int lt=0;
  int dt = glutGet(GLUT_ELAPSED_TIME) - lt;
  if(dt > 60) {
    
    // Convierte AvionAng de grados a radianes
    double ang=AvionAng*PI/180.0;
    
    if ( teclado.Salir() ) {
      exit( EXIT_SUCCESS );
    }
    if ( teclado.Adelante() ) {
      AvionX-=5*sin(ang);
      AvionY+=5*cos(ang);
    }
    if ( teclado.Atras() ) {
      AvionX+=5*sin(ang);
      AvionY-=5*cos(ang);
    }
    if ( teclado.Izquierda() ) {
      AvionAng+=2;
    }
    if ( teclado.Derecha() ) {
      AvionAng-=2;
    }
    
    lt = glutGet(GLUT_ELAPSED_TIME);
    glutPostRedisplay();
  }
}
Esempio n. 2
0
void Avion::Mover(int dt,Teclado& teclado)
{
	if(isDead)
	{
		//Mostrar explosion
	}
	else
	{
	  fx[0]->Actualizar();
	  fx[2]->Actualizar();

	  if(isFired)
	  {
		MetrallaX += velMetralla_x;
		MetrallaY += velMetralla_y;
		
		incxMetralla += velMetralla_x;
		incyMetralla += velMetralla_y;

		if(abs(incyMetralla) > 1000 || abs(incxMetralla) > 1000)
		{
			isFired = false;
			MetrallaX = 0;
			MetrallaY = 0;
			incyMetralla = 0;
			incxMetralla = 0;
		}

		double ang1=(AngMetralla)*PI/180.0;
		
		fx[1]->SetPosicion(MetrallaX+20*cosf(ang1)+sinf(ang1),MetrallaY+20*sinf(ang1)-cosf(ang1));
		fx[1]->Actualizar();
		
		fx[1]->SetPosicion(MetrallaX-12*cosf(ang1)+sinf(ang1),MetrallaY-12*sinf(ang1)-cosf(ang1));		
		fx[1]->Actualizar();

		if(!fx[1]->GetActivo()) 
		{
			fx[1]->ToggleActivo();
		}

	  }
	  else
	  {
		  fx[1]->Actualizar();
	  }

	  lightY++;
	  if(lightY > 20.0)
		  lightY = 0.0;

	  //Convierte AvionAng de grados a radianes
	  double ang=AvionAng*PI/180.0;

	  if(teclado.Adelante())
	  {
		 isReady =  true;
	  }

	  if(isReady)	  
	  {
		  // double sin(double ang); // Calcula el seno de ang medido en radianes
		  if(teclado.Atras()) //Turbo
		  {
			  AvionX-=12*sin(ang);
			  AvionY+=12*cos(ang);
			  lightY +=5;
			  isTurbo = true;
		  }
		  else
		  {
			  AvionX-=3*sin(ang);
			  AvionY+=3*cos(ang);
			  isTurbo = false;
		  }
	  }

	  /*if(teclado.Atras())
	  {
		AvionX+=5*sin(ang);
		AvionY-=5*cos(ang);
	  }*/

	  if(teclado.IzquierdaAux())
	  {
		AvionAng+=2;
	  }

	  if(teclado.DerechaAux())
	  {
		AvionAng-=2;		
	  }

	  if(!isFired && teclado.Disparar())
	  {
		  if(fx[1]->GetActivo()) 
		  {
			fx[1]->ToggleActivo();
		  }

		  isFired = true;		
		  AngMetralla = AvionAng;

		  double ang3=(AngMetralla)*PI/180.0;
		  ang3 += PI/2;

		  MetrallaX = AvionX+cos(ang3)*20;
		  MetrallaY = AvionY+sin(ang3)*20;
		  		 
		  velMetralla_x = 18*cos(ang3);
		  velMetralla_y = 18*sin(ang3);
		 
	  }

	  if(isTurbo)
	  { 
		if(!fx[0]->GetActivo()) 
		{
			fx[0]->ToggleActivo();
		}		
	  }
	  else
	  {
		if(fx[0]->GetActivo()) 
		{
			fx[0]->ToggleActivo();
		}
	  }
	  if(fx[0]->GetActivo())
	  {
		fx[0]->SetPosicion(AvionX,AvionY);				 
	  }

	  if(fx[2]->GetActivo())
	  {
		fx[2]->SetPosicion(AvionX,AvionY);				 
	  }
	}
}
Esempio n. 3
0
void Idle_cb() 
{
  
  static unsigned int lt=0;  	
  
  int dt = glutGet(GLUT_ELAPSED_TIME) - lt;
  
  if(dt > 60) 
  {

	  if(isFired)
	  {
		incyMetralla+=8;
		if(incyMetralla < 0 || incyMetralla > h)
			isFired = false;
	  }

	  lightY++;
	  if(lightY > 20.0)
		  lightY = 0.0;

	// Convierte AvionAng de grados a radianes
	  double ang=AvionAng*PI/180.0;
	  
	  if(teclado.Salir())
	  {
		  exit(EXIT_SUCCESS);
	  }
	  
	  if(teclado.Adelante())
	  {
		// double sin(double ang); // Calcula el seno de ang medido en radianes
		AvionX-=5*sin(ang);
		AvionY+=5*cos(ang);		
	  }

	  if(teclado.Atras())
	  {
		AvionX+=5*sin(ang);
		AvionY-=5*cos(ang);
	  }

	  if(teclado.IzquierdaAux())
	  {
		AvionAng+=2;
	  }

	  if(teclado.DerechaAux())
	  {
		AvionAng-=2;		
	  }

	  if(!isFired && teclado.Disparar())
	  {
		  isFired = true;		
		  MetrallaX = AvionX;
		  MetrallaY = AvionY;
		  incxMetralla = -sin(AvionAng);
		  incyMetralla = cos(AvionAng);			  
		  AngMetralla = AvionAng;
	  }

	  lt = glutGet(GLUT_ELAPSED_TIME);	
	  glutPostRedisplay();
  }
}