diff --git a/main.c b/main.c index 438627b..6bfc197 100644 --- a/main.c +++ b/main.c @@ -10,7 +10,7 @@ Scene_t *scenes[N_SCENES]; static GameEngine_t engine = { .scenes = scenes, - .max_scenes = 3, + .max_scenes = 4, .curr_scene = 0, .assets = {0} }; @@ -74,9 +74,16 @@ int main(void) MenuScene_t menu_scene; menu_scene.scene.engine = &engine; init_menu_scene(&menu_scene); + + LevelSelectScene_t level_sel_scene; + level_sel_scene.scene.engine = &engine; + level_sel_scene.data.level_pack = pack; + init_level_select_scene(&level_sel_scene); + scenes[0] = &menu_scene.scene; - scenes[1] = &level_scene.scene; - scenes[2] = &sandbox_scene.scene; + scenes[1] = &level_sel_scene.scene; + scenes[2] = &level_scene.scene; + scenes[3] = &sandbox_scene.scene; change_scene(&engine, 0); const float DT = 1.0f/60.0f; diff --git a/scenes/level_select_scene.c b/scenes/level_select_scene.c index 86ae542..910bfa1 100644 --- a/scenes/level_select_scene.c +++ b/scenes/level_select_scene.c @@ -57,13 +57,27 @@ void init_level_select_scene(LevelSelectScene_t* scene) scene->data.scroll = 400; scene->data.level_display = LoadRenderTexture(300, 800); const unsigned int n_elems = 800 / (12+3); + char buf[32]; BeginTextureMode(scene->data.level_display); ClearBackground(GRAY); - for (unsigned int i = 0; i < n_elems; ++i) + if (scene->data.level_pack != NULL) { - char buf[32]; - sprintf(buf, "Level %u", i); - DrawText(buf, 0, (12+3) * i, 12, BLACK); + for (unsigned int i = 0; i < scene->data.level_pack->n_levels; ++i) + { + DrawText(scene->data.level_pack->levels[i].level_name, 0, (12+3) * i, 12, BLACK); + } + for (unsigned int i = scene->data.level_pack->n_levels; i < n_elems; ++i) + { + DrawText("---", 0, (12+3) * i, 12, BLACK); + } + } + else + { + for (unsigned int i = 0; i < n_elems; ++i) + { + sprintf(buf, "Level %u", i); + DrawText(buf, 0, (12+3) * i, 12, BLACK); + } } EndTextureMode(); diff --git a/scenes/scene_impl.h b/scenes/scene_impl.h index 63b068a..40eb556 100644 --- a/scenes/scene_impl.h +++ b/scenes/scene_impl.h @@ -89,6 +89,7 @@ typedef struct MenuScene { typedef struct LevelSelectSceneData { RenderTexture2D level_display; float scroll; + LevelPack_t* level_pack; } LevelSelectSceneData_t; typedef struct LevelSelectScene {