feat(service-menu): pobla OPCIONS amb idioma i toggle del HUD de debug
This commit is contained in:
@@ -15,6 +15,7 @@
|
||||
#include "core/defaults/service_menu.hpp"
|
||||
#include "core/locale/locale.hpp"
|
||||
#include "core/rendering/sdl_manager.hpp"
|
||||
#include "core/system/debug_overlay.hpp"
|
||||
#include "core/types.hpp"
|
||||
#include "game/config_yaml.hpp"
|
||||
|
||||
@@ -55,8 +56,8 @@ namespace System {
|
||||
|
||||
std::unique_ptr<ServiceMenu> ServiceMenu::instance;
|
||||
|
||||
void ServiceMenu::init(Rendering::Renderer* renderer, SDLManager* sdl) {
|
||||
instance.reset(new ServiceMenu(renderer, sdl));
|
||||
void ServiceMenu::init(Rendering::Renderer* renderer, SDLManager* sdl, DebugOverlay* debug_overlay) {
|
||||
instance.reset(new ServiceMenu(renderer, sdl, debug_overlay));
|
||||
}
|
||||
|
||||
void ServiceMenu::destroy() {
|
||||
@@ -67,9 +68,10 @@ namespace System {
|
||||
return instance.get();
|
||||
}
|
||||
|
||||
ServiceMenu::ServiceMenu(Rendering::Renderer* renderer, SDLManager* sdl)
|
||||
ServiceMenu::ServiceMenu(Rendering::Renderer* renderer, SDLManager* sdl, DebugOverlay* debug_overlay)
|
||||
: renderer_(renderer),
|
||||
sdl_(sdl),
|
||||
debug_overlay_(debug_overlay),
|
||||
text_(renderer) {}
|
||||
|
||||
auto ServiceMenu::isOpen() const -> bool {
|
||||
@@ -118,7 +120,7 @@ namespace System {
|
||||
root.items = {
|
||||
makeSubmenu("service_menu.video", [this] { pushPage(buildVideoPage()); }),
|
||||
makeSubmenu("service_menu.audio", [this] { pushPage(buildAudioPage()); }),
|
||||
makeSubmenu("service_menu.options", [this] { pushSubmenuPlaceholder("service_menu.options"); }),
|
||||
makeSubmenu("service_menu.options", [this] { pushPage(buildOptionsPage()); }),
|
||||
makeSubmenu("service_menu.system", [this] { pushSubmenuPlaceholder("service_menu.system"); }),
|
||||
};
|
||||
stack_.clear();
|
||||
@@ -304,6 +306,46 @@ namespace System {
|
||||
return page;
|
||||
}
|
||||
|
||||
auto ServiceMenu::buildOptionsPage() const -> Page {
|
||||
auto on_off_text = [](bool v) -> std::string {
|
||||
return Locale::get().text(v ? "service_menu.value_on" : "service_menu.value_off");
|
||||
};
|
||||
|
||||
DebugOverlay* debug = debug_overlay_;
|
||||
|
||||
Page page;
|
||||
page.title_key = "service_menu.options";
|
||||
page.items = {
|
||||
// IDIOMA (cycle entre ca i en, mateix codi que F7).
|
||||
Item{
|
||||
.kind = Kind::CYCLE,
|
||||
.label_key = "service_menu.options_language",
|
||||
.selectable = true,
|
||||
.on_activate = {},
|
||||
.get_value_text = [] { return Locale::get().text("language." + ConfigYaml::engine_config.locale); },
|
||||
.on_change = [](int) {
|
||||
const std::string NEW_LANG = (ConfigYaml::engine_config.locale == "ca") ? "en" : "ca";
|
||||
if (Locale::get().switchTo(NEW_LANG)) {
|
||||
ConfigYaml::engine_config.locale = NEW_LANG;
|
||||
ConfigYaml::saveToFile();
|
||||
} },
|
||||
},
|
||||
// MOSTRAR INFO (debug overlay, equivalent a F11).
|
||||
Item{
|
||||
.kind = Kind::TOGGLE,
|
||||
.label_key = "service_menu.options_show_info",
|
||||
.selectable = true,
|
||||
.on_activate = {},
|
||||
.get_value_text = [debug, on_off_text] { return on_off_text(debug != nullptr && debug->isVisible()); },
|
||||
.on_change = [debug](int) {
|
||||
if (debug != nullptr) {
|
||||
debug->toggle();
|
||||
} },
|
||||
},
|
||||
};
|
||||
return page;
|
||||
}
|
||||
|
||||
void ServiceMenu::pushPage(Page page) {
|
||||
stack_.push_back(std::move(page));
|
||||
// El cursor salta a una pagina nova: enganxem el highlight per a
|
||||
|
||||
Reference in New Issue
Block a user