From 4477c39524e45e491adb0e64ba4da7930d2fface Mon Sep 17 00:00:00 2001 From: zv0n Date: Sun, 24 Jul 2022 20:22:45 +0200 Subject: [PATCH] Mario Editor: add option to select a level to load --- mario/CMakeLists.txt | 1 + mario/scenes/editor_main.cpp | 26 +-- mario/scenes/editor_main_menu.cpp | 13 +- mario/scenes/editor_scenes.hpp | 5 +- mario/scenes/load_scene.cpp | 268 ++++++++++++++++++++++++++++++ 5 files changed, 301 insertions(+), 12 deletions(-) create mode 100644 mario/scenes/load_scene.cpp diff --git a/mario/CMakeLists.txt b/mario/CMakeLists.txt index b6fc679..8110c77 100644 --- a/mario/CMakeLists.txt +++ b/mario/CMakeLists.txt @@ -92,6 +92,7 @@ target_sources(editor PRIVATE scenes/editor_main_menu.cpp PRIVATE scenes/yes_no_scene.cpp PRIVATE scenes/ok_scene.cpp + PRIVATE scenes/load_scene.cpp ) target_compile_definitions(editor PUBLIC EDITOR) diff --git a/mario/scenes/editor_main.cpp b/mario/scenes/editor_main.cpp index 2f58fb8..0d50f30 100644 --- a/mario/scenes/editor_main.cpp +++ b/mario/scenes/editor_main.cpp @@ -13,6 +13,7 @@ #include "../blocks/coineditorblock.hpp" #include #include +#include "../filesystem.hpp" #ifdef _WIN32 #include "../sdlpp/SDL2/SDL2_framerate.h" @@ -46,6 +47,8 @@ #define MOD_WIDTH 2 #define OVERWORLD_WIDTH 2 +const std::string levelsDir = "levels"; + struct ToolType { enum Value { BLOCK, @@ -142,12 +145,14 @@ bool getFlag(uint64_t flag) { void saveMapCallback(void * /*UNUSED*/, Button * /*UNUSED*/) { std::cout << "SAVING" << std::endl; - saveMap("levels/" + level_name_text + ".marmap", global_vars.objects); + saveMap(levelsDir + FSLib::dir_divisor + level_name_text + ".marmap", + global_vars.objects); } - -void loadMapDialogCallback(void * /*UNUSED*/, Button * /*UNUSED*/) { +void loadMapDialogCallback(const std::string &level_name) { std::cout << "LOADING" << std::endl; + level_name_text = level_name.substr(0, level_name.length() - 7); setFlag(LOAD_MAP_FLAG); + setFlag(TEXT_UPDATE_FLAG); } void updateTool() { @@ -1023,7 +1028,7 @@ void populateWorldType( scene->addObject(tool_text); } -void enableTextInput(void */*UNUSED*/, Button */*UNUSED*/) { +void enableTextInput(void * /*UNUSED*/, Button * /*UNUSED*/) { setFlag(TEXT_INPUT_FLAG); SDL_StartTextInput(); } @@ -1042,11 +1047,11 @@ void openMapEditor(std::shared_ptr &scene, global_vars.current_world_type = LandType::OVERWORLD; - if (filename.empty()) { + if (filename.empty() || !FSLib::exists(filename)) { loadEmptyMap(global_vars.objects, MAP_WIDTH); } else { - loadMap(scene, global_vars.mario, "test_binary.bin", - global_vars.objects, true, MAP_WIDTH); + loadMap(scene, global_vars.mario, filename, global_vars.objects, true, + MAP_WIDTH); } // map @@ -1146,7 +1151,8 @@ void openMapEditor(std::shared_ptr &scene, // level_name label auto level_name_label = std::make_shared( - 0.1, 0.1, BLOCK_SIZE * 8, 0.05, renderer, "Level Name:", font_config, SDLPP_TEXT_LEFT); + 0.1, 0.1, BLOCK_SIZE * 8, 0.05, renderer, "Level Name:", font_config, + SDLPP_TEXT_LEFT); level_name_label->setAlignment(SDLPP::OBJ_CENTER, SDLPP::OBJ_CENTER); level_name_label->setPermanent(); scene->addObject(level_name_label); @@ -1335,9 +1341,9 @@ void editorAdditionalRender(std::shared_ptr &scene) { unsetFlag(UPDATE_FLAG); } if (getFlag(LOAD_MAP_FLAG)) { - // TODO filename editorScene->resetScene(); - openMapEditor(editorScene, "test_binary.bin"); + openMapEditor(editorScene, levelsDir + FSLib::dir_divisor + + level_name_text + ".marmap"); unsetFlag(LOAD_MAP_FLAG); } if (getFlag(TEXT_UPDATE_FLAG)) { diff --git a/mario/scenes/editor_main_menu.cpp b/mario/scenes/editor_main_menu.cpp index 99e3178..584a436 100644 --- a/mario/scenes/editor_main_menu.cpp +++ b/mario/scenes/editor_main_menu.cpp @@ -29,6 +29,17 @@ void resumeMainMenuCallback(void * /*UNUSED*/, Button * /*UNUSED*/) { resumeMainMenu(); } +void loadFinished(const std::string level_name) { + __quit_scenes_main_menu = true; + loadMapDialogCallback(level_name); +} + +void showLoadMenu(void */*UNUSED*/, Button */*UNUSED*/) { + // TODO levels + auto loadMenu = createLoadScene(__buttons_main_menu.back()->getRenderer(), "levels", loadFinished); + game_scenes.push_back(loadMenu); +} + void __updateSelectedButton_MainMenu(uint64_t new_index) { if (new_index != __cur_button_index_main_menu && new_index != (uint64_t)-1) { @@ -120,7 +131,7 @@ createSceneMainMenu(std::shared_ptr &renderer) { __buttons_main_menu.back()->setButtonIndex(__buttons_main_menu.size() - 1); __buttons_main_menu.emplace_back(std::make_shared