GoDrawer — the side panel
GoSheet comes from the bottom, which is right for a phone held upright. On a tablet or a
desktop the same sheet covers the game; a drawer comes from the side instead.
bag.side = GoDrawer.Side.RIGHT
bag.open("Bag")
The panel reaches the screen edge but the content stays inside the safe area, or a rounded corner clips
the first row. LEFT means screen-left even in Arabic; turn on
follow_text_direction when "the start side" is the point, and it flips in RTL.
GoPopover — the anchored card
GoPopover.open(slot, item_card(item))
This is GoSurface's anchored placement with the layer, the surface, the anchor and the
teardown already wired — the ten lines every game writes over and over. One is open at a time, because
stacked cards bury the screen and nobody can tell which card belongs to which slot. The scrim is
transparent: a card you opened to compare gear must not darken the gear.
GoContextMenu — long-press and right-click
GoContextMenu.attach(item_slot, [
{"text": "Use", "action": use},
{"separator": true},
{"text": "Drop", "action": drop, "danger": true},
])
PopupMenu is already in the engine. What is not is the gesture: half a second to open,
cancelled the moment the finger moves, so scrolling a list never pops a menu. Pass a
Callable instead of an array when the entries depend on who you pressed.
⋯ button (open_at()), an icon, or a first-run coach mark.
GoConsole — the developer console
console.register("give", "Grant an item: give <id> <count>", give)
console.toggle()
Cheat and debug commands, with a palette that filters as you type so nobody has to memorise them, and a history on the arrow keys. It sits above everything, so you can debug over a dialog.
debug_only is on by default; cheat commands in
a player's hands end a game's economy on the first day.