Game_state state;
Sprite_font font;
- LevelPicker *level_picker;
+ LevelPicker level_picker;
LevelEditor *level_editor;
Credits *credits;
Level *level;
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;
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,
void destroy_game(Game *game)
{
trace_assert(game);
+ destroy_level_picker(game->level_picker);
RETURN_LT0(game->lt);
}
} 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;
} 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) {
} 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)
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;
#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);
.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,
#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);