diff --git a/mario/maploader.cpp b/mario/maploader.cpp index 7463070..d94b860 100644 --- a/mario/maploader.cpp +++ b/mario/maploader.cpp @@ -96,6 +96,10 @@ MapObject parseBlock(std::ifstream &map_file) { modifier_id, modifier_data); } +void loadEmptyMap( std::vector &objects, size_t editor_width) { + objects.resize(editor_width); +} + // editor loader // TODO catch exception in calling functions void loadMap(std::shared_ptr &scene, @@ -104,7 +108,7 @@ void loadMap(std::shared_ptr &scene, bool editor, size_t editor_width) { if(!FSLib::exists(file)) { // create empty array large enough for initial editor window - objects.resize(editor_width); + loadEmptyMap(objects, editor_width); return; } auto renderer = scene->getRendererShared(); diff --git a/mario/maploader.hpp b/mario/maploader.hpp index 0a67419..ed31ba2 100644 --- a/mario/maploader.hpp +++ b/mario/maploader.hpp @@ -14,6 +14,7 @@ void loadMap(std::shared_ptr &scene, std::shared_ptr &mario, const std::string &file, std::vector &objects, bool editor = false, size_t editor_width = 0); +void loadEmptyMap( std::vector &objects, size_t editor_width); void saveMap(const std::string &file, std::vector &objects); #endif diff --git a/mario/scenes/editor_main.cpp b/mario/scenes/editor_main.cpp index 5d8e2e0..953fe75 100644 --- a/mario/scenes/editor_main.cpp +++ b/mario/scenes/editor_main.cpp @@ -35,6 +35,7 @@ #define MOD_RIGHT_ENABLED_FLAG 0x00000080 #define CHARACTER_LEFT_ENABLED_FLAG 0x00000100 #define CHARACTER_RIGHT_ENABLED_FLAG 0x00000200 +#define LOAD_MAP_FLAG 0x00000400 #define TOOLS_WIDTH 4 #define CHARACTER_WIDTH 3 @@ -114,11 +115,37 @@ struct moveStruct { GlobalVars global_vars; std::mutex render_mutex; -int click_num = 0; std::vector arrowInputs{}; +std::shared_ptr editorScene; SceneStruct mainMenuScene; //SceneStruct fileChoiceScene; +void openMapEditor(std::shared_ptr &scene, const std::string &filename); + +void setFlag(uint64_t flag) { + global_vars.flags |= flag; +} +void unsetFlag(uint64_t flag) { + global_vars.flags &= ~flag; +} +bool getFlag(uint64_t flag) { + return global_vars.flags & flag; +} + +void saveMapCallback(void */*UNUSED*/, Button */*UNUSED*/) { + std::cout << "SAVING" << std::endl; + // TODO filename + saveMap("test_binary2.bin", global_vars.objects); +} + +void loadMapDialogCallback(void */*UNUSED*/, Button */*UNUSED*/) { + std::cout << "LOADING" << std::endl; + setFlag(LOAD_MAP_FLAG); + // TODO filename +/* editorScene->resetScene(); + openMapEditor(editorScene, "test_binary.bin");*/ +} + void updateTool() { auto tool_index = global_vars.tool.index; uint64_t tool_id = 0; @@ -468,16 +495,6 @@ void selectNextTool() { updateToolIndex(global_vars.tool.index + addition); } -void setFlag(uint64_t flag) { - global_vars.flags |= flag; -} -void unsetFlag(uint64_t flag) { - global_vars.flags &= ~flag; -} -bool getFlag(uint64_t flag) { - return global_vars.flags & flag; -} - void updateWorld() { for (auto &block : global_vars.tools) { block->setType(global_vars.current_world_type); @@ -857,6 +874,9 @@ void populateToolGrid( std::vector> &tool_box_store, std::shared_ptr &scene, const std::string &title, const std::shared_ptr &font_config) { + tool_store.clear(); + tool_box_store.clear(); + auto renderer = scene->getRendererShared(); for (int j = 0; j < count_y; j++) { for (int i = 0; i < count_x; i++) { @@ -952,11 +972,11 @@ void testButtonFunc(void *input, Button *caller) { caller->disable(); } -std::shared_ptr createEditorMainScene(std::shared_ptr &renderer) { +void openMapEditor(std::shared_ptr &scene, const std::string &filename) { + auto renderer = scene->getRendererShared(); auto font = std::make_shared("testfont.ttf", 36); auto font_config = std::make_shared( font, "#000000", "#282828", 0.05); - auto scene = std::make_shared(renderer); auto bg = std::make_shared( 0, 0, 10, 10, renderer, MARIO_OVERWORLD_COLORKEY, true); bg->setPermanent(); @@ -965,50 +985,14 @@ std::shared_ptr createEditorMainScene(std::shared_ptr( - 0, 1 - MAP_HEIGHT * BLOCK_SIZE, BLOCK_SIZE, MAP_HEIGHT * BLOCK_SIZE, - renderer, "<", default_button_theme, moveMapLeft, &left_map_input)); - global_vars.buttons.back()->setAlignment(SDLPP::OBJ_CENTER, SDLPP::OBJ_CENTER); - global_vars.buttons.back()->setPermanent(); - global_vars.buttons.back()->setButtonIndex(global_vars.buttons.size() - 1); - // right map arrow - auto &right_map_input = arrowInputs[1]; - right_map_input.scene = scene; - right_map_input.other_button = global_vars.buttons.back(); - global_vars.buttons.emplace_back(std::make_shared