Example #1
0
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;
		}
	}
}
Example #2
0
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;
    }
  }
}