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"
|
controls: "Controls"
|
||||||
keyboard: "Teclat"
|
keyboard: "Teclat"
|
||||||
gamepad: "Comandament"
|
gamepad: "Comandament"
|
||||||
|
tweaks: "Jugabilitat"
|
||||||
system: "Sistema"
|
system: "Sistema"
|
||||||
labels:
|
labels:
|
||||||
player_1: "Jugador 1"
|
player_1: "Jugador 1"
|
||||||
@@ -73,6 +74,7 @@ menu:
|
|||||||
controls_submenu: "Controls"
|
controls_submenu: "Controls"
|
||||||
keyboard_submenu: "Teclat"
|
keyboard_submenu: "Teclat"
|
||||||
gamepad_submenu: "Comandament"
|
gamepad_submenu: "Comandament"
|
||||||
|
tweaks_submenu: "Jugabilitat"
|
||||||
system_submenu: "Sistema"
|
system_submenu: "Sistema"
|
||||||
move_up: "Amunt"
|
move_up: "Amunt"
|
||||||
move_down: "Avall"
|
move_down: "Avall"
|
||||||
@@ -101,6 +103,9 @@ menu:
|
|||||||
music_volume: "Volum música"
|
music_volume: "Volum música"
|
||||||
sounds: "Sons"
|
sounds: "Sons"
|
||||||
sounds_volume: "Volum sons"
|
sounds_volume: "Volum sons"
|
||||||
|
whip_pierces_walls: "Látec travessa sarcs"
|
||||||
|
friendly_fire: "Foc amic"
|
||||||
|
players_collide: "Col·lisió entre jugadors"
|
||||||
restart: "Reiniciar"
|
restart: "Reiniciar"
|
||||||
exit_game: "Eixir del joc"
|
exit_game: "Eixir del joc"
|
||||||
values:
|
values:
|
||||||
|
|||||||
@@ -61,6 +61,7 @@ menu:
|
|||||||
controls: "Controls"
|
controls: "Controls"
|
||||||
keyboard: "Keyboard"
|
keyboard: "Keyboard"
|
||||||
gamepad: "Gamepad"
|
gamepad: "Gamepad"
|
||||||
|
tweaks: "Gameplay"
|
||||||
system: "System"
|
system: "System"
|
||||||
labels:
|
labels:
|
||||||
player_1: "Player 1"
|
player_1: "Player 1"
|
||||||
@@ -72,6 +73,7 @@ menu:
|
|||||||
controls_submenu: "Controls"
|
controls_submenu: "Controls"
|
||||||
keyboard_submenu: "Keyboard"
|
keyboard_submenu: "Keyboard"
|
||||||
gamepad_submenu: "Gamepad"
|
gamepad_submenu: "Gamepad"
|
||||||
|
tweaks_submenu: "Gameplay"
|
||||||
system_submenu: "System"
|
system_submenu: "System"
|
||||||
move_up: "Up"
|
move_up: "Up"
|
||||||
move_down: "Down"
|
move_down: "Down"
|
||||||
@@ -100,6 +102,9 @@ menu:
|
|||||||
music_volume: "Music volume"
|
music_volume: "Music volume"
|
||||||
sounds: "Sounds"
|
sounds: "Sounds"
|
||||||
sounds_volume: "Sound volume"
|
sounds_volume: "Sound volume"
|
||||||
|
whip_pierces_walls: "Whip pierces sarcs"
|
||||||
|
friendly_fire: "Friendly fire"
|
||||||
|
players_collide: "Player collision"
|
||||||
restart: "Restart"
|
restart: "Restart"
|
||||||
exit_game: "Exit game"
|
exit_game: "Exit game"
|
||||||
values:
|
values:
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
#include "core/rendering/text.hpp"
|
#include "core/rendering/text.hpp"
|
||||||
#include "core/system/event_buffer.hpp"
|
#include "core/system/event_buffer.hpp"
|
||||||
#include "core/ui/ui_config.hpp"
|
#include "core/ui/ui_config.hpp"
|
||||||
|
#include "game/gameplay_config.hpp"
|
||||||
#include "game/options.hpp"
|
#include "game/options.hpp"
|
||||||
#include "game/options_apply.hpp"
|
#include "game/options_apply.hpp"
|
||||||
#include "utils/defaults.hpp"
|
#include "utils/defaults.hpp"
|
||||||
@@ -692,6 +693,8 @@ auto ServiceMenu::buildRoot() -> Page {
|
|||||||
[]() { ServiceMenu::get().pushPage(buildAudio()); }));
|
[]() { ServiceMenu::get().pushPage(buildAudio()); }));
|
||||||
page.items.push_back(makeSubmenu("menu.items.controls_submenu",
|
page.items.push_back(makeSubmenu("menu.items.controls_submenu",
|
||||||
[]() { ServiceMenu::get().pushPage(buildControls()); }));
|
[]() { 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",
|
page.items.push_back(makeSubmenu("menu.items.system_submenu",
|
||||||
[]() { ServiceMenu::get().pushPage(buildSystem()); }));
|
[]() { ServiceMenu::get().pushPage(buildSystem()); }));
|
||||||
return page;
|
return page;
|
||||||
@@ -1155,6 +1158,42 @@ void ServiceMenu::startDefineButtons(SDL_Gamepad* pad, const std::string& name,
|
|||||||
define_buttons_.enable(pad, name, path);
|
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 {
|
auto ServiceMenu::buildSystem() -> Page {
|
||||||
Page page;
|
Page page;
|
||||||
page.title_key = "menu.titles.system";
|
page.title_key = "menu.titles.system";
|
||||||
|
|||||||
@@ -253,6 +253,7 @@ class ServiceMenu {
|
|||||||
[[nodiscard]] static auto buildKeyboardControls() -> Page;
|
[[nodiscard]] static auto buildKeyboardControls() -> Page;
|
||||||
[[nodiscard]] static auto buildGamepadControls() -> Page;
|
[[nodiscard]] static auto buildGamepadControls() -> Page;
|
||||||
[[nodiscard]] static auto buildSystem() -> Page;
|
[[nodiscard]] static auto buildSystem() -> Page;
|
||||||
|
[[nodiscard]] static auto buildTweaks() -> Page;
|
||||||
|
|
||||||
// Helpers privats d'items de vídeo: aïllen la lògica de
|
// Helpers privats d'items de vídeo: aïllen la lògica de
|
||||||
// `shader_type` i `preset` fora de `buildVideo` perquè no exploti la
|
// `shader_type` i `preset` fora de `buildVideo` perquè no exploti la
|
||||||
|
|||||||
Reference in new issue
Block a user