feat(menu): teclat amb submenú per jugador
This commit is contained in:
1 parent
4daeb0e15c
commit
bc5a6abf53
2 files changed
+26
-17
No files matched your search
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in new issue
Block a user