feat(menu): submenú "Jugabilitat" al menú de servei amb tres toggles

Nou apartat al ServiceMenu (entre Controls i Sistema) amb tres toggles
ON/OFF connectats a GameplayConfig: látec travessa sarcs, foc amic,
col·lisió entre jugadors. Cada canvi crida save() immediatament, així
l'estat persisteix entre sessions sense necessitat de "aplicar".

Locales ca/en: claus `tweaks` + tres `menu.items.*` corresponents.
This commit is contained in:
JailDesigner committed 2026-05-08 13:29:04 +02:00
1 parent 3635cebf25
commit e25ccd02fd
4 files changed
+50

No files matched your search

+39
View File
@@ -17,6 +17,7 @@
#include "core/rendering/text.hpp"
#include "core/system/event_buffer.hpp"
#include "core/ui/ui_config.hpp"
#include "game/gameplay_config.hpp"
#include "game/options.hpp"
#include "game/options_apply.hpp"
#include "utils/defaults.hpp"
@@ -692,6 +693,8 @@ auto ServiceMenu::buildRoot() -> Page {
[]() { ServiceMenu::get().pushPage(buildAudio()); }));
page.items.push_back(makeSubmenu("menu.items.controls_submenu",
[]() { ServiceMenu::get().pushPage(buildControls()); }));
page.items.push_back(makeSubmenu("menu.items.tweaks_submenu",
[]() { ServiceMenu::get().pushPage(buildTweaks()); }));
page.items.push_back(makeSubmenu("menu.items.system_submenu",
[]() { ServiceMenu::get().pushPage(buildSystem()); }));
return page;
@@ -1155,6 +1158,42 @@ void ServiceMenu::startDefineButtons(SDL_Gamepad* pad, const std::string& name,
define_buttons_.enable(pad, name, path);
}
auto ServiceMenu::buildTweaks() -> Page {
// Submenú "Tweaks" — flags de jugabilitat persistits a `gameplay.yaml`
// dins la carpeta de sistema. Cada toggle muta `GameplayConfig` i
// n'invoca `save()` immediatament: l'usuari veu el canvi reflectit al
// joc sense esperar a un "aplicar" i, si tanca el joc, torna en el
// mateix estat. Tres toggles ON/OFF, sense estat addicional.
Page page;
page.title_key = "menu.titles.tweaks";
page.items.push_back(makeToggle(
"menu.items.whip_pierces_walls",
[]() { return GameplayConfig::get().whipDamagePiercesWalls(); },
[](bool v) {
GameplayConfig::get().setWhipDamagePiercesWalls(v);
GameplayConfig::get().save();
}));
page.items.push_back(makeToggle(
"menu.items.friendly_fire",
[]() { return GameplayConfig::get().friendlyFire(); },
[](bool v) {
GameplayConfig::get().setFriendlyFire(v);
GameplayConfig::get().save();
}));
page.items.push_back(makeToggle(
"menu.items.players_collide",
[]() { return GameplayConfig::get().playersCollide(); },
[](bool v) {
GameplayConfig::get().setPlayersCollide(v);
GameplayConfig::get().save();
}));
return page;
}
auto ServiceMenu::buildSystem() -> Page {
Page page;
page.title_key = "menu.titles.system";
+1
View File
@@ -253,6 +253,7 @@ class ServiceMenu {
[[nodiscard]] static auto buildKeyboardControls() -> Page;
[[nodiscard]] static auto buildGamepadControls() -> Page;
[[nodiscard]] static auto buildSystem() -> Page;
[[nodiscard]] static auto buildTweaks() -> Page;
// Helpers privats d'items de vídeo: aïllen la lògica de
// `shader_type` i `preset` fora de `buildVideo` perquè no exploti la