import { useMemo } from "react"; import { useShellStore } from "../app/shellStore"; import { useGameStore } from "../game/store"; import { useMenuController, type MenuAction } from "../input/useMenuController"; import { ControllerButton } from "./ControllerButton"; function PauseDialog() { const closeOverlay = useGameStore((state) => state.closeOverlay); const openOverlay = useGameStore((state) => state.openOverlay); const reset = useGameStore((state) => state.resetAtEntrance); const gameMode = useGameStore((state) => state.gameMode); const activeCharacter = useShellStore((state) => state.activeCharacter); const returnToMainMenu = useShellStore((state) => state.returnToMainMenu); const abandonManastormRun = useShellStore((state) => state.abandonManastormRun); const resume = () => { closeOverlay(); }; const returnToEntrance = () => { reset(); }; const leaveDungeon = () => { closeOverlay(); returnToMainMenu(); }; const abandonManastorm = () => { closeOverlay(); abandonManastormRun(); }; const skillMenuLabel = activeCharacter?.categoryId === "rom" ? "Skills" : "Talents"; const actions = useMemo(() => [ { id: "pause-resume", run: resume }, { id: "pause-party", run: () => openOverlay("party") }, { id: "pause-inventory", run: () => openOverlay("inventory") }, { id: "pause-map", run: () => openOverlay("map") }, { id: "pause-spellbook", run: () => openOverlay("spellbook") }, { id: "pause-bindings", run: () => openOverlay("bindings") }, { id: "pause-talents", run: () => openOverlay("talents") }, { id: "pause-options", run: () => openOverlay("options") }, ...(gameMode === "manastorm" ? [{ id: "pause-abandon-manastorm", run: abandonManastorm }] : [{ id: "pause-entrance", run: returnToEntrance }]), { id: "pause-main-menu", run: leaveDungeon }, ], [abandonManastormRun, closeOverlay, gameMode, openOverlay, reset, returnToMainMenu]); const controller = useMenuController(actions, { initialId: "pause-resume", onBack: resume }); const menuButton = (id: string, label: string, run: () => void, primary = false) => ( {label} ); return (

Healer Man paused

The cavern waits.

Resume play or open any character and system menu from this hub.

{menuButton("pause-resume", "Resume expedition", resume, true)} {menuButton("pause-party", "Party management", () => openOverlay("party"))} {menuButton("pause-inventory", "Inventory & equipment", () => openOverlay("inventory"))} {menuButton("pause-map", "Dungeon map", () => openOverlay("map"))} {menuButton("pause-spellbook", "Spellbook", () => openOverlay("spellbook"))} {menuButton("pause-bindings", "Ability controls", () => openOverlay("bindings"))} {menuButton("pause-talents", skillMenuLabel, () => openOverlay("talents"))} {menuButton("pause-options", "Options", () => openOverlay("options"))} {gameMode === "manastorm" ? menuButton("pause-abandon-manastorm", "Abandon Manastorm run", abandonManastorm) : menuButton("pause-entrance", "Return to entrance", returnToEntrance)} {menuButton("pause-main-menu", "Return to main menu", leaveDungeon)}
Move
WASD / Left stick
Look
Hold right mouse / Arrow keys / Right stick
Abilities
1–8 / Face, R1, R2, D-pad left/right
Ability layers
Shift / Alt / Hold L1 / Hold L2
Targets
Tab / R3 enemy · D-pad up/down party/self · L3 clear
Party orders
F1 Attack / F2 Defend / F3 Stop / F4 Recall
Spellbook / {skillMenuLabel}
P / N
Inventory / Loot
I / E
Pause
Escape / Start
); } export function PauseMenu() { const open = useGameStore((state) => state.overlay === "pause"); return open ? : null; }