Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 14 additions & 13 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
60 changes: 39 additions & 21 deletions src/game.c
Original file line number Diff line number Diff line change
Expand Up @@ -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: {
Expand Down
2 changes: 1 addition & 1 deletion src/game/level/level_editor/undo_history.c
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand Down
85 changes: 50 additions & 35 deletions src/game/level_picker.c
Original file line number Diff line number Diff line change
Expand Up @@ -236,54 +236,53 @@ 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);
Vec2f position = vec_sum(
level_picker->items_position,
level_picker->items_scroll);
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;

for (size_t i = 0; i < level_picker->items.count; ++i) {
const char *item_text = dynarray_pointer_at(
&level_picker->items,
i);
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);

Rect boundary_box = sprite_font_boundary_box(
position,
LEVEL_PICKER_LIST_FONT_SCALE,
item_text);
for (size_t i = 0; i < level_picker->items.count; ++i) {
const char *item_text = dynarray_pointer_at(
&level_picker->items,
i);

if (rect_contains_point(boundary_box, mouse_pos)) {
level_picker->items_cursor = i;
}
Rect boundary_box = sprite_font_boundary_box(
position,
LEVEL_PICKER_LIST_FONT_SCALE,
item_text);

position.y += boundary_box.h + LEVEL_PICKER_LIST_PADDING_BOTTOM;
if (rect_contains_point(boundary_box, mouse_pos)) {
level_picker->items_cursor = i;
}

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...
Expand Down Expand Up @@ -359,3 +358,19 @@ 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--;
}
}

void level_picker_cursor_down(LevelPicker *level_picker)
{
trace_assert(level_picker);
if (level_picker->items_cursor + 1 < level_picker->items.count) {
level_picker->items_cursor++;
}
}
2 changes: 2 additions & 0 deletions src/game/level_picker.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down