menu.inputMap
The scheme a **card** is driven with — the title, how-to-play, the pause slab and the two end cards. Live only while a card is on the glass, and it stands the gameplay groups down while it is: group `ui`, `suppresses = { "climb", "player" }`, so Escape closes the card instead of…
menu
The scheme a card is driven with — the title, how-to-play, the pause
slab and the two end cards. Live only while a card is on the glass, and it
stands the gameplay groups down while it is: group ui, suppresses = { "climb", "player" }, so Escape closes the card instead of pausing again
and the pilgrim does not walk behind a menu.
| Control | Label | Keyboard / mouse | Gamepad | Touch |
|---|---|---|---|---|
confirm | Confirm | Enter, Numpad Enter, Space | south | — |
back | Back | Escape, right click | east | — |
navigate | Navigate | arrow keys | left stick | — |
navigateDpad | Navigate (d-pad) | WASD | d-pad | — |
restart | Restart | R | north | — |
Touch is unbound on purpose. A card is tapped: the screens slice draws
every control at L.layout().touchTarget or larger, so a finger reaches
each one directly, and an on-screen pad floating over a menu would only be
in the way. A binding record states that as touch = false rather than
leaving the class out, so a reader sees the decision where it was made.
The mouse does not confirm. A pointer confirms by clicking the control
itself, which the widget's own onClick already delivers; binding the left
button to confirm as well would fire the focused control a second time on
every click. The right button is back, which collides with nothing.
Two navigate controls, one job. An axis2 control evaluates exactly one
binding per device class, so the analogue stick and the d-pad cannot share
one entry. navigate carries the arrow keys and the left stick;
navigateDpad carries WASD and the d-pad. Both feed the same focus
movement, so a player who reaches for either finds the ring moves.
Scoped to this part · feeds back into the world's score.