From ab6dcccbac33bf351ca467b2b8ccb3d6f0562858 Mon Sep 17 00:00:00 2001 From: zv0n Date: Fri, 22 Jul 2022 12:55:09 +0200 Subject: [PATCH] Mario: OK dialog --- mario/CMakeLists.txt | 1 + mario/scenes/editor_main.cpp | 20 +++- mario/scenes/editor_scenes.hpp | 3 + mario/scenes/ok_scene.cpp | 175 +++++++++++++++++++++++++++++++++ 4 files changed, 194 insertions(+), 5 deletions(-) create mode 100644 mario/scenes/ok_scene.cpp diff --git a/mario/CMakeLists.txt b/mario/CMakeLists.txt index a93250c..b6fc679 100644 --- a/mario/CMakeLists.txt +++ b/mario/CMakeLists.txt @@ -91,6 +91,7 @@ target_sources(editor PRIVATE scenes/editor_main.cpp PRIVATE scenes/editor_main_menu.cpp PRIVATE scenes/yes_no_scene.cpp + PRIVATE scenes/ok_scene.cpp ) target_compile_definitions(editor PUBLIC EDITOR) diff --git a/mario/scenes/editor_main.cpp b/mario/scenes/editor_main.cpp index bfdd22e..85400a8 100644 --- a/mario/scenes/editor_main.cpp +++ b/mario/scenes/editor_main.cpp @@ -894,8 +894,10 @@ void pollEvents(std::shared_ptr &scene) { } break; case SDL_TEXTINPUT: - global_test_text_text += event.text.text; - setFlag(TEXT_UPDATE_FLAG); + if (getFlag(TEXT_INPUT_FLAG)) { + global_test_text_text += event.text.text; + setFlag(TEXT_UPDATE_FLAG); + } break; default: break; @@ -1030,10 +1032,18 @@ void dialogFinishedTest(bool result) { setFlag(TEXT_UPDATE_FLAG); } +void okDialogFinalizer() { + global_test_text_text = "You OK'd"; + setFlag(TEXT_UPDATE_FLAG); +} + void testButtonFunc(void * /*UNUSED*/, Button * /*UNUSED*/) { - game_scenes.push_back( - createYesNoScene(game_scenes.back().scene->getRendererShared(), "Yeah?", - dialogFinishedTest)); + /* game_scenes.push_back( + createYesNoScene(game_scenes.back().scene->getRendererShared(), + "Yeah?", dialogFinishedTest));*/ + game_scenes.push_back(createOkScene( + game_scenes.back().scene->getRendererShared(), + "You cannot choose anything other than OK", okDialogFinalizer)); /* setFlag(TEXT_INPUT_FLAG); SDL_StartTextInput();*/ } diff --git a/mario/scenes/editor_scenes.hpp b/mario/scenes/editor_scenes.hpp index ffb858d..0052c91 100644 --- a/mario/scenes/editor_scenes.hpp +++ b/mario/scenes/editor_scenes.hpp @@ -26,5 +26,8 @@ createEditorFileChoiceScene(std::shared_ptr &renderer); SceneStruct createYesNoScene(std::shared_ptr renderer, const std::string &text, std::function finalizer); +SceneStruct createOkScene(std::shared_ptr renderer, + const std::string &text, + std::function finalizer); #endif \ No newline at end of file diff --git a/mario/scenes/ok_scene.cpp b/mario/scenes/ok_scene.cpp new file mode 100644 index 0000000..e197ead --- /dev/null +++ b/mario/scenes/ok_scene.cpp @@ -0,0 +1,175 @@ +#include "SDL2/SDL_keycode.h" +#include "editor_scenes.hpp" +#include "../../sdlpp/sdlpp.hpp" +#include "../../sdlpp/sdlpp_mouse.hpp" +#include "../global_vars.hpp" +#include "../objectids.hpp" +#include "../editor_visitor.hpp" + +bool __update_scenes_ok_dialog = false; +bool __quit_scenes_ok_dialog = false; +bool __started_ok_dialog = false; +uint64_t __cur_button_index_ok_dialog = -1; +uint64_t __cur_button_index_ok_dialog_down = -1; +std::vector> __buttons_ok_dialog{}; +std::shared_ptr __mouse_ok_dialog{}; + +std::function __ok_dialog_finalizer; + +void __quitOkDialog() { + __quit_scenes_ok_dialog = true; +} + +void __quitCallback_OkDialog(void * /*UNUSED*/, Button * /*UNUSED*/) { + __quitOkDialog(); +} + +void __handleKeyUp_OkDialog(SDL_Keycode key, SDLPP::Scene & /*UNUSED*/) { + switch (key) { + case SDLK_ESCAPE: + case SDLK_RETURN: + __quitOkDialog(); + break; + default: + break; + } +} + +std::shared_ptr +createSceneOkDialog(std::shared_ptr &renderer, + const std::string &text) { + auto scene = std::make_shared(renderer); + auto bg = std::make_shared(0, 0, 10, 10, renderer, + "#00000088", true); + bg->setPermanent(); + bg->setId(1); + scene->addObject(bg); + __mouse_ok_dialog = + std::make_shared(0.01, 0.01, 0, 0, renderer); + __mouse_ok_dialog->setMinWidth(1); + __mouse_ok_dialog->setMinHeight(1); + __mouse_ok_dialog->setAlignment(SDLPP::OBJ_CENTER, SDLPP::OBJ_CENTER); + __mouse_ok_dialog->setId(EDITOR_MOUSE_ID); + __mouse_ok_dialog->setColiderColor("#00FF00"); + __mouse_ok_dialog->addCollision(SDLPP::RectColider({ 0, 0 }, { 1, 1 })); + scene->addObject(__mouse_ok_dialog); + + ButtonConfig default_button_theme{}; + default_button_theme.bg_color = "#FFFFFF88"; + default_button_theme.bg_color_highlight = "#FFFFFFBB"; + default_button_theme.bg_color_disabled = "#AAAAAA88"; + default_button_theme.font_color = "#000000"; + default_button_theme.font_color_highlight = "#000000"; + default_button_theme.font_color_disabled = "#555555"; + default_button_theme.font_outline_color = "#FFFFFF88"; + default_button_theme.font_outline_color_highlight = "#FFFFFFAA"; + default_button_theme.font_outline_color_disabled = "#787878"; + default_button_theme.outline = 0.1; + // buttons + __buttons_ok_dialog.emplace_back(std::make_shared