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 {
|
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 page;
|
||||||
page.title_key = "menu.titles.keyboard";
|
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;
|
using KA = Options::KeyboardAction;
|
||||||
const auto AS_U8 = [](KA k) { return static_cast<std::uint8_t>(k); };
|
const auto AS_U8 = [](KA k) { return static_cast<std::uint8_t>(k); };
|
||||||
|
|
||||||
// Bloc del jugador 1. Ordre: moviment → atacar → saltar.
|
// 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", player_id, AS_U8(KA::UP)));
|
||||||
page.items.push_back(makeKeyboardItem("menu.items.move_up", 0, 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_down", 0, 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_left", 0, 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.move_right", 0, 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.attack", 0, AS_U8(KA::ATTACK)));
|
page.items.push_back(makeKeyboardItem("menu.items.jump", player_id, AS_U8(KA::JUMP)));
|
||||||
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)));
|
|
||||||
|
|
||||||
return page;
|
return page;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -251,6 +251,7 @@ class ServiceMenu {
|
|||||||
[[nodiscard]] static auto buildAudio() -> Page;
|
[[nodiscard]] static auto buildAudio() -> Page;
|
||||||
[[nodiscard]] static auto buildControls() -> Page;
|
[[nodiscard]] static auto buildControls() -> Page;
|
||||||
[[nodiscard]] static auto buildKeyboardControls() -> Page;
|
[[nodiscard]] static auto buildKeyboardControls() -> Page;
|
||||||
|
[[nodiscard]] static auto buildKeyboardControlsForPlayer(int player_id) -> 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;
|
[[nodiscard]] static auto buildTweaks() -> Page;
|
||||||
|
|||||||
Reference in new issue
Block a user