/* client/input.h This file is part of the Osirion project and is distributed under the terms and conditions of the GNU General Public License version 2 */ #include "client/client.h" #include "client/input.h" #include "client/console.h" #include "client/camera.h" #include "SDL/SDL.h" namespace client { namespace input { void init() { con_print << "Initializing input..." << std::endl; //condebug << "SDL_DEFAULT_REPEAT_DELAY " << SDL_DEFAULT_REPEAT_DELAY << std::endl; SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL); //SDL_EnableKeyRepeat(10, SDL_DEFAULT_REPEAT_INTERVAL); } void shutdown() { con_print << "Shutting down input..." << std::endl; } /* see http://docs.mandragor.org/files/Common_libs_documentation/SDL/SDL_Documentation_project_en/sdlevent.html */ // handle key_release events for the game world void handle_keyreleased(SDL_keysym* keysym) { switch( keysym->sym ) { case SDLK_SPACE: camera::nextmode(); break; default: break; } } // handle pressed keys for the game world void handle_keypressed(SDL_keysym* keysym) { switch( keysym->sym ) { case SDLK_LEFT: camera::rotate_left(); break; case SDLK_RIGHT: camera::rotate_right(); break; case SDLK_UP: camera::rotate_up(); break; case SDLK_DOWN: camera::rotate_down(); break; case SDLK_KP_PLUS: // TODO set core entity params game.ship.set_thrust(game.ship.thrust() + 0.08f); break; case SDLK_KP_MINUS: // TODO set core entity params game.ship.set_thrust(game.ship.thrust() - 0.1f); break; case SDLK_KP4: // TODO set core entity params game.ship.set_yaw(game.ship.yaw() + 10); break; case SDLK_KP6: // TODO set core entity params game.ship.set_yaw(game.ship.yaw() - 10); break; default: break; } } void frame(float seconds) { SDL_Event event; while( SDL_PollEvent( &event ) ) { switch( event.type ) { case SDL_KEYDOWN: /* if (event.key.keysym.sym == SDLK_ESCAPE) { client::application.shutdown(); } */ if (console::visible()) { // send key events to the console console::handle_keypressed( &event.key.keysym ); } else if (core::connected()) { // send key events to the game world handle_keypressed( &event.key.keysym ); } break; case SDL_KEYUP: if (event.key.keysym.sym == '`' || event.key.keysym.sym == '~') { console::toggle(); } else if (!console::visible() && core::connected()) { // send key events to the game world handle_keyreleased( &event.key.keysym ); } break; case SDL_QUIT: core::application()->shutdown(); break; } } } } // namespace input } // namespace client