/** * keylift is registered as a GLUT callback for when a user * releases a depressed key. * * @param key The key that was lifted. * @param x The x coordinate of the mouse at the time the key was released. * @param y The y coordinate of the mouse at the time the key was released. */ void keylift( unsigned char key, int x, int y ) { Cameras *camList = Engine::instance()->cams(); if ( camList->numCameras() < 1 ) return; Camera &cam = *(camList->active()); switch ( key ) { case 'w': cam.stop( Camera::DIR_FORWARD ); break; case 's': cam.stop( Camera::DIR_BACKWARD ); break; case 'a': cam.stop( Camera::DIR_LEFT ); break; case 'd': cam.stop( Camera::DIR_RIGHT ); break; case 'q': cam.stop( Camera::DIR_UP ); break; case 'e': cam.stop( Camera::DIR_DOWN ); break; } }
/** * keyboard is a callback registered with GLUT. * It handles (surprise!) keyboard input. * * @param key The key pressed by the user. * @param x The x coordinate of the mouse when the key was pressed. * @param y The y coordinate of the mouse when the key was pressed. */ void keyboard( unsigned char key, int x, int y ) { Scene *theScene = Engine::instance()->rootScene(); Cameras *camList = Engine::instance()->cams(); #ifdef WII // Hacky, for the wii reset, below. Camera *camptr = dynamic_cast< Camera* >( (*_camList)["AutoCamera2"] ); #endif switch ( key ) { case 033: // Escape Key /* cleanup(); Disabled for now; not crucial. Intend to fix later when I profile a bit more with valgrind. */ glutLeaveMainLoop(); break; case ';': // Print Info fprintf( stderr, "Active Object: %s\n", theScene->active()->Name().c_str() ); break; case '~': #ifdef WII CalibrateGyro( Wii ); if (camptr) camptr->resetRotation(); #endif break; case '+': std::stringstream camName; camName << "AutoCamera" << camList->numCameras() + 1; camList->addCamera( camName.str() ); break; } if ( camList->numCameras() < 1 ) return; /* A shorthand variable with local scope that refers to "The active Camera." */ Camera &cam = *(camList->active()); switch ( key ) { case '-': camList->popCamera(); break; case ';': fprintf( stderr, "Camera Position: (%f,%f,%f)\n", cam.x(), cam.y(), cam.z() ); break; case 'w': cam.move( Camera::DIR_FORWARD ); break; case 's': cam.move( Camera::DIR_BACKWARD ); break; case 'a': cam.move( Camera::DIR_LEFT ); break; case 'd': cam.move( Camera::DIR_RIGHT ); break; case 'q': cam.move( Camera::DIR_UP ); break; case 'e': cam.move( Camera::DIR_DOWN ); break; //Perspectives case 'z': cam.changePerspective( Camera::PERSPECTIVE ); break; case 'x': cam.changePerspective( Camera::ORTHO ); break; case 'c': cam.changePerspective( Camera::ORTHO2D ); break; case 'v': cam.changePerspective( Camera::FRUSTUM ); break; case 'b': cam.changePerspective( Camera::IDENTITY ); break; } }