minor options menu improvements

This commit is contained in:
Andrei Alexeyev 2017-10-22 02:47:02 +03:00
parent 063807870e
commit f21e35f459
No known key found for this signature in database
GPG key ID: 363707CD4C7FE8A4
4 changed files with 45 additions and 20 deletions

View file

@ -348,7 +348,7 @@ static bool events_handler_key_down(SDL_Event *event, void *arg) {
if(!repeat || transition.state == TRANS_IDLE) {
for(struct eventmap_s *m = menu_event_map; m->scancode != SDL_SCANCODE_UNKNOWN; ++m) {
if(scan == m->scancode) {
events_emit(m->event, 0, NULL, NULL);
events_emit(m->event, 0, (void*)(intptr_t)INDEV_KEYBOARD, NULL);
break;
}
}
@ -365,7 +365,7 @@ static bool events_handler_key_down(SDL_Event *event, void *arg) {
int key = config_key_from_scancode(scan);
if(key >= 0) {
events_emit(TE_GAME_KEY_DOWN, key, NULL, NULL);
events_emit(TE_GAME_KEY_DOWN, key, (void*)(intptr_t)INDEV_KEYBOARD, NULL);
}
}
}
@ -383,7 +383,7 @@ static bool events_handler_key_up(SDL_Event *event, void *arg) {
int key = config_key_from_scancode(scan);
if(key >= 0) {
events_emit(TE_GAME_KEY_UP, key, NULL, NULL);
events_emit(TE_GAME_KEY_UP, key, (void*)(intptr_t)INDEV_KEYBOARD, NULL);
}
return false;

View file

@ -62,6 +62,11 @@ typedef enum {
EFLAG_TEXT = (1 << 2),
} EventFlags;
typedef enum {
INDEV_KEYBOARD,
INDEV_GAMEPAD,
} InputDevice;
#define EPRIO_DEFAULT_REMAP EPRIO_NORMAL
// if the this returns true, the event won't be passed down to lower priority handlers

View file

@ -423,12 +423,12 @@ void gamepad_axis(SDL_GameControllerAxis id, int raw) {
if(key >= 0) {
if(restricted) {
events_emit(TE_GAME_KEY_DOWN, key, NULL, NULL);
events_emit(TE_GAME_KEY_DOWN, key, (void*)(intptr_t)INDEV_GAMEPAD, NULL);
}
int evt = gamepad_axis2menuevt(id, val);
if(evt >= 0) {
events_emit(evt, 0, NULL, NULL);
events_emit(evt, 0, (void*)(intptr_t)INDEV_GAMEPAD, NULL);
}
}
@ -438,7 +438,7 @@ void gamepad_axis(SDL_GameControllerAxis id, int raw) {
int key = gamepad_axis2gamekey(id, a[id]);
if(key >= 0) {
events_emit(TE_GAME_KEY_UP, key, NULL, NULL);
events_emit(TE_GAME_KEY_UP, key, (void*)(intptr_t)INDEV_GAMEPAD, NULL);
}
}
@ -449,45 +449,46 @@ void gamepad_axis(SDL_GameControllerAxis id, int raw) {
void gamepad_button(SDL_GameControllerButton button, int state) {
int gpkey = config_gamepad_key_from_gamepad_button(button);
int key = config_key_from_gamepad_key(gpkey);
void *indev = (void*)(intptr_t)INDEV_GAMEPAD;
if(state == SDL_PRESSED) {
events_emit(TE_GAMEPAD_BUTTON_DOWN, button, NULL, NULL);
events_emit(TE_GAMEPAD_BUTTON_DOWN, button, indev, NULL);
switch(button) {
case SDL_CONTROLLER_BUTTON_START:
events_emit(TE_MENU_ACCEPT, 0, NULL, NULL);
events_emit(TE_GAME_PAUSE, 0, NULL, NULL);
events_emit(TE_MENU_ACCEPT, 0, indev, NULL);
events_emit(TE_GAME_PAUSE, 0, indev, NULL);
break;
case SDL_CONTROLLER_BUTTON_BACK:
events_emit(TE_MENU_ABORT, 0, NULL, NULL);
events_emit(TE_GAME_PAUSE, 0, NULL, NULL);
events_emit(TE_MENU_ABORT, 0, indev, NULL);
events_emit(TE_GAME_PAUSE, 0, indev, NULL);
break;
case SDL_CONTROLLER_BUTTON_DPAD_UP: events_emit(TE_MENU_CURSOR_UP, 0, NULL, NULL); break;
case SDL_CONTROLLER_BUTTON_DPAD_DOWN: events_emit(TE_MENU_CURSOR_DOWN, 0, NULL, NULL); break;
case SDL_CONTROLLER_BUTTON_DPAD_LEFT: events_emit(TE_MENU_CURSOR_LEFT, 0, NULL, NULL); break;
case SDL_CONTROLLER_BUTTON_DPAD_RIGHT: events_emit(TE_MENU_CURSOR_RIGHT, 0, NULL, NULL); break;
case SDL_CONTROLLER_BUTTON_DPAD_UP: events_emit(TE_MENU_CURSOR_UP, 0, indev, NULL); break;
case SDL_CONTROLLER_BUTTON_DPAD_DOWN: events_emit(TE_MENU_CURSOR_DOWN, 0, indev, NULL); break;
case SDL_CONTROLLER_BUTTON_DPAD_LEFT: events_emit(TE_MENU_CURSOR_LEFT, 0, indev, NULL); break;
case SDL_CONTROLLER_BUTTON_DPAD_RIGHT: events_emit(TE_MENU_CURSOR_RIGHT, 0, indev, NULL); break;
case SDL_CONTROLLER_BUTTON_A:
events_emit(TE_MENU_ACCEPT, 0, NULL, NULL);
events_emit(TE_MENU_ACCEPT, 0, indev, NULL);
break;
case SDL_CONTROLLER_BUTTON_B:
events_emit(TE_MENU_ABORT, 0, NULL, NULL);
events_emit(TE_MENU_ABORT, 0, indev, NULL);
break;
default:
if(key >= 0) {
events_emit(TE_GAME_KEY_DOWN, key, NULL, NULL);
events_emit(TE_GAME_KEY_DOWN, key, indev, NULL);
} break;
}
} else {
events_emit(TE_GAMEPAD_BUTTON_UP, button, NULL, NULL);
events_emit(TE_GAMEPAD_BUTTON_UP, button, indev, NULL);
if(key >= 0) {
events_emit(TE_GAME_KEY_UP, key, NULL, NULL);
events_emit(TE_GAME_KEY_UP, key, indev, NULL);
}
}
}

View file

@ -925,6 +925,7 @@ static bool options_rebind_input_handler(SDL_Event *event, void *arg) {
if(b->type != BT_KeyBinding) {
if(esc) {
b->blockinput = false;
play_ui_sound("hit");
}
return true;
@ -938,18 +939,28 @@ static bool options_rebind_input_handler(SDL_Event *event, void *arg) {
}
config_set_int(b->configentry, scan);
play_ui_sound("shot_special1");
} else {
play_ui_sound("hit");
}
b->blockinput = false;
return true;
}
if(t == MAKE_TAISEI_EVENT(TE_MENU_ABORT)) {
play_ui_sound("hit");
b->blockinput = false;
return true;
}
if(t == MAKE_TAISEI_EVENT(TE_GAMEPAD_BUTTON_DOWN)) {
SDL_GameControllerButton button = event->user.code;
if(b->type != BT_GamepadKeyBinding) {
if(b->type == BT_GamepadAxisBinding) {
b->blockinput = false;
play_ui_sound("hit");
}
return true;
@ -957,6 +968,7 @@ static bool options_rebind_input_handler(SDL_Event *event, void *arg) {
if(button == SDL_CONTROLLER_BUTTON_BACK || button == SDL_CONTROLLER_BUTTON_START) {
b->blockinput = false;
play_ui_sound("hit");
return true;
}
@ -968,6 +980,7 @@ static bool options_rebind_input_handler(SDL_Event *event, void *arg) {
config_set_int(b->configentry, button);
b->blockinput = false;
play_ui_sound("shot_special1");
return true;
}
@ -1041,6 +1054,12 @@ static bool options_text_input_handler(SDL_Event *event, void *arg) {
return true;
}
if(t == MAKE_TAISEI_EVENT(TE_MENU_ABORT)) {
play_ui_sound("hit");
b->blockinput = false;
return true;
}
if(t == SDL_KEYDOWN) {
SDL_Scancode scan = event->key.keysym.scancode;