initAppState(opt: canvas: HTMLCanvasElement touchToMouse?: boolean gamepads?: Record<string, GamepadDef> pixelDensity?: number maxFPS?: number buttons?: ButtonsDef ): canvas: HTMLCanvasElement buttons: ButtonsDef buttonsByKey: Map<Key, string[]> buttonsByMouse: Map<MouseButton, string[]> buttonsByGamepad: Map<KGamepadButton, string[]> buttonsByKeyCode: Map<string, string[]> loopID: null | number stopped: boolean dt: number fixedDt: number restDt: number time: number realTime: number fpsCounter: FPSCounter timeScale: number skipTime: boolean isHidden: boolean numFrames: number mousePos: Vec2 mouseDeltaPos: Vec2 keyState: ButtonState<Key> mouseState: ButtonState<MouseButton> mergedGamepadState: GamepadState gamepadStates: Map<number, GamepadState> lastInputDevice: "mouse" | "keyboard" | "gamepad" | null buttonState: ButtonState<string> gamepads: KGamepad[] charInputted: string[] isMouseMoved: boolean lastWidth: number lastHeight: number events: KEventHandler<AppEventMap>