/** * Declarative command ids for the primary gameplay input mode. */ export type MainModeCommand = | 'editNickname' | 'toggleMute' | 'toggleOutputMode' | 'toggleLoopback' | 'toggleVoiceLayer' | 'toggleItemLayer' | 'toggleMediaLayer' | 'toggleWorldLayer' | 'masterVolumeUp' | 'masterVolumeDown' | 'openEffectSelect' | 'effectValueUp' | 'effectValueDown' | 'speakCoordinates' | 'openMicGainEdit' | 'calibrateMicrophone' | 'useItem' | 'secondaryUseItem' | 'speakUsers' | 'addItem' | 'locateNearestItem' | 'listItems' | 'pickupDropItem' | 'openItemManagement' | 'editItem' | 'inspectItem' | 'pingServer' | 'locateNearestUser' | 'listUsers' | 'openHelp' | 'openChat' | 'openAdminMenu' | 'chatPrev' | 'chatNext' | 'chatFirst' | 'chatLast' | 'escape'; /** * Maps raw key events to a semantic command for main mode handling. */ export function resolveMainModeCommand(code: string, shiftKey: boolean): MainModeCommand | null { if (code === 'KeyN') return shiftKey ? null : 'editNickname'; if (code === 'KeyM') return shiftKey ? 'toggleOutputMode' : 'toggleMute'; if (code === 'Digit1') return shiftKey ? 'toggleLoopback' : 'toggleVoiceLayer'; if (code === 'Digit2') return shiftKey ? null : 'toggleItemLayer'; if (code === 'Digit3') return shiftKey ? null : 'toggleMediaLayer'; if (code === 'Digit4') return shiftKey ? null : 'toggleWorldLayer'; if (code === 'KeyE') return shiftKey ? null : 'openEffectSelect'; if (code === 'Equal') return shiftKey ? 'effectValueUp' : 'masterVolumeUp'; if (code === 'Minus') return shiftKey ? 'effectValueDown' : 'masterVolumeDown'; if (code === 'NumpadAdd') return 'masterVolumeUp'; if (code === 'NumpadSubtract') return 'masterVolumeDown'; if (code === 'KeyC') return shiftKey ? null : 'speakCoordinates'; if (code === 'KeyV') return shiftKey ? 'calibrateMicrophone' : 'openMicGainEdit'; if (code === 'Enter') return shiftKey ? 'secondaryUseItem' : 'useItem'; if (code === 'KeyU') return shiftKey ? null : 'speakUsers'; if (code === 'KeyA') return shiftKey ? null : 'addItem'; if (code === 'KeyI') return shiftKey ? 'listItems' : 'locateNearestItem'; if (code === 'KeyD') return shiftKey ? null : 'pickupDropItem'; if (code === 'KeyO') return shiftKey ? 'inspectItem' : 'editItem'; if (code === 'KeyP') return shiftKey ? null : 'pingServer'; if (code === 'KeyL') return shiftKey ? 'listUsers' : 'locateNearestUser'; if (code === 'Slash') return shiftKey ? 'openHelp' : 'openChat'; if (code === 'KeyZ') return shiftKey ? 'openAdminMenu' : 'openItemManagement'; if (code === 'Comma') return shiftKey ? 'chatFirst' : 'chatPrev'; if (code === 'Period') return shiftKey ? 'chatLast' : 'chatNext'; if (code === 'Escape') return shiftKey ? null : 'escape'; return null; }