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:
1 parent
3635cebf25
commit
e25ccd02fd
4 files changed
+50
No files matched your search
@@ -62,6 +62,7 @@ menu:
|
||||
controls: "Controls"
|
||||
keyboard: "Teclat"
|
||||
gamepad: "Comandament"
|
||||
tweaks: "Jugabilitat"
|
||||
system: "Sistema"
|
||||
labels:
|
||||
player_1: "Jugador 1"
|
||||
@@ -73,6 +74,7 @@ menu:
|
||||
controls_submenu: "Controls"
|
||||
keyboard_submenu: "Teclat"
|
||||
gamepad_submenu: "Comandament"
|
||||
tweaks_submenu: "Jugabilitat"
|
||||
system_submenu: "Sistema"
|
||||
move_up: "Amunt"
|
||||
move_down: "Avall"
|
||||
@@ -101,6 +103,9 @@ menu:
|
||||
music_volume: "Volum música"
|
||||
sounds: "Sons"
|
||||
sounds_volume: "Volum sons"
|
||||
whip_pierces_walls: "Látec travessa sarcs"
|
||||
friendly_fire: "Foc amic"
|
||||
players_collide: "Col·lisió entre jugadors"
|
||||
restart: "Reiniciar"
|
||||
exit_game: "Eixir del joc"
|
||||
values:
|
||||
|
||||
@@ -61,6 +61,7 @@ menu:
|
||||
controls: "Controls"
|
||||
keyboard: "Keyboard"
|
||||
gamepad: "Gamepad"
|
||||
tweaks: "Gameplay"
|
||||
system: "System"
|
||||
labels:
|
||||
player_1: "Player 1"
|
||||
@@ -72,6 +73,7 @@ menu:
|
||||
controls_submenu: "Controls"
|
||||
keyboard_submenu: "Keyboard"
|
||||
gamepad_submenu: "Gamepad"
|
||||
tweaks_submenu: "Gameplay"
|
||||
system_submenu: "System"
|
||||
move_up: "Up"
|
||||
move_down: "Down"
|
||||
@@ -100,6 +102,9 @@ menu:
|
||||
music_volume: "Music volume"
|
||||
sounds: "Sounds"
|
||||
sounds_volume: "Sound volume"
|
||||
whip_pierces_walls: "Whip pierces sarcs"
|
||||
friendly_fire: "Friendly fire"
|
||||
players_collide: "Player collision"
|
||||
restart: "Restart"
|
||||
exit_game: "Exit game"
|
||||
values:
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in new issue
Block a user