/*Returns whether has handled event completely or not*/ bool GameChat::handle_event(GameState* gs, SDL_Event *event) { int view_w = gs->view().width, view_h = gs->view().height; int chat_w = view_w, chat_h = 100; int chat_x = 0, chat_y = 0; //h - chat_h - TILE_SIZE; SDLKey keycode = event->key.keysym.sym; SDLMod keymod = event->key.keysym.mod; bool did_typing = false; if (is_typing) { did_typing = (typing_field.handle_event(event)); } switch (event->type) { case SDL_MOUSEBUTTONDOWN: { // if (show_chat && event->button.button == SDL_BUTTON_LEFT // && gs->mouse_x() < chat_w && gs->mouse_y() < chat_h) { // toggle_chat(gs); // return true; // } break; } case SDL_KEYDOWN: { if (keycode == SDLK_RETURN) { toggle_chat(gs); return true; } if (is_typing) { if (keycode == SDLK_BACKSPACE) { if (typing_field.empty()) { reset_typed_message(); is_typing = false; } return true; } if (keycode == SDLK_LCTRL || keycode == SDLK_RCTRL) { is_typing = false; return true; } if (keycode == SDLK_DELETE) { reset_typed_message(); is_typing = false; return true; } } break; } } return did_typing; }
/*Returns whether has handled event completely or not*/ bool GameChat::handle_event(GameState* gs, SDL_Event *event) { int view_w = gs->view().width, view_h = gs->view().height; int chat_w = view_w, chat_h = 100; int chat_x = 0, chat_y = 0; //h - chat_h - TILE_SIZE; SDLKey keycode = event->key.keysym.sym; SDLMod keymod = event->key.keysym.mod; current_mod = keymod; switch (event->type) { case SDL_MOUSEBUTTONDOWN: { // if (show_chat && event->button.button == SDL_BUTTON_LEFT // && gs->mouse_x() < chat_w && gs->mouse_y() < chat_h) { // toggle_chat(gs); // return true; // } break; } case SDL_KEYUP: { if (current_key == keycode) current_key = SDLK_FIRST; /*Let GameState handle this as well*/ break; } case SDL_KEYDOWN: { if (keycode == SDLK_RETURN) { toggle_chat(gs); return true; } if (is_typing) { std::string& msg = typed_message.message; if (is_typeable_keycode(keycode)) { msg += keycode_to_char(keycode, keymod); if (current_key != keycode) { current_key = keycode; repeat_steps_left = INITIAL_REPEAT_STEP_AMNT; } return true; } if (keycode == SDLK_BACKSPACE) { if (msg.empty()) { reset_typed_message(); is_typing = false; } else { msg.resize(msg.size() - 1); } if (current_key != keycode) { current_key = keycode; repeat_steps_left = INITIAL_REPEAT_STEP_AMNT; } return true; } if (keycode == SDLK_LCTRL || keycode == SDLK_RCTRL) { is_typing = false; return true; } if (keycode == SDLK_DELETE) { reset_typed_message(); is_typing = false; return true; } } break; } } return false; }