]> git.lizzy.rs Git - nothing.git/commitdiff
Remove LT from LevelPicker
authorrexim <reximkut@gmail.com>
Sun, 15 Dec 2019 18:44:26 +0000 (01:44 +0700)
committerrexim <reximkut@gmail.com>
Sun, 15 Dec 2019 18:44:26 +0000 (01:44 +0700)
src/game.c
src/game/level_picker.c
src/game/level_picker.h

index 6c7b413aa4efe22af6414c03ad3c70ff588f2262..54633ce984219b9a8251496536f68d1b2ce84568 100644 (file)
@@ -25,7 +25,7 @@ typedef struct Game {
 
     Game_state state;
     Sprite_font font;
-    LevelPicker *level_picker;
+    LevelPicker level_picker;
     LevelEditor *level_editor;
     Credits *credits;
     Level *level;
@@ -41,7 +41,7 @@ typedef struct Game {
 void game_switch_state(Game *game, Game_state state)
 {
     if (state == GAME_STATE_LEVEL_PICKER) {
-        level_picker_clean_selection(game->level_picker);
+        level_picker_clean_selection(&game->level_picker);
     }
     game->camera = create_camera(game->renderer, game->font);
     game->state = state;
@@ -66,13 +66,7 @@ Game *create_game(const char *level_folder,
         renderer,
         "./assets/images/charmap-oldschool.bmp");
 
-    game->level_picker = PUSH_LT(
-        lt,
-        create_level_picker(level_folder),
-        destroy_level_picker);
-    if (game->level_picker == NULL) {
-        RETURN_LT(lt, NULL);
-    }
+    level_picker_populate(&game->level_picker, level_folder);
 
     game->credits = PUSH_LT(
         lt,
@@ -132,6 +126,7 @@ Game *create_game(const char *level_folder,
 void destroy_game(Game *game)
 {
     trace_assert(game);
+    destroy_level_picker(game->level_picker);
     RETURN_LT0(game->lt);
 }
 
@@ -147,7 +142,7 @@ int game_render(const Game *game)
     } break;
 
     case GAME_STATE_LEVEL_PICKER: {
-        if (level_picker_render(game->level_picker, &game->camera) < 0) {
+        if (level_picker_render(&game->level_picker, &game->camera) < 0) {
             return -1;
         }
     } break;
@@ -231,15 +226,15 @@ int game_update(Game *game, float delta_time)
     } break;
 
     case GAME_STATE_LEVEL_PICKER: {
-        if (level_picker_update(game->level_picker, delta_time) < 0) {
+        if (level_picker_update(&game->level_picker, delta_time) < 0) {
             return -1;
         }
 
-        if (level_picker_enter_camera_event(game->level_picker, &game->camera) < 0) {
+        if (level_picker_enter_camera_event(&game->level_picker, &game->camera) < 0) {
             return -1;
         }
 
-        const char *level_filename = level_picker_selected_level(game->level_picker);
+        const char *level_filename = level_picker_selected_level(&game->level_picker);
 
         if (level_filename != NULL) {
             if (game_load_level(game, level_filename) < 0) {
@@ -373,7 +368,7 @@ static int game_event_level_picker(Game *game, const SDL_Event *event)
     } break;
     }
 
-    return level_picker_event(game->level_picker, event);
+    return level_picker_event(&game->level_picker, event);
 }
 
 static int game_event_level_editor(Game *game, const SDL_Event *event)
@@ -525,7 +520,7 @@ int game_input(Game *game,
         return level_input(game->level, keyboard_state, the_stick_of_joy);
 
     case GAME_STATE_LEVEL_PICKER:
-        return level_picker_input(game->level_picker, keyboard_state, the_stick_of_joy);
+        return level_picker_input(&game->level_picker, keyboard_state, the_stick_of_joy);
     }
 
     return 0;
index 995428a1fcdce86d6996f9e1b4f043c7bdb3e4fc..50554d5efa8ce3ccc870b1c700fd996a9475f171 100644 (file)
@@ -1,15 +1,13 @@
 #include <stdio.h>
 
 #include "./level_picker.h"
-#include "game/level/background.h"
+
 #include "game/sprite_font.h"
 #include "system/lt.h"
 #include "system/nth_alloc.h"
 #include "system/stacktrace.h"
 #include "system/str.h"
 #include "system/log.h"
-#include "ui/wiggly_text.h"
-#include "ui/slider.h"
 #include "system/file.h"
 
 #define TITLE_MARGIN_TOP 100.0f
 #define LEVEL_PICKER_LIST_FONT_SCALE vec(5.0f, 5.0f)
 #define LEVEL_PICKER_LIST_PADDING_BOTTOM 50.0f
 
-struct LevelPicker
-{
-    Lt *lt;
-    Background background;
-    Vec2f camera_position;
-    WigglyText wiggly_text;
-    Dynarray items;
-    size_t cursor;
-    int selected_item;
-    Vec2f position;
-};
-
-LevelPicker *create_level_picker(const char *dirpath)
+void level_picker_populate(LevelPicker *level_picker,
+                           const char *dirpath)
 {
+    trace_assert(level_picker);
     trace_assert(dirpath);
 
-    Lt *lt = create_lt();
-
-    LevelPicker *level_picker = PUSH_LT(
-        lt,
-        nth_calloc(1, sizeof(LevelPicker)),
-        free);
-    if (level_picker == NULL) {
-        RETURN_LT(lt, NULL);
-    }
-    level_picker->lt = lt;
-    level_picker->background = create_background(hexstr("073642"));
+    level_picker->background.base_color = hexstr("073642");
     level_picker->camera_position = vec(0.0f, 0.0f);
 
     {
+        dynarray_clear(&level_picker->items);
         level_picker->items = create_dynarray(METADATA_FILEPATH_MAX_SIZE);
 
         DIR *level_dir = opendir(dirpath);
@@ -74,15 +53,6 @@ LevelPicker *create_level_picker(const char *dirpath)
         .scale = {10.0f, 10.0f},
         .color = COLOR_WHITE,
     };
-
-    return level_picker;
-}
-
-void destroy_level_picker(LevelPicker *level_picker)
-{
-    trace_assert(level_picker);
-    free(level_picker->items.data);
-    RETURN_LT0(level_picker->lt);
 }
 
 int level_picker_render(const LevelPicker *level_picker,
index ec20f5093baadcb27bb1003c47c62b7fd57e2b5c..e43397676a9e4879da6d49914fb7b1f443229a8b 100644 (file)
@@ -4,12 +4,29 @@
 #include <SDL.h>
 
 #include "game/camera.h"
-#include "game/sprite_font.h"
-
-typedef struct LevelPicker LevelPicker;
-
-LevelPicker *create_level_picker(const char *dirpath);
-void destroy_level_picker(LevelPicker *level_picker);
+#include "game/level/background.h"
+#include "ui/wiggly_text.h"
+#include "dynarray.h"
+
+typedef struct {
+    Background background;
+    Vec2f camera_position;
+    WigglyText wiggly_text;
+    Dynarray items;
+    size_t cursor;
+    int selected_item;
+    Vec2f position;
+} LevelPicker;
+
+
+void level_picker_populate(LevelPicker *level_picker,
+                           const char *dirpath);
+
+static inline
+void destroy_level_picker(LevelPicker level_picker)
+{
+    free(level_picker.items.data);
+}
 
 int level_picker_render(const LevelPicker *level_picker,
                         const Camera *camera);