void SDLStub::processEvents() { SDL_Event ev; while(SDL_PollEvent(&ev)) { switch (ev.type) { case SDL_QUIT: _pi.quit = true; break; case SDL_KEYUP: switch(ev.key.keysym.sym) { case SDLK_LEFT: _pi.dirMask &= ~PlayerInput::DIR_LEFT; break; case SDLK_RIGHT: _pi.dirMask &= ~PlayerInput::DIR_RIGHT; break; case SDLK_UP: _pi.dirMask &= ~PlayerInput::DIR_UP; break; case SDLK_DOWN: _pi.dirMask &= ~PlayerInput::DIR_DOWN; break; case SDLK_SPACE: case SDLK_RETURN: _pi.button = false; break; default: break; } break; case SDL_KEYDOWN: if (ev.key.keysym.mod & KMOD_ALT) { if (ev.key.keysym.sym == SDLK_RETURN) { switchGfxMode(!_fullscreen, _scaler); } else if (ev.key.keysym.sym == SDLK_KP_PLUS) { uint8 s = _scaler + 1; if (s < ARRAYSIZE(_scalers)) { switchGfxMode(_fullscreen, s); } } else if (ev.key.keysym.sym == SDLK_KP_MINUS) { int8 s = _scaler - 1; if (_scaler > 0) { switchGfxMode(_fullscreen, s); } } else if (ev.key.keysym.sym == SDLK_x) { _pi.quit = true; } break; } else if (ev.key.keysym.mod & KMOD_CTRL) { if (ev.key.keysym.sym == SDLK_s) { _pi.save = true; } else if (ev.key.keysym.sym == SDLK_l) { _pi.load = true; } else if (ev.key.keysym.sym == SDLK_f) { _pi.fastMode = true; } else if (ev.key.keysym.sym == SDLK_KP_PLUS) { _pi.stateSlot = 1; } else if (ev.key.keysym.sym == SDLK_KP_MINUS) { _pi.stateSlot = -1; } break; } _pi.lastChar = ev.key.keysym.sym; switch(ev.key.keysym.sym) { case SDLK_LEFT: _pi.dirMask |= PlayerInput::DIR_LEFT; break; case SDLK_RIGHT: _pi.dirMask |= PlayerInput::DIR_RIGHT; break; case SDLK_UP: _pi.dirMask |= PlayerInput::DIR_UP; break; case SDLK_DOWN: _pi.dirMask |= PlayerInput::DIR_DOWN; break; case SDLK_SPACE: case SDLK_RETURN: _pi.button = true; break; case SDLK_c: _pi.code = true; break; case SDLK_p: _pi.pause = true; break; default: break; } break; default: break; } } }
void SystemStub_SDL::processEvents() { SDL_Event ev; while (SDL_PollEvent(&ev)) { switch (ev.type) { case SDL_QUIT: _pi.quit = true; break; case SDL_JOYHATMOTION: _pi.dirMask = 0; if (ev.jhat.value & SDL_HAT_UP) { _pi.dirMask |= PlayerInput::DIR_UP; } if (ev.jhat.value & SDL_HAT_DOWN) { _pi.dirMask |= PlayerInput::DIR_DOWN; } if (ev.jhat.value & SDL_HAT_LEFT) { _pi.dirMask |= PlayerInput::DIR_LEFT; } if (ev.jhat.value & SDL_HAT_RIGHT) { _pi.dirMask |= PlayerInput::DIR_RIGHT; } break; case SDL_JOYAXISMOTION: switch (ev.jaxis.axis) { case 0: if (ev.jaxis.value > JOYSTICK_COMMIT_VALUE) { _pi.dirMask |= PlayerInput::DIR_RIGHT; if (_pi.dirMask & PlayerInput::DIR_LEFT) { _pi.dirMask &= ~PlayerInput::DIR_LEFT; } } else if (ev.jaxis.value < -JOYSTICK_COMMIT_VALUE) { _pi.dirMask |= PlayerInput::DIR_LEFT; if (_pi.dirMask & PlayerInput::DIR_RIGHT) { _pi.dirMask &= ~PlayerInput::DIR_RIGHT; } } else { _pi.dirMask &= ~(PlayerInput::DIR_RIGHT | PlayerInput::DIR_LEFT); } break; case 1: if (ev.jaxis.value > JOYSTICK_COMMIT_VALUE) { _pi.dirMask |= PlayerInput::DIR_DOWN; if (_pi.dirMask & PlayerInput::DIR_UP) { _pi.dirMask &= ~PlayerInput::DIR_UP; } } else if (ev.jaxis.value < -JOYSTICK_COMMIT_VALUE) { _pi.dirMask |= PlayerInput::DIR_UP; if (_pi.dirMask & PlayerInput::DIR_DOWN) { _pi.dirMask &= ~PlayerInput::DIR_DOWN; } } else { _pi.dirMask = 0; } break; } break; case SDL_JOYBUTTONDOWN: switch (ev.jbutton.button) { case 0: _pi.space = true; break; case 1: _pi.shift = true; break; case 2: _pi.enter = true; break; case 3: _pi.backspace = true; break; } break; case SDL_JOYBUTTONUP: switch (ev.jbutton.button) { case 0: _pi.space = false; break; case 1: _pi.shift = false; break; case 2: _pi.enter = false; break; case 3: _pi.backspace = false; break; } break; case SDL_KEYUP: switch (ev.key.keysym.sym) { case SDLK_LEFT: _pi.dirMask &= ~PlayerInput::DIR_LEFT; break; case SDLK_RIGHT: _pi.dirMask &= ~PlayerInput::DIR_RIGHT; break; case SDLK_UP: _pi.dirMask &= ~PlayerInput::DIR_UP; break; case SDLK_DOWN: _pi.dirMask &= ~PlayerInput::DIR_DOWN; break; case SDLK_SPACE: _pi.space = false; break; case SDLK_RSHIFT: case SDLK_LSHIFT: _pi.shift = false; break; case SDLK_RETURN: _pi.enter = false; break; case SDLK_ESCAPE: _pi.escape = false; break; default: break; } break; case SDL_KEYDOWN: if (ev.key.keysym.mod & KMOD_ALT) { if (ev.key.keysym.sym == SDLK_RETURN) { switchGfxMode(!_fullscreen, _scaler); } else if (ev.key.keysym.sym == SDLK_KP_PLUS) { uint8 s = _scaler + 1; if (s < NUM_SCALERS) { switchGfxMode(_fullscreen, s); } } else if (ev.key.keysym.sym == SDLK_KP_MINUS) { int8 s = _scaler - 1; if (_scaler > 0) { switchGfxMode(_fullscreen, s); } } break; } else if (ev.key.keysym.mod & KMOD_CTRL) { if (ev.key.keysym.sym == SDLK_f) { _pi.dbgMask ^= PlayerInput::DF_FASTMODE; } else if (ev.key.keysym.sym == SDLK_b) { _pi.dbgMask ^= PlayerInput::DF_DBLOCKS; } else if (ev.key.keysym.sym == SDLK_i) { _pi.dbgMask ^= PlayerInput::DF_SETLIFE; } else if (ev.key.keysym.sym == SDLK_m) { _pi.mirrorMode = !_pi.mirrorMode; flipGfx(); } else if (ev.key.keysym.sym == SDLK_s) { _pi.save = true; } else if (ev.key.keysym.sym == SDLK_l) { _pi.load = true; } else if (ev.key.keysym.sym == SDLK_KP_PLUS) { _pi.stateSlot = 1; } else if (ev.key.keysym.sym == SDLK_KP_MINUS) { _pi.stateSlot = -1; } else if (ev.key.keysym.sym == SDLK_r) { _pi.inpRecord = true; } else if (ev.key.keysym.sym == SDLK_p) { _pi.inpReplay = true; } } _pi.lastChar = ev.key.keysym.sym; switch (ev.key.keysym.sym) { case SDLK_LEFT: _pi.dirMask |= PlayerInput::DIR_LEFT; break; case SDLK_RIGHT: _pi.dirMask |= PlayerInput::DIR_RIGHT; break; case SDLK_UP: _pi.dirMask |= PlayerInput::DIR_UP; break; case SDLK_DOWN: _pi.dirMask |= PlayerInput::DIR_DOWN; break; case SDLK_BACKSPACE: case SDLK_TAB: _pi.backspace = true; break; case SDLK_SPACE: _pi.space = true; break; case SDLK_RSHIFT: case SDLK_LSHIFT: _pi.shift = true; break; case SDLK_RETURN: _pi.enter = true; break; case SDLK_ESCAPE: _pi.escape = true; break; default: break; } break; default: break; } } }