Fixed bugs related to multiple modifier detection

dev
shariq 8 years ago
parent 77737dfd3c
commit 8fa5278dc6
  1. 4
      src/game.c
  2. 7
      src/input.c
  3. 5
      src/input.h
  4. 8
      src/platform.c

@ -89,7 +89,7 @@ int game_init(struct Window* window)
void scene_setup(void) void scene_setup(void)
{ {
struct Key_Combination forward_keys[2] = {{KEY_W, KMD_NONE}, {KEY_UP, KMD_ALT}}; struct Key_Combination forward_keys[2] = {{KEY_W, KMD_NONE}, {KEY_UP, KMD_ALT | KMD_SHIFT}};
struct Key_Combination backward_keys[2] = {{KEY_S, KMD_NONE}, {KEY_DOWN, KMD_NONE}}; struct Key_Combination backward_keys[2] = {{KEY_S, KMD_NONE}, {KEY_DOWN, KMD_NONE}};
/* struct Key_Combination up_keys[2] = {KEY_Q}; */ /* struct Key_Combination up_keys[2] = {KEY_Q}; */
/* struct Key_Combination down_keys[2] = {KEY_E}; */ /* struct Key_Combination down_keys[2] = {KEY_E}; */
@ -427,7 +427,7 @@ void update(float dt, int* window_should_close)
/* if(input_map_state_get("Window_Maximize", KS_RELEASED)) window_fullscreen_set(game_state->window, 0); */ /* if(input_map_state_get("Window_Maximize", KS_RELEASED)) window_fullscreen_set(game_state->window, 0); */
debug(dt); debug(dt);
//debug_gui(dt); debug_gui(dt);
editor_update(dt); editor_update(dt);
input_update(); /* This should always be the last thing. Probably input_update(); /* This should always be the last thing. Probably
* put this in post update? */ * put this in post update? */

@ -76,17 +76,18 @@ void input_on_key(int key, int scancode, int state, int repeat, int mod_ctrl, in
if(mod_ctrl) mods |= KMD_CTRL; if(mod_ctrl) mods |= KMD_CTRL;
if(mod_shift) mods |= KMD_SHIFT; if(mod_shift) mods |= KMD_SHIFT;
if(mod_alt) mods |= KMD_ALT; if(mod_alt) mods |= KMD_ALT;
for(int i = 0; i < array_len(input_map_list); i++) for(int i = 0; i < array_len(input_map_list); i++)
{ {
struct Input_Map* map = &input_map_list[i]; struct Input_Map* map = &input_map_list[i];
for(int j = 0; j < array_len(map->keys); j++) for(int j = 0; j < array_len(map->keys); j++)
{ {
if(map->state == KS_PRESSED && state == KS_RELEASED && map->keys[j].mods == mods) if(map->state == KS_PRESSED &&
state == KS_RELEASED &&
((map->keys[j].mods & mods) == map->keys[j].mods))
{ {
map->state = state; map->state = state;
} }
if(map->keys[j].key == key && (map->keys[j].mods == mods)) if(map->keys[j].key == key && ((map->keys[j].mods & mods) == map->keys[j].mods))
{ {
map->state = state; map->state = state;
break; break;

@ -15,10 +15,11 @@ struct Key_Combination
enum Key_Mod enum Key_Mod
{ {
KMD_NONE = KMOD_NONE,
KMD_ALT = KMOD_ALT, KMD_ALT = KMOD_ALT,
KMD_SHIFT = KMOD_SHIFT, KMD_SHIFT = KMOD_SHIFT,
KMD_CTRL = KMOD_CTRL KMD_CTRL = KMOD_CTRL,
//KMD_NONE = !(KMD_ALT | KMD_SHIFT | KMD_CTRL)
KMD_NONE = 0
}; };
enum Key_State enum Key_State

@ -225,11 +225,11 @@ void platform_poll_events(int* out_quit)
int key = event.key.keysym.sym; int key = event.key.keysym.sym;
int state = event.key.state; int state = event.key.state;
int repeat = event.key.repeat; int repeat = event.key.repeat;
int mod_ctrl = (event.key.keysym.mod & KMOD_CTRL); int mod_ctrl = (event.key.keysym.mod & KMOD_CTRL) ? 1 : 0;
int mod_shift = (event.key.keysym.mod & KMOD_SHIFT); int mod_shift = (event.key.keysym.mod & KMOD_SHIFT) ? 1 : 0;
int mod_alt = (event.key.keysym.mod & KMOD_ALT); int mod_alt = (event.key.keysym.mod & KMOD_ALT) ? 1 : 0;
platform_state->on_keyboard_func(key, scancode, state, repeat, mod_ctrl, mod_shift, mod_alt); platform_state->on_keyboard_func(key, scancode, state, repeat, mod_ctrl, mod_shift, mod_alt);
log_message("Key name : %s", SDL_GetKeyName(key)); //log_message("Key name : %s", SDL_GetKeyName(key));
break; break;
} }
case SDL_MOUSEBUTTONDOWN: case SDL_MOUSEBUTTONUP: case SDL_MOUSEBUTTONDOWN: case SDL_MOUSEBUTTONUP:

Loading…
Cancel
Save