(#1221) Introduce Emacs keybindings to level picker

For no reason
master
rexim 2020-01-20 00:16:37 +07:00
parent 95ca07bd72
commit 2680b71a8c
3 changed files with 64 additions and 38 deletions

View File

@ -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);
case SDLK_DOWN: {
level_picker_cursor_down(&game->level_picker);
} break;
case SDLK_p: {
if (event->key.keysym.mod & KMOD_CTRL) {
level_picker_cursor_up(&game->level_picker);
}
} break;
case SDLK_n: {
if (event->key.keysym.mod & KMOD_CTRL) {
level_picker_cursor_down(&game->level_picker);
} else {
game->level = RESET_LT(
game->lt,
game->level,
create_level_from_level_editor(
game->level_editor));
}
memory_clean(&game->level_editor_memory);
game->level_editor = create_level_editor(
&game->level_editor_memory,
&game->cursor);
if (game->level == NULL) {
return -1;
}
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));
}
game_switch_state(game, GAME_STATE_LEVEL);
if (game->level == NULL) {
return -1;
}
game_switch_state(game, GAME_STATE_LEVEL);
}
} break;
case SDLK_i: {

View File

@ -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;
}
}

View File

@ -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);