From 2680b71a8cda38d9ca3eb2e9cd9d111bfd44e69b Mon Sep 17 00:00:00 2001 From: rexim Date: Mon, 20 Jan 2020 00:16:37 +0700 Subject: [PATCH 1/7] (#1221) Introduce Emacs keybindings to level picker For no reason --- src/game.c | 60 ++++++++++++++++++++++++++--------------- src/game/level_picker.c | 40 +++++++++++++++------------ src/game/level_picker.h | 2 ++ 3 files changed, 64 insertions(+), 38 deletions(-) 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); From 95acf17ec3f09a4e9268d8a5594cb3d92edbfafc Mon Sep 17 00:00:00 2001 From: rexim Date: Mon, 20 Jan 2020 01:03:56 +0700 Subject: [PATCH 2/7] (#1221) Add support to mouse wheel to level picker --- src/game/level_picker.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/game/level_picker.c b/src/game/level_picker.c index 8f875f3c..4c4bbe88 100644 --- a/src/game/level_picker.c +++ b/src/game/level_picker.c @@ -246,6 +246,14 @@ int level_picker_event(LevelPicker *level_picker, } } break; + case SDL_MOUSEWHEEL: { + if (event->wheel.y < 0) { + level_picker_cursor_down(level_picker); + } else if (event->wheel.y > 0) { + level_picker_cursor_up(level_picker); + } + } break; + case SDL_MOUSEMOTION: { const Vec2f mouse_pos = vec((float) event->motion.x, (float) event->motion.y); Vec2f position = vec_sum( From 794f1f00ade2d303994d17cc174b8be24886b74d Mon Sep 17 00:00:00 2001 From: rexim Date: Mon, 20 Jan 2020 01:11:25 +0700 Subject: [PATCH 3/7] (#1221) Disable wrapping around in Level Picker --- src/game/level_picker.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/game/level_picker.c b/src/game/level_picker.c index 4c4bbe88..4066fe60 100644 --- a/src/game/level_picker.c +++ b/src/game/level_picker.c @@ -358,9 +358,7 @@ int level_picker_enter_camera_event(LevelPicker *level_picker, 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 { + if (level_picker->items_cursor > 0) { level_picker->items_cursor--; } } @@ -368,8 +366,7 @@ void level_picker_cursor_up(LevelPicker *level_picker) 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; + if (level_picker->items_cursor + 1 < level_picker->items.count) { + level_picker->items_cursor++; } } From 4a384d904ce064781ff332396b5a82138397448d Mon Sep 17 00:00:00 2001 From: rexim Date: Mon, 20 Jan 2020 01:40:05 +0700 Subject: [PATCH 4/7] (#1221) improve UX of clicking on level in level picker --- src/game/level_picker.c | 40 ++++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/src/game/level_picker.c b/src/game/level_picker.c index 4066fe60..5fafb982 100644 --- a/src/game/level_picker.c +++ b/src/game/level_picker.c @@ -254,31 +254,35 @@ int level_picker_event(LevelPicker *level_picker, } } break; - case SDL_MOUSEMOTION: { - const Vec2f mouse_pos = vec((float) event->motion.x, (float) event->motion.y); - Vec2f position = vec_sum( - level_picker->items_position, - level_picker->items_scroll); + case SDL_MOUSEBUTTONDOWN: { + switch (event->button.button) { + case SDL_BUTTON_LEFT: { + const Vec2f mouse_pos = vec((float) event->button.x, (float) event->button.y); + Vec2f position = vec_sum( + level_picker->items_position, + level_picker->items_scroll); - for (size_t i = 0; i < level_picker->items.count; ++i) { - const char *item_text = dynarray_pointer_at( - &level_picker->items, - i); + for (size_t i = 0; i < level_picker->items.count; ++i) { + const char *item_text = dynarray_pointer_at( + &level_picker->items, + i); - Rect boundary_box = sprite_font_boundary_box( - position, - LEVEL_PICKER_LIST_FONT_SCALE, - item_text); + Rect boundary_box = sprite_font_boundary_box( + position, + LEVEL_PICKER_LIST_FONT_SCALE, + item_text); - if (rect_contains_point(boundary_box, mouse_pos)) { - level_picker->items_cursor = i; - } + if (rect_contains_point(boundary_box, mouse_pos)) { + level_picker->items_cursor = i; + } - position.y += boundary_box.h + LEVEL_PICKER_LIST_PADDING_BOTTOM; + position.y += boundary_box.h + LEVEL_PICKER_LIST_PADDING_BOTTOM; + } + } break; } } break; - case SDL_MOUSEBUTTONDOWN: { + case SDL_MOUSEBUTTONUP: { switch (event->button.button) { case SDL_BUTTON_LEFT: { // check if the click position was actually inside... From 4ec5f285b39ef68c6349940390d5b26cc814d54a Mon Sep 17 00:00:00 2001 From: rexim Date: Mon, 20 Jan 2020 01:40:49 +0700 Subject: [PATCH 5/7] Formatting --- src/game/level_picker.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/game/level_picker.c b/src/game/level_picker.c index 5fafb982..fcd704c8 100644 --- a/src/game/level_picker.c +++ b/src/game/level_picker.c @@ -370,7 +370,7 @@ void level_picker_cursor_up(LevelPicker *level_picker) void level_picker_cursor_down(LevelPicker *level_picker) { trace_assert(level_picker); - if (level_picker->items_cursor + 1 < level_picker->items.count) { + if (level_picker->items_cursor + 1 < level_picker->items.count) { level_picker->items_cursor++; } } From 082024ffbd30dd021047c1bd32234482342a7336 Mon Sep 17 00:00:00 2001 From: rexim Date: Mon, 20 Jan 2020 01:47:01 +0700 Subject: [PATCH 6/7] Add TODO(#1243) --- .github/workflows/ci.yml | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 367310fe..144fa174 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -80,17 +80,18 @@ jobs: cmake .. -DNOTHING_CI=ON cmake --build . + # TODO(#1243): build-windows-mingw is broken # TODO(#1178): %z related warnings on build-windows-mingw GitHub Action - build-windows-mingw: - runs-on: windows-2019 - steps: - - uses: actions/checkout@v1 - # this gives us msys. - - uses: numworks/setup-msys2@v1 - - name: install dependencies - run: msys2do pacman -S --noconfirm mingw-w64-x86_64-gcc mingw64/mingw-w64-x86_64-SDL2 make mingw-w64-x86_64-pkg-config - - name: build nothing - run: | - msys2do ./build-posix.sh - env: - CC: gcc + # build-windows-mingw: + # runs-on: windows-2019 + # steps: + # - uses: actions/checkout@v1 + # # this gives us msys. + # - uses: numworks/setup-msys2@v1 + # - name: install dependencies + # run: msys2do pacman -S --noconfirm mingw-w64-x86_64-gcc mingw64/mingw-w64-x86_64-SDL2 make mingw-w64-x86_64-pkg-config + # - name: build nothing + # run: | + # msys2do ./build-posix.sh + # env: + # CC: gcc From 6ea8b073663491581f2380170a691f6fd3917e53 Mon Sep 17 00:00:00 2001 From: rexim Date: Mon, 20 Jan 2020 01:47:03 +0700 Subject: [PATCH 7/7] Add TODO(#1244) --- src/game/level/level_editor/undo_history.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/game/level/level_editor/undo_history.c b/src/game/level/level_editor/undo_history.c index 2a7745de..5ddfb7eb 100644 --- a/src/game/level/level_editor/undo_history.c +++ b/src/game/level/level_editor/undo_history.c @@ -32,7 +32,7 @@ void undo_history_push(UndoHistory *undo_history, { trace_assert(undo_history); - // TODO: undo_history_push kinda leaks the memory + // TODO(#1244): undo_history_push kinda leaks the memory HistoryItem item = { .revert = revert, .context_data = memory_alloc(undo_history->memory, context_data_size),