#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_yesno_dialog = false; bool __quit_scenes_yesno_dialog = false; bool __started_yesno_dialog = false; uint64_t __cur_button_index_yesno_dialog = -1; uint64_t __cur_button_index_yesno_dialog_down = -1; std::vector> __buttons_yesno_dialog{}; std::shared_ptr __mouse_yesno_dialog{}; std::function __yesno_dialog_finalizer; void __quitYesNoDialog(bool result = false) { __yesno_dialog_finalizer(result); __quit_scenes_yesno_dialog = true; } void __updateSelectedButton_YesNoDialog(uint64_t new_index) { if (new_index != __cur_button_index_yesno_dialog && new_index != (uint64_t)-1) { __buttons_yesno_dialog[new_index]->setHighlight(); if (__cur_button_index_yesno_dialog != (uint64_t)-1) { __buttons_yesno_dialog[__cur_button_index_yesno_dialog] ->unsetHighlight(); } __cur_button_index_yesno_dialog = new_index; } } void __handleKeyUp_YesNoDialog(SDL_Keycode key, SDLPP::Scene & /*UNUSED*/) { switch (key) { case SDLK_ESCAPE: __quitYesNoDialog(); break; case SDLK_LEFT: case SDLK_a: __updateSelectedButton_YesNoDialog(0); break; case SDLK_RIGHT: case SDLK_d: __updateSelectedButton_YesNoDialog(1); break; case SDLK_RETURN: __quitYesNoDialog(__cur_button_index_yesno_dialog == 0); break; default: break; } } void __returnYesCallback_YesNoDialog(void * /*UNUSED*/, Button * /*UNUSED*/) { __quitYesNoDialog(true); } void __returnNoCallback_YesNoDialog(void * /*UNUSED*/, Button * /*UNUSED*/) { __quitYesNoDialog(false); } std::shared_ptr createSceneYesNoDialog(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_yesno_dialog = std::make_shared(0.01, 0.01, 0, 0, renderer); __mouse_yesno_dialog->setMinWidth(1); __mouse_yesno_dialog->setMinHeight(1); __mouse_yesno_dialog->setAlignment(SDLPP::OBJ_CENTER, SDLPP::OBJ_CENTER); __mouse_yesno_dialog->setId(EDITOR_MOUSE_ID); __mouse_yesno_dialog->setColiderColor("#00FF00"); __mouse_yesno_dialog->addCollision(SDLPP::RectColider({ 0, 0 }, { 1, 1 })); scene->addObject(__mouse_yesno_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_yesno_dialog.emplace_back(std::make_shared