void keyboard(unsigned char key, int, int) { // float radv = (jet.ver + 15) * 3.1416 / 180; Vector3d axis; axis = jet.up.cross(jet.forward); float angle = PI/16; switch(key) { case 'w': rotateAxisVec(angle, axis, jet.forward); rotateAxisVec(angle, axis, jet.up); break; case 's': rotateAxisVec(-angle, axis, jet.forward); rotateAxisVec(-angle, axis, jet.up); break; case 'a': rotateUpZ(-angle, jet.forward, jet.up); break; case 'd': rotateUpZ(angle, jet.forward, jet.up); break; // case 'w': // jet.ver = (int)( jet.ver - 10) % 360; // break; // case 'a': // jet.hor = (int)( jet.hor + ((int) 10 * cos(radv)/abs(cos(radv)))) % 360; // break; // case 's': // jet.ver = (int)( jet.ver + 10) % 360; // break; // case 'd': // jet.hor = (int)( jet.hor - (10 * cos(radv)/abs(cos(radv)))) % 360; // break; case 'q': jet.jetBoost(); break; case 'e': jet.jetBrake(); break; } jet.up.normalize(); jet.forward.normalize(); axis = jet.up.cross(jet.forward); // debugLog(jet.forward, jet.up, axis); }
void EventLoop(int) { SDL_Event sdlEvent; while( SDL_PollEvent( &sdlEvent ) ) { switch( sdlEvent.type ) { case SDL_CONTROLLERDEVICEADDED: cout << "AddController( sdlEvent.cdevice );" << endl; break; case SDL_CONTROLLERDEVICEREMOVED: cout << "RemoveController( sdlEvent.cdevice );" << endl; break; case SDL_CONTROLLERBUTTONDOWN: case SDL_CONTROLLERBUTTONUP: cout << "OnControllerButton( sdlEvent.cbutton );" << endl; break; case SDL_CONTROLLERAXISMOTION: cout << "OnControllerAxis( sdlEvent.caxis );" << endl; break; case SDL_JOYAXISMOTION: // if(abs(sdlEvent.jaxis.value) > JOYSTICK_DEAD_ZONE){ // printf("Joystick %d axis %d value: %d\n", // sdlEvent.jaxis.which, // sdlEvent.jaxis.axis, sdlEvent.jaxis.value); // } //Motion on controller 0 if( sdlEvent.jaxis.which == 0 ) { //Z axis motion if( sdlEvent.jaxis.axis == 0) { //Below of dead zone if( sdlEvent.jaxis.value < -JOYSTICK_DEAD_ZONE ) { jet.rollMod = -1; } //Above of dead zone else if( sdlEvent.jaxis.value > JOYSTICK_DEAD_ZONE ) { jet.rollMod = 1; } else { jet.rollMod = 0; } } //Y axis motion else if( sdlEvent.jaxis.axis == 1 ) { //Left of dead zone if( sdlEvent.jaxis.value < -JOYSTICK_DEAD_ZONE ) { jet.pitchMod = 1; } //Right of dead zone else if( sdlEvent.jaxis.value > JOYSTICK_DEAD_ZONE ) { jet.pitchMod = -1; } else { jet.pitchMod = 0; } //Yaw camera motion } else if( sdlEvent.jaxis.axis == 2) { //Below of dead zone if( sdlEvent.jaxis.value < -JOYSTICK_DEAD_ZONE ) { camera.yawMod = (PI / 2.3) * (sdlEvent.jaxis.value + JOYSTICK_DEAD_ZONE) / (JOYSTICK_MAX_VALUE - JOYSTICK_DEAD_ZONE); } //Above of dead zone else if( sdlEvent.jaxis.value > JOYSTICK_DEAD_ZONE ) { camera.yawMod = (PI / 2.3) * (sdlEvent.jaxis.value - JOYSTICK_DEAD_ZONE) / (JOYSTICK_MAX_VALUE - JOYSTICK_DEAD_ZONE); } else { camera.yawMod = 0; } } //Y axis motion else if( sdlEvent.jaxis.axis == 3 ) { //Left of dead zone if( sdlEvent.jaxis.value < -JOYSTICK_DEAD_ZONE ) { camera.pitchMod = (PI / 2.3) * (sdlEvent.jaxis.value + JOYSTICK_DEAD_ZONE) / (JOYSTICK_MAX_VALUE - JOYSTICK_DEAD_ZONE); } //Right of dead zone else if( sdlEvent.jaxis.value > JOYSTICK_DEAD_ZONE ) { camera.pitchMod = (PI / 2.3) * (sdlEvent.jaxis.value - JOYSTICK_DEAD_ZONE) / (JOYSTICK_MAX_VALUE - JOYSTICK_DEAD_ZONE); } else { camera.pitchMod = 0; } } else if( sdlEvent.jaxis.axis == 4 ) { //Full Trigger if( sdlEvent.jaxis.value == JOYSTICK_MAX_VALUE ) { shooting = true; shoot(0); } else { shooting = false; } }else { if(abs(sdlEvent.jaxis.value) > JOYSTICK_DEAD_ZONE){ printf("Joystick %d axis %d value: %d\n", sdlEvent.jaxis.which, sdlEvent.jaxis.axis, sdlEvent.jaxis.value); } } } break; case SDL_JOYHATMOTION: printf("Joystick %d hat %d value:", sdlEvent.jhat.which, sdlEvent.jhat.hat); if (sdlEvent.jhat.value == SDL_HAT_CENTERED) printf(" centered"); if (sdlEvent.jhat.value & SDL_HAT_UP) printf(" up"); if (sdlEvent.jhat.value & SDL_HAT_RIGHT) printf(" right"); if (sdlEvent.jhat.value & SDL_HAT_DOWN) printf(" down"); if (sdlEvent.jhat.value & SDL_HAT_LEFT) printf(" left"); printf("\n"); break; case SDL_JOYBALLMOTION: printf("Joystick %d ball %d delta: (%d,%d)\n", sdlEvent.jball.which, sdlEvent.jball.ball, sdlEvent.jball.xrel, sdlEvent.jball.yrel); break; case SDL_JOYBUTTONDOWN: // printf("Joystick %d button %d down\n", // sdlEvent.jbutton.which, sdlEvent.jbutton.button); if( sdlEvent.jaxis.which == 0 ){ switch(sdlEvent.jbutton.button){ case 0: jet.jetBoost(); break; case 1: jet.jetBrake(); break; case 3: camera.first = !camera.first; break; default: printf("Joystick %d button %d down\n", sdlEvent.jbutton.which, sdlEvent.jbutton.button); break; } } else{ printf("Joystick %d button %d down\n", sdlEvent.jbutton.which, sdlEvent.jbutton.button); } break; // case SDL_JOYBUTTONUP: // printf("Joystick %d button %d up\n", // sdlEvent.jbutton.which, sdlEvent.jbutton.button); // break; case SDL_KEYDOWN: if ((sdlEvent.key.keysym.sym != SDLK_ESCAPE) && (sdlEvent.key.keysym.sym != SDLK_AC_BACK)) { break; } /* Fall through to signal quit */ // YOUR OTHER EVENT HANDLING HERE } } glutTimerFunc(10, EventLoop, 0); }