void Game::ProcessInput() { //Poll events from SDL SDL_Event event; while (SDL_PollEvent(&event)) { switch (event.type) { case SDL_QUIT: mShouldQuit = true; break; case SDL_KEYDOWN: if (event.key.repeat == 0) { HandleKeyPressed(event.key.keysym.sym); } break; case SDL_KEYUP: HandleKeyReleased(event.key.keysym.sym); default: //... break; } } }
void Keyboard::HandleKeyComboEvent(int key_code, Key_Event_t event_type) { MSG_DEBUG("keyboard", "%s %s%s%s%d", event_type == KEY_PRESSED ?"pressed":"released", ((key_code / MODIFIER_OFFSET) & CONTROL_BIT)?"[control] + ": "", ((key_code / MODIFIER_OFFSET) & ALT_BIT)?"[alt] + ": "", ((key_code / MODIFIER_OFFSET) & SHIFT_BIT)?"[shift] + ": "", key_code % MODIFIER_OFFSET); std::map<int, std::vector<Key_t> >::iterator it = layout.find(key_code); if (it == layout.end()) return; const std::vector<Key_t>& keys = it->second; std::vector<Key_t>::const_iterator itv; for (itv = keys.begin(); itv != keys.end() ; itv++) { //While player writes, it cannot control the game but PAUSE. if (Game::GetInstance()->chatsession.CheckInput()) { switch (*itv) { case KEY_PAUSE: break; default: return; } } if (event_type == KEY_PRESSED) { HandleKeyPressed(*itv); return; } if (event_type == KEY_RELEASED) { HandleKeyReleased(*itv); return; } } }