abort();
}
- dynarray_clear(&folder->metadatas);
+ dynarray_clear(&folder->filepaths);
char filepath[METADATA_FILEPATH_MAX_SIZE];
- LevelMetadata metadata;
for (struct dirent *d = readdir(level_dir);
d != NULL;
d = readdir(level_dir)) {
snprintf(filepath, METADATA_FILEPATH_MAX_SIZE,
"%s/%s", dirpath, d->d_name);
-
- if (metadata_load_from_file(&metadata, filepath) < 0) {
- log_warn("Can't read level: %s\n", filepath);
- continue;
- }
-
- if(strcmp(metadata.version, VERSION) != 0) {
- log_warn(
- "Unsupported version for level [%s]: Expected `%s`, got `%s`\n",
- filepath, VERSION, metadata.version);
- continue;
- }
-
- dynarray_push(&folder->metadatas, &metadata);
+ dynarray_push(&folder->filepaths, filepath);
}
closedir(level_dir);
#include "level_metadata.h"
typedef struct {
- Dynarray metadatas;
+ Dynarray filepaths;
} LevelFolder;
static inline
LevelFolder create_level_folder(void)
{
LevelFolder result = {
- .metadatas = create_dynarray(sizeof(LevelMetadata)),
+ .filepaths = create_dynarray(METADATA_FILEPATH_MAX_SIZE),
};
return result;
}
static inline
void destroy_level_folder(LevelFolder level_folder)
{
- free(level_folder.metadatas.data);
+ free(level_folder.filepaths.data);
}
void level_folder_read(const char *dirpath, LevelFolder *folder);
.color = COLOR_WHITE,
};
- level_picker->list_selector.items = level_picker->level_folder.metadatas;
+ level_picker->list_selector.items = level_picker->level_folder.filepaths;
level_picker->list_selector.font_scale = vec(5.0f, 5.0f);
level_picker->list_selector.padding_bottom = 50.0f;
- level_picker->list_selector.list_item_text = list_item_text;
return level_picker;
}
return NULL;
}
- LevelMetadata *metadata = dynarray_pointer_at(
- &level_picker->level_folder.metadatas,
+ return dynarray_pointer_at(
+ &level_picker->level_folder.filepaths,
(size_t)level_picker->list_selector.selected_item);
-
- return metadata->filepath;
}
void level_picker_clean_selection(LevelPicker *level_picker)
list_selector->position,
vec(0.0f, (float) i * ((float) FONT_CHAR_HEIGHT * list_selector->font_scale.y + list_selector->padding_bottom)));
- const char *item_text =
- list_selector->list_item_text(
- dynarray_pointer_at(
- &list_selector->items,
- i));
+ const char *item_text = dynarray_pointer_at(&list_selector->items, i);
sprite_font_render_text(
&camera->font,
Vec2f result = vec(0.0f, 0.0f);
for (size_t i = 0; i < list_selector->items.count; ++i) {
- const char *item_text =
- list_selector->list_item_text(
- dynarray_pointer_at(
- &list_selector->items,
- i));
+ const char *item_text = dynarray_pointer_at(
+ &list_selector->items,
+ i);
Rect boundary_box = sprite_font_boundary_box(
vec(0.0f, 0.0f),
Vec2f position = list_selector->position;
for (size_t i = 0; i < list_selector->items.count; ++i) {
- const char *item_text =
- list_selector->list_item_text(
- dynarray_pointer_at(
- &list_selector->items,
- i));
+ const char *item_text = dynarray_pointer_at(
+ &list_selector->items,
+ i);
Rect boundary_box = sprite_font_boundary_box(
position,
vec_add(&position, vec(0.0f, (float) list_selector->cursor * single_item_height));
const char *item_text =
- list_selector->list_item_text(
- dynarray_pointer_at(
- &list_selector->items,
- list_selector->cursor));
+ dynarray_pointer_at(
+ &list_selector->items,
+ list_selector->cursor);
Rect boundary_box = sprite_font_boundary_box(
position,
#include "game/camera.h"
#include "dynarray.h"
-typedef const char *(*ListItemText)(void *element);
-
typedef struct {
Dynarray items;
size_t cursor;
Vec2f position;
Vec2f font_scale;
float padding_bottom;
- ListItemText list_item_text;
} ListSelector;
int list_selector_render(const Camera *camera,