Diagnostic from previous session confirmed Gamepad.current detects an Xbox Controller correctly, but pressing buttons in the Main Menu did nothing. Root cause: ControllerNavigator only handles combat-specific bindings (card cycle, target select, end turn), and Unity’s StandaloneInputModule does nothing without an initial EventSystem.SetSelectedGameObject anchor.

MenuControllerHelper:

  • Auto-bootstraps globally via [RuntimeInitializeOnLoadMethod] + DontDestroyOnLoad
  • Anchors selection to the first interactable Button on each scene load (waits 2 frames so dynamically-built menus have time to construct buttons)
  • D-pad + left-stick flick drive Selectable.FindSelectableOnUp/Down/Left/Right (uses Unity’s built-in Auto navigation; left stick latches per flick to prevent cascading moves while held)
  • A button → click currently-selected Button
  • B button → click any visible BACK / CANCEL / CLOSE / EXIT / RESUME button (label-based heuristic; topmost-canvas-priority so popup close beats underlying screen back)
  • Re-anchors every frame if currentSelectedGameObject became null/inactive (handles screen swaps + popup open/close transitions)
  • Sleeps when CombatManager.Instance is non-null so it never fights with ControllerNavigator over A/B/D-pad in combat

Verified all popup close-buttons use ‘CLOSE’ or ‘RESUME’ labels (SettingsMenu, UnlockPickerUI x2, CharacterScreen, EscapeMenu).


Commit 9e53c79 by astafford8488.