]> git.lizzy.rs Git - nothing.git/commitdiff
(#1221) Introduce Emacs keybindings to level picker
authorrexim <reximkut@gmail.com>
Sun, 19 Jan 2020 17:16:37 +0000 (00:16 +0700)
committerrexim <reximkut@gmail.com>
Sun, 19 Jan 2020 17:16:37 +0000 (00:16 +0700)
For no reason

src/game.c
src/game/level_picker.c
src/game/level_picker.h

index 2811c515efcbd2020ed9bcd97c6db82656daf5fb..f0cb7df8c6ac36a6fb4e8bbd2a304d44a1657b1f 100644 (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);
-            } 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: {
index e877383568e8189941128a09162626d42299a2f8..8f875f3caf0691cb031c4b9749114e57fa9022ca 100644 (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;
+    }
+}
index 2d15ce703c137cf4d8be206232d61461b132c203..67babdb007474382b6d5cce422ea9dd1549bf93f 100644 (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);