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); } } }
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(); } }