feat(menu): teclat amb submenú per jugador

This commit is contained in:
JailDesigner committed 2026-05-14 10:29:34 +02:00
1 parent 4daeb0e15c
commit bc5a6abf53
2 files changed
+26 -17

No files matched your search

+25 -17
View File
@@ -946,29 +946,37 @@ auto ServiceMenu::makeKeyboardItem(const std::string& label_key, int player_id,
}
auto ServiceMenu::buildKeyboardControls() -> Page {
// Hub amb una pàgina per jugador. Trenquem la pàgina única antiga
// perquè 12 keybinds + 2 labels feien la llista massa alta per al
// canvas. El títol de cada subpàgina (`menu.labels.player_N`) ja
// identifica el jugador, així que dins la subpàgina no posem la
// label "Jugador X" — seria redundant.
Page page;
page.title_key = "menu.titles.keyboard";
page.items.push_back(makeSubmenu("menu.labels.player_1",
[]() { ServiceMenu::get().pushPage(buildKeyboardControlsForPlayer(0)); }));
page.items.push_back(makeSubmenu("menu.labels.player_2",
[]() { ServiceMenu::get().pushPage(buildKeyboardControlsForPlayer(1)); }));
return page;
}
auto ServiceMenu::buildKeyboardControlsForPlayer(int player_id) -> Page {
Page page;
// Reutilitzem la clau `labels.player_N` també com a títol de la
// pàgina perquè ja conté el text correcte ("Jugador 1"/"Jugador 2");
// així evitem duplicar strings al locale.
page.title_key = (player_id == 0) ? "menu.labels.player_1" : "menu.labels.player_2";
using KA = Options::KeyboardAction;
const auto AS_U8 = [](KA k) { return static_cast<std::uint8_t>(k); };
// Bloc del jugador 1. Ordre: moviment → atacar → saltar.
page.items.push_back(makeLabel(Locale::get().text("menu.labels.player_1")));
page.items.push_back(makeKeyboardItem("menu.items.move_up", 0, AS_U8(KA::UP)));
page.items.push_back(makeKeyboardItem("menu.items.move_down", 0, AS_U8(KA::DOWN)));
page.items.push_back(makeKeyboardItem("menu.items.move_left", 0, AS_U8(KA::LEFT)));
page.items.push_back(makeKeyboardItem("menu.items.move_right", 0, AS_U8(KA::RIGHT)));
page.items.push_back(makeKeyboardItem("menu.items.attack", 0, AS_U8(KA::ATTACK)));
page.items.push_back(makeKeyboardItem("menu.items.jump", 0, AS_U8(KA::JUMP)));
// Bloc del jugador 2.
page.items.push_back(makeLabel(Locale::get().text("menu.labels.player_2")));
page.items.push_back(makeKeyboardItem("menu.items.move_up", 1, AS_U8(KA::UP)));
page.items.push_back(makeKeyboardItem("menu.items.move_down", 1, AS_U8(KA::DOWN)));
page.items.push_back(makeKeyboardItem("menu.items.move_left", 1, AS_U8(KA::LEFT)));
page.items.push_back(makeKeyboardItem("menu.items.move_right", 1, AS_U8(KA::RIGHT)));
page.items.push_back(makeKeyboardItem("menu.items.attack", 1, AS_U8(KA::ATTACK)));
page.items.push_back(makeKeyboardItem("menu.items.jump", 1, AS_U8(KA::JUMP)));
// Ordre: moviment → atacar → saltar.
page.items.push_back(makeKeyboardItem("menu.items.move_up", player_id, AS_U8(KA::UP)));
page.items.push_back(makeKeyboardItem("menu.items.move_down", player_id, AS_U8(KA::DOWN)));
page.items.push_back(makeKeyboardItem("menu.items.move_left", player_id, AS_U8(KA::LEFT)));
page.items.push_back(makeKeyboardItem("menu.items.move_right", player_id, AS_U8(KA::RIGHT)));
page.items.push_back(makeKeyboardItem("menu.items.attack", player_id, AS_U8(KA::ATTACK)));
page.items.push_back(makeKeyboardItem("menu.items.jump", player_id, AS_U8(KA::JUMP)));
return page;
}
+1
View File
@@ -251,6 +251,7 @@ class ServiceMenu {
[[nodiscard]] static auto buildAudio() -> Page;
[[nodiscard]] static auto buildControls() -> Page;
[[nodiscard]] static auto buildKeyboardControls() -> Page;
[[nodiscard]] static auto buildKeyboardControlsForPlayer(int player_id) -> Page;
[[nodiscard]] static auto buildGamepadControls() -> Page;
[[nodiscard]] static auto buildSystem() -> Page;
[[nodiscard]] static auto buildTweaks() -> Page;