- while (SDL_PollEvent(&event))
- {
- if (Menu::current())
- {
- Menu::current()->event(event);
- }
- else
- {
- switch(event.type)
- {
- case SDL_QUIT:
- Termination::abort("Received window close", "");
- break;
-
- case SDL_KEYDOWN:
- key = event.key.keysym.sym;
-
- if(key == SDLK_ESCAPE)
- on_escape_press();
- else if(key == SDLK_RETURN || key == keymap.power)
- enter_level = true;
- else if(key == SDLK_LEFT || key == keymap.power)
- tux->set_direction(D_WEST);
- else if(key == SDLK_RIGHT || key == keymap.right)
- tux->set_direction(D_EAST);
- else if(key == SDLK_UP || key == keymap.up ||
- key == keymap.jump)
- // there might be ppl that use jump as up key
- tux->set_direction(D_NORTH);
- else if(key == SDLK_DOWN || key == keymap.down)
- tux->set_direction(D_SOUTH);
- break;
-
- case SDL_JOYHATMOTION:
- if(event.jhat.value & SDL_HAT_UP) {
- tux->set_direction(D_NORTH);
- } else if(event.jhat.value & SDL_HAT_DOWN) {
- tux->set_direction(D_SOUTH);
- } else if(event.jhat.value & SDL_HAT_LEFT) {
- tux->set_direction(D_WEST);
- } else if(event.jhat.value & SDL_HAT_RIGHT) {
- tux->set_direction(D_EAST);
- }
- break;
-
- case SDL_JOYAXISMOTION:
- if (event.jaxis.axis == joystick_keymap.x_axis)
- {
- if (event.jaxis.value < -joystick_keymap.dead_zone)
- tux->set_direction(D_WEST);
- else if (event.jaxis.value > joystick_keymap.dead_zone)
- tux->set_direction(D_EAST);
- }
- else if (event.jaxis.axis == joystick_keymap.y_axis)
- {
- if (event.jaxis.value > joystick_keymap.dead_zone)
- tux->set_direction(D_SOUTH);
- else if (event.jaxis.value < -joystick_keymap.dead_zone)
- tux->set_direction(D_NORTH);
- }
- break;
-
- case SDL_JOYBUTTONDOWN:
- if (event.jbutton.button == joystick_keymap.b_button)
- enter_level = true;
- else if (event.jbutton.button == joystick_keymap.start_button)
- on_escape_press();
- break;
-
- default:
- break;
- }
- }
- }