From: rexim Date: Sun, 19 Jan 2020 17:16:37 +0000 (+0700) Subject: (#1221) Introduce Emacs keybindings to level picker X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=2680b71a8cda38d9ca3eb2e9cd9d111bfd44e69b;p=nothing.git (#1221) Introduce Emacs keybindings to level picker For no reason --- diff --git a/src/game.c b/src/game.c index 2811c515..f0cb7df8 100644 --- a/src/game.c +++ b/src/game.c @@ -324,31 +324,49 @@ static int game_event_level_picker(Game *game, const SDL_Event *event) switch (event->type) { case SDL_KEYDOWN: { switch(event->key.keysym.sym) { - case SDLK_n: { - memory_clean(&game->level_editor_memory); - game->level_editor = create_level_editor( - &game->level_editor_memory, - &game->cursor); + case SDLK_UP: { + level_picker_cursor_up(&game->level_picker); + } break; - if (game->level == NULL) { - game->level = PUSH_LT( - game->lt, - create_level_from_level_editor( - game->level_editor), - destroy_level); - } else { - game->level = RESET_LT( - game->lt, - game->level, - create_level_from_level_editor( - game->level_editor)); - } + case SDLK_DOWN: { + level_picker_cursor_down(&game->level_picker); + } break; - if (game->level == NULL) { - return -1; + case SDLK_p: { + if (event->key.keysym.mod & KMOD_CTRL) { + level_picker_cursor_up(&game->level_picker); } + } break; - game_switch_state(game, GAME_STATE_LEVEL); + case SDLK_n: { + if (event->key.keysym.mod & KMOD_CTRL) { + level_picker_cursor_down(&game->level_picker); + } else { + memory_clean(&game->level_editor_memory); + game->level_editor = create_level_editor( + &game->level_editor_memory, + &game->cursor); + + if (game->level == NULL) { + game->level = PUSH_LT( + game->lt, + create_level_from_level_editor( + game->level_editor), + destroy_level); + } else { + game->level = RESET_LT( + game->lt, + game->level, + create_level_from_level_editor( + game->level_editor)); + } + + if (game->level == NULL) { + return -1; + } + + game_switch_state(game, GAME_STATE_LEVEL); + } } break; case SDLK_i: { diff --git a/src/game/level_picker.c b/src/game/level_picker.c index e8773835..8f875f3c 100644 --- a/src/game/level_picker.c +++ b/src/game/level_picker.c @@ -236,28 +236,15 @@ int level_picker_event(LevelPicker *level_picker, } } break; - case SDL_KEYDOWN: + case SDL_KEYDOWN: { switch (event->key.keysym.sym) { - case SDLK_UP: - if (level_picker->items_cursor == 0) { - level_picker->items_cursor = level_picker->items.count - 1; - } else { - level_picker->items_cursor--; - } - break; - case SDLK_DOWN: - level_picker->items_cursor++; - if (level_picker->items_cursor == level_picker->items.count) { - level_picker->items_cursor = 0; - } - break; - case SDLK_RETURN: + case SDLK_RETURN: { if (level_picker->items_cursor < level_picker->items.count) { level_picker->selected_item = (int) level_picker->items_cursor; } - break; + } break; } - break; + } break; case SDL_MOUSEMOTION: { const Vec2f mouse_pos = vec((float) event->motion.x, (float) event->motion.y); @@ -359,3 +346,22 @@ int level_picker_enter_camera_event(LevelPicker *level_picker, camera_center_at(camera, level_picker->camera_position); return 0; } + +void level_picker_cursor_up(LevelPicker *level_picker) +{ + trace_assert(level_picker); + if (level_picker->items_cursor == 0) { + level_picker->items_cursor = level_picker->items.count - 1; + } else { + level_picker->items_cursor--; + } +} + +void level_picker_cursor_down(LevelPicker *level_picker) +{ + trace_assert(level_picker); + level_picker->items_cursor++; + if (level_picker->items_cursor == level_picker->items.count) { + level_picker->items_cursor = 0; + } +} diff --git a/src/game/level_picker.h b/src/game/level_picker.h index 2d15ce70..67babdb0 100644 --- a/src/game/level_picker.h +++ b/src/game/level_picker.h @@ -44,6 +44,8 @@ int level_picker_input(LevelPicker *level_picker, SDL_Joystick *the_stick_of_joy); int level_picker_enter_camera_event(LevelPicker *level_picker, Camera *camera); +void level_picker_cursor_up(LevelPicker *level_picker); +void level_picker_cursor_down(LevelPicker *level_picker); const char *level_picker_selected_level(const LevelPicker *level_picker); void level_picker_clean_selection(LevelPicker *level_picker);