@al8b/input 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -0
- package/dist/core/input-manager.d.mts +25 -0
- package/dist/core/input-manager.d.ts +25 -0
- package/dist/core/input-manager.js +724 -0
- package/dist/core/input-manager.js.map +1 -0
- package/dist/core/input-manager.mjs +701 -0
- package/dist/core/input-manager.mjs.map +1 -0
- package/dist/devices/gamepad.d.mts +24 -0
- package/dist/devices/gamepad.d.ts +24 -0
- package/dist/devices/gamepad.js +244 -0
- package/dist/devices/gamepad.js.map +1 -0
- package/dist/devices/gamepad.mjs +221 -0
- package/dist/devices/gamepad.mjs.map +1 -0
- package/dist/devices/keyboard.d.mts +16 -0
- package/dist/devices/keyboard.d.ts +16 -0
- package/dist/devices/keyboard.js +131 -0
- package/dist/devices/keyboard.js.map +1 -0
- package/dist/devices/keyboard.mjs +106 -0
- package/dist/devices/keyboard.mjs.map +1 -0
- package/dist/devices/mouse.d.mts +21 -0
- package/dist/devices/mouse.d.ts +21 -0
- package/dist/devices/mouse.js +207 -0
- package/dist/devices/mouse.js.map +1 -0
- package/dist/devices/mouse.mjs +182 -0
- package/dist/devices/mouse.mjs.map +1 -0
- package/dist/devices/touch.d.mts +22 -0
- package/dist/devices/touch.d.ts +22 -0
- package/dist/devices/touch.js +186 -0
- package/dist/devices/touch.js.map +1 -0
- package/dist/devices/touch.mjs +161 -0
- package/dist/devices/touch.mjs.map +1 -0
- package/dist/index.d.mts +6 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +735 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +706 -0
- package/dist/index.mjs.map +1 -0
- package/dist/shared/constants.d.mts +6 -0
- package/dist/shared/constants.d.ts +6 -0
- package/dist/shared/constants.js +40 -0
- package/dist/shared/constants.js.map +1 -0
- package/dist/shared/constants.mjs +12 -0
- package/dist/shared/constants.mjs.map +1 -0
- package/dist/shared/utils.d.mts +9 -0
- package/dist/shared/utils.d.ts +9 -0
- package/dist/shared/utils.js +56 -0
- package/dist/shared/utils.js.map +1 -0
- package/dist/shared/utils.mjs +29 -0
- package/dist/shared/utils.mjs.map +1 -0
- package/dist/types/index.d.mts +41 -0
- package/dist/types/index.d.ts +41 -0
- package/dist/types/index.js +19 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/index.mjs +1 -0
- package/dist/types/index.mjs.map +1 -0
- package/package.json +34 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/core/input-manager.ts","../src/devices/gamepad.ts","../src/shared/constants.ts","../src/shared/utils.ts","../src/devices/keyboard.ts","../src/devices/mouse.ts","../src/devices/touch.ts"],"sourcesContent":["import { APIErrorCode, reportRuntimeError } from \"@al8b/diagnostics\";\nimport { GamepadInput } from \"../devices/gamepad\";\nimport { KeyboardInput } from \"../devices/keyboard\";\nimport { MouseInput } from \"../devices/mouse\";\nimport { TouchInput } from \"../devices/touch\";\nimport type { KeyboardState, MouseState, TouchState } from \"../types\";\n\n/**\n * Input manager - orchestrates keyboard, mouse, touch, and gamepad handlers.\n */\nexport class Input {\n\tprivate readonly keyboard: KeyboardInput;\n\tprivate readonly mouse: MouseInput;\n\tprivate readonly touch: TouchInput;\n\tprivate readonly gamepad: GamepadInput;\n\tprivate runtime?: any;\n\n\tconstructor(canvas?: HTMLCanvasElement, runtime?: any) {\n\t\tthis.runtime = runtime;\n\t\tthis.keyboard = new KeyboardInput();\n\t\tthis.mouse = new MouseInput(canvas);\n\t\tthis.touch = new TouchInput(this.mouse, canvas);\n\t\tthis.gamepad = new GamepadInput();\n\t}\n\n\t/**\n\t * Poll all devices for state updates.\n\t */\n\tpublic update(): void {\n\t\tthis.keyboard.update();\n\t\tthis.mouse.update();\n\t\tthis.touch.update();\n\t\tthis.gamepad.update();\n\t}\n\n\tpublic getKeyboard(): KeyboardState {\n\t\t// Validate keyboard state exists before returning\n\t\tif (!this.keyboard || !this.keyboard.state) {\n\t\t\treportRuntimeError(this.runtime?.listener, APIErrorCode.E7052, { error: \"Keyboard state not available\" });\n\t\t\t// Return empty state as fallback to prevent crashes\n\t\t\treturn {} as KeyboardState;\n\t\t}\n\t\treturn this.keyboard.state;\n\t}\n\n\tpublic getMouse(): MouseState {\n\t\t// Validate mouse state exists before returning\n\t\tif (!this.mouse || !this.mouse.state) {\n\t\t\treportRuntimeError(this.runtime?.listener, APIErrorCode.E7052, { error: \"Mouse state not available\" });\n\t\t\t// Return empty state as fallback to prevent crashes\n\t\t\treturn {} as MouseState;\n\t\t}\n\t\treturn this.mouse.state;\n\t}\n\n\tpublic getTouch(): TouchState {\n\t\t// Validate touch state exists before returning\n\t\tif (!this.touch || !this.touch.state) {\n\t\t\treportRuntimeError(this.runtime?.listener, APIErrorCode.E7052, { error: \"Touch state not available\" });\n\t\t\t// Return empty state as fallback to prevent crashes\n\t\t\treturn {} as TouchState;\n\t\t}\n\t\treturn this.touch.state;\n\t}\n\n\tpublic getGamepad(): GamepadInput {\n\t\t// Check if gamepad API is available in the browser\n\t\tif (!this.gamepad || !navigator.getGamepads) {\n\t\t\treportRuntimeError(this.runtime?.listener, APIErrorCode.E7051, { device: \"gamepad\" });\n\t\t}\n\t\treturn this.gamepad;\n\t}\n\n\tpublic setCanvas(canvas: HTMLCanvasElement): void {\n\t\tthis.mouse.setCanvas(canvas);\n\t\tthis.touch.setCanvas(canvas);\n\t}\n}\n","/**\n * Gamepad - Game controller input handling\n *\n * Provides gamepad polling and state management.\n */\n\ntype ButtonMap = Record<number, string>;\ntype BrowserGamepad = globalThis.Gamepad;\n\ninterface StateMap extends Record<string, any> {\n\tpress: Record<string, number>;\n\trelease: Record<string, number>;\n}\n\nconst createState = (): StateMap => ({\n\tpress: {},\n\trelease: {},\n});\n\nconst BUTTONS_MAP: ButtonMap = {\n\t0: \"A\",\n\t1: \"B\",\n\t2: \"X\",\n\t3: \"Y\",\n\t4: \"LB\",\n\t5: \"RB\",\n\t8: \"VIEW\",\n\t9: \"MENU\",\n\t10: \"LS\",\n\t11: \"RS\",\n\t12: \"DPAD_UP\",\n\t13: \"DPAD_DOWN\",\n\t14: \"DPAD_LEFT\",\n\t15: \"DPAD_RIGHT\",\n};\n\nconst TRIGGERS_MAP: ButtonMap = {\n\t6: \"LT\",\n\t7: \"RT\",\n};\n\nconst ensureState = (state?: StateMap): StateMap => {\n\tif (!state) {\n\t\treturn createState();\n\t}\n\tstate.press ??= {};\n\tstate.release ??= {};\n\treturn state;\n};\n\nexport class GamepadInput {\n\tpublic status: StateMap & Record<number, StateMap>;\n\tpublic previous: {\n\t\tglobal: StateMap;\n\t} & Record<number, StateMap>;\n\tpublic count = 0;\n\n\tconstructor() {\n\t\tthis.status = createState();\n\t\tthis.previous = {\n\t\t\tglobal: createState(),\n\t\t};\n\t}\n\n\tupdate(): void {\n\t\tconst pads = this.getGamepads();\n\t\tif (!pads) {\n\t\t\tthis.count = 0;\n\t\t\treturn;\n\t\t}\n\n\t\tlet padCount = 0;\n\t\tfor (let i = 0; i < pads.length; i++) {\n\t\t\tconst pad = pads[i];\n\t\t\tif (!pad) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tpadCount++;\n\t\t\tthis.status[i] = ensureState(this.status[i]);\n\t\t\tthis.previous[i] = ensureState(this.previous[i]);\n\n\t\t\tfor (const [index, name] of Object.entries(BUTTONS_MAP)) {\n\t\t\t\tconst idx = Number(index);\n\t\t\t\tconst button = pad.buttons[idx];\n\t\t\t\tif (button) {\n\t\t\t\t\tthis.status[i][name] = button.pressed ? 1 : 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const [index, name] of Object.entries(TRIGGERS_MAP)) {\n\t\t\t\tconst idx = Number(index);\n\t\t\t\tconst trigger = pad.buttons[idx];\n\t\t\t\tif (trigger) {\n\t\t\t\t\tthis.status[i][name] = trigger.value ?? 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (pad.axes.length >= 2) {\n\t\t\t\tthis.updateStick(pad.axes[0], -pad.axes[1], this.status[i], \"LEFT\");\n\t\t\t}\n\t\t\tif (pad.axes.length >= 4) {\n\t\t\t\tthis.updateStick(pad.axes[2], -pad.axes[3], this.status[i], \"RIGHT\");\n\t\t\t}\n\t\t}\n\n\t\tthis.aggregateStatus(pads, padCount);\n\t\tthis.count = padCount;\n\t\tthis.updateChanges(this.status, this.previous.global);\n\t\tfor (let i = 0; i < padCount; i++) {\n\t\t\tthis.updateChanges(this.status[i], this.previous[i]);\n\t\t}\n\n\t\tfor (let i = padCount; i < 4; i++) {\n\t\t\tdelete this.status[i];\n\t\t\tdelete this.previous[i];\n\t\t}\n\t}\n\n\tprivate getGamepads(): (BrowserGamepad | null)[] | null {\n\t\tif (typeof navigator === \"undefined\" || !navigator.getGamepads) {\n\t\t\treturn null;\n\t\t}\n\t\ttry {\n\t\t\treturn navigator.getGamepads();\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tprivate updateStick(x: number, y: number, target: StateMap, prefix: \"LEFT\" | \"RIGHT\"): void {\n\t\tconst radius = Math.sqrt(x * x + y * y);\n\t\tconst angle = Math.floor((((Math.atan2(y, x) + Math.PI * 2) % (Math.PI * 2)) / (Math.PI * 2)) * 360);\n\t\ttarget[`${prefix}_STICK_ANGLE`] = angle;\n\t\ttarget[`${prefix}_STICK_AMOUNT`] = radius;\n\t\ttarget[`${prefix}_STICK_UP`] = y > 0.5 ? 1 : 0;\n\t\ttarget[`${prefix}_STICK_DOWN`] = y < -0.5 ? 1 : 0;\n\t\ttarget[`${prefix}_STICK_LEFT`] = x < -0.5 ? 1 : 0;\n\t\ttarget[`${prefix}_STICK_RIGHT`] = x > 0.5 ? 1 : 0;\n\t}\n\n\tprivate aggregateStatus(pads: (BrowserGamepad | null)[], padCount: number): void {\n\t\tfor (const [index, name] of Object.entries(BUTTONS_MAP)) {\n\t\t\tthis.status[name] = 0;\n\t\t\tconst idx = Number(index);\n\t\t\tfor (const pad of pads) {\n\t\t\t\tif (!pad) break;\n\t\t\t\tif (pad.buttons[idx]?.pressed) {\n\t\t\t\t\tthis.status[name] = 1;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (const [index, name] of Object.entries(TRIGGERS_MAP)) {\n\t\t\tthis.status[name] = 0;\n\t\t\tconst idx = Number(index);\n\t\t\tfor (const pad of pads) {\n\t\t\t\tif (!pad) break;\n\t\t\t\tconst button = pad.buttons[idx];\n\t\t\t\tif (button) {\n\t\t\t\t\tthis.status[name] = button.value ?? 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.status.UP = 0;\n\t\tthis.status.DOWN = 0;\n\t\tthis.status.LEFT = 0;\n\t\tthis.status.RIGHT = 0;\n\t\tthis.status.LEFT_STICK_UP = 0;\n\t\tthis.status.LEFT_STICK_DOWN = 0;\n\t\tthis.status.LEFT_STICK_LEFT = 0;\n\t\tthis.status.LEFT_STICK_RIGHT = 0;\n\t\tthis.status.RIGHT_STICK_UP = 0;\n\t\tthis.status.RIGHT_STICK_DOWN = 0;\n\t\tthis.status.RIGHT_STICK_LEFT = 0;\n\t\tthis.status.RIGHT_STICK_RIGHT = 0;\n\t\tthis.status.LEFT_STICK_ANGLE = 0;\n\t\tthis.status.LEFT_STICK_AMOUNT = 0;\n\t\tthis.status.RIGHT_STICK_ANGLE = 0;\n\t\tthis.status.RIGHT_STICK_AMOUNT = 0;\n\t\tthis.status.RT = 0;\n\t\tthis.status.LT = 0;\n\n\t\tfor (let i = 0; i < padCount; i++) {\n\t\t\tconst padState = this.status[i];\n\t\t\tif (!padState) continue;\n\n\t\t\tpadState.UP = padState.DPAD_UP || padState.LEFT_STICK_UP || padState.RIGHT_STICK_UP || 0 ? 1 : 0;\n\t\t\tpadState.DOWN = padState.DPAD_DOWN || padState.LEFT_STICK_DOWN || padState.RIGHT_STICK_DOWN || 0 ? 1 : 0;\n\t\t\tpadState.LEFT = padState.DPAD_LEFT || padState.LEFT_STICK_LEFT || padState.RIGHT_STICK_LEFT || 0 ? 1 : 0;\n\t\t\tpadState.RIGHT = padState.DPAD_RIGHT || padState.LEFT_STICK_RIGHT || padState.RIGHT_STICK_RIGHT || 0 ? 1 : 0;\n\n\t\t\tif (padState.UP) this.status.UP = 1;\n\t\t\tif (padState.DOWN) this.status.DOWN = 1;\n\t\t\tif (padState.LEFT) this.status.LEFT = 1;\n\t\t\tif (padState.RIGHT) this.status.RIGHT = 1;\n\n\t\t\tif (padState.LEFT_STICK_UP) this.status.LEFT_STICK_UP = 1;\n\t\t\tif (padState.LEFT_STICK_DOWN) this.status.LEFT_STICK_DOWN = 1;\n\t\t\tif (padState.LEFT_STICK_LEFT) this.status.LEFT_STICK_LEFT = 1;\n\t\t\tif (padState.LEFT_STICK_RIGHT) this.status.LEFT_STICK_RIGHT = 1;\n\t\t\tif (padState.RIGHT_STICK_UP) this.status.RIGHT_STICK_UP = 1;\n\t\t\tif (padState.RIGHT_STICK_DOWN) this.status.RIGHT_STICK_DOWN = 1;\n\t\t\tif (padState.RIGHT_STICK_LEFT) this.status.RIGHT_STICK_LEFT = 1;\n\t\t\tif (padState.RIGHT_STICK_RIGHT) this.status.RIGHT_STICK_RIGHT = 1;\n\t\t\tif (padState.LT) this.status.LT = padState.LT;\n\t\t\tif (padState.RT) this.status.RT = padState.RT;\n\n\t\t\tif ((padState.LEFT_STICK_AMOUNT ?? 0) > (this.status.LEFT_STICK_AMOUNT ?? 0)) {\n\t\t\t\tthis.status.LEFT_STICK_AMOUNT = padState.LEFT_STICK_AMOUNT;\n\t\t\t\tthis.status.LEFT_STICK_ANGLE = padState.LEFT_STICK_ANGLE;\n\t\t\t}\n\t\t\tif ((padState.RIGHT_STICK_AMOUNT ?? 0) > (this.status.RIGHT_STICK_AMOUNT ?? 0)) {\n\t\t\t\tthis.status.RIGHT_STICK_AMOUNT = padState.RIGHT_STICK_AMOUNT;\n\t\t\t\tthis.status.RIGHT_STICK_ANGLE = padState.RIGHT_STICK_ANGLE;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate updateChanges(current: StateMap, previous: StateMap): void {\n\t\tfor (const key in current.press) {\n\t\t\tcurrent.press[key] = 0;\n\t\t}\n\t\tfor (const key in current.release) {\n\t\t\tcurrent.release[key] = 0;\n\t\t}\n\t\tfor (const key in previous) {\n\t\t\tif (key === \"press\" || key === \"release\") continue;\n\t\t\tif (previous[key] && !current[key]) {\n\t\t\t\tcurrent.release[key] = 1;\n\t\t\t}\n\t\t}\n\t\tfor (const key in current) {\n\t\t\tif (key === \"press\" || key === \"release\") continue;\n\t\t\tif (current[key] && !previous[key]) {\n\t\t\t\tcurrent.press[key] = 1;\n\t\t\t}\n\t\t}\n\t\tfor (const key in previous) {\n\t\t\tif (key === \"press\" || key === \"release\") continue;\n\t\t\tprevious[key] = 0;\n\t\t}\n\t\tfor (const key in current) {\n\t\t\tif (key === \"press\" || key === \"release\") continue;\n\t\t\tprevious[key] = current[key];\n\t\t}\n\t}\n}\n","export const NORMALIZED_SCALE = 200;\nexport const OUT_OF_BOUNDS = -10000;\nexport const PREVENT_DEFAULT_REGEX = /Escape|(F\\d+)/;\nexport const TOUCH_MOUSE_ID = \"mouse\";\n","import { NORMALIZED_SCALE } from \"./constants\";\n\ninterface RelativePosition {\n\tx: number;\n\ty: number;\n}\n\nexport const hasDocument = typeof document !== \"undefined\";\n\nexport const computeRelativePosition = (\n\tcanvas: HTMLCanvasElement,\n\tclientX: number,\n\tclientY: number,\n): RelativePosition => {\n\tconst rect = canvas.getBoundingClientRect();\n\tconst min = Math.min(canvas.clientWidth, canvas.clientHeight) || 1;\n\tconst x = ((clientX - rect.left - canvas.clientWidth / 2) / min) * NORMALIZED_SCALE;\n\tconst y = ((canvas.clientHeight / 2 - (clientY - rect.top)) / min) * NORMALIZED_SCALE;\n\treturn {\n\t\tx,\n\t\ty,\n\t};\n};\n\nexport const addEventListener = <K extends keyof DocumentEventMap>(\n\ttarget: Document | HTMLElement,\n\ttype: K,\n\tlistener: (this: Document | HTMLElement, ev: DocumentEventMap[K]) => any,\n): void => {\n\ttarget.addEventListener(type, listener as EventListener, {\n\t\tpassive: false,\n\t});\n};\n","import { PREVENT_DEFAULT_REGEX } from \"../shared/constants\";\nimport { hasDocument } from \"../shared/utils\";\nimport type { KeyboardState } from \"../types\";\n\nexport class KeyboardInput {\n\tpublic readonly state: KeyboardState = {\n\t\tpress: {},\n\t\trelease: {},\n\t\tUP: 0,\n\t\tDOWN: 0,\n\t\tLEFT: 0,\n\t\tRIGHT: 0,\n\t};\n\n\tprivate previous: Record<string, number> = {};\n\n\t// Track only keys that changed since last update() — avoids O(n) iteration of all keys\n\tprivate dirtyKeys: Set<string> = new Set();\n\n\tconstructor(target: Document = hasDocument ? document : (undefined as any)) {\n\t\tif (!target) {\n\t\t\treturn;\n\t\t}\n\t\ttarget.addEventListener(\"keydown\", (event) => this.handleKeyDown(event));\n\t\ttarget.addEventListener(\"keyup\", (event) => this.handleKeyUp(event));\n\t}\n\n\tprivate convertCode(code: string): string {\n\t\tlet res = \"\";\n\t\tlet low = false;\n\t\tfor (let i = 0; i < code.length; i++) {\n\t\t\tconst c = code.charAt(i);\n\t\t\tif (c === c.toUpperCase() && low) {\n\t\t\t\tres += \"_\";\n\t\t\t\tlow = false;\n\t\t\t} else {\n\t\t\t\tlow = true;\n\t\t\t}\n\t\t\tres += c.toUpperCase();\n\t\t}\n\t\treturn res;\n\t}\n\n\tprivate handleKeyDown(event: KeyboardEvent): void {\n\t\tif (!(event.altKey || event.ctrlKey || event.metaKey || PREVENT_DEFAULT_REGEX.test(event.key))) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t\tconst codeKey = this.convertCode(event.code);\n\t\tconst upperKey = event.key.toUpperCase();\n\t\tthis.state[codeKey] = 1;\n\t\tthis.state[upperKey] = 1;\n\t\tthis.dirtyKeys.add(codeKey);\n\t\tthis.dirtyKeys.add(upperKey);\n\t\tthis.updateDirectional();\n\t}\n\n\tprivate handleKeyUp(event: KeyboardEvent): void {\n\t\tconst codeKey = this.convertCode(event.code);\n\t\tconst upperKey = event.key.toUpperCase();\n\t\tthis.state[codeKey] = 0;\n\t\tthis.state[upperKey] = 0;\n\t\tthis.dirtyKeys.add(codeKey);\n\t\tthis.dirtyKeys.add(upperKey);\n\t\tthis.updateDirectional();\n\t}\n\n\tprivate updateDirectional(): void {\n\t\tthis.state.UP = (this.state.KEY_W as number) || (this.state.ARROW_UP as number) || 0;\n\t\tthis.state.DOWN = (this.state.KEY_S as number) || (this.state.ARROW_DOWN as number) || 0;\n\t\tthis.state.LEFT = (this.state.KEY_A as number) || (this.state.ARROW_LEFT as number) || 0;\n\t\tthis.state.RIGHT = (this.state.KEY_D as number) || (this.state.ARROW_RIGHT as number) || 0;\n\t}\n\n\tpublic update(): void {\n\t\t// Clear previous press/release state only for dirty keys\n\t\tfor (const key of this.dirtyKeys) {\n\t\t\tif (this.state.press[key]) this.state.press[key] = 0;\n\t\t\tif (this.state.release[key]) this.state.release[key] = 0;\n\t\t}\n\n\t\t// Detect press/release transitions only for dirty keys\n\t\tfor (const key of this.dirtyKeys) {\n\t\t\tconst current = this.state[key] as number;\n\t\t\tconst prev = this.previous[key] || 0;\n\n\t\t\tif (current && !prev) {\n\t\t\t\tthis.state.press[key] = 1;\n\t\t\t} else if (!current && prev) {\n\t\t\t\tthis.state.release[key] = 1;\n\t\t\t}\n\n\t\t\tthis.previous[key] = current;\n\t\t}\n\n\t\tthis.dirtyKeys.clear();\n\t}\n\n\tpublic reset(): void {\n\t\tfor (const key in this.state) {\n\t\t\tif (key === \"press\" || key === \"release\") continue;\n\t\t\tthis.state[key] = 0;\n\t\t}\n\t\tfor (const key in this.previous) {\n\t\t\tthis.previous[key] = 0;\n\t\t}\n\t\tthis.dirtyKeys.clear();\n\t}\n}\n","import { OUT_OF_BOUNDS } from \"../shared/constants\";\nimport { computeRelativePosition, hasDocument } from \"../shared/utils\";\nimport type { MouseState } from \"../types\";\n\ntype MouseListener = (event: MouseEvent) => void;\ntype WheelListener = (event: WheelEvent | Event) => void;\n\nexport class MouseInput {\n\tpublic readonly state: MouseState = {\n\t\tx: OUT_OF_BOUNDS,\n\t\ty: OUT_OF_BOUNDS,\n\t\tpressed: 0,\n\t\tleft: 0,\n\t\tmiddle: 0,\n\t\tright: 0,\n\t\tpress: 0,\n\t\trelease: 0,\n\t\twheel: 0,\n\t};\n\n\tprivate previousPressed = false;\n\tprivate wheel = 0;\n\tprivate canvas?: HTMLCanvasElement;\n\tprivate removeListeners?: () => void;\n\n\tconstructor(canvas?: HTMLCanvasElement) {\n\t\tif (canvas) {\n\t\t\tthis.setCanvas(canvas);\n\t\t}\n\t}\n\n\tpublic setCanvas(canvas: HTMLCanvasElement): void {\n\t\tthis.detach();\n\t\tthis.canvas = canvas;\n\t\tthis.attach();\n\t}\n\n\tpublic syncFromTouch(x: number, y: number, touching: boolean): void {\n\t\tthis.state.x = x;\n\t\tthis.state.y = y;\n\t\tif (touching) {\n\t\t\tthis.state.left = 1;\n\t\t\tthis.state.middle = 0;\n\t\t\tthis.state.right = 0;\n\t\t\tthis.state.pressed = 1;\n\t\t} else {\n\t\t\tthis.state.left = 0;\n\t\t\tthis.state.middle = 0;\n\t\t\tthis.state.right = 0;\n\t\t\tthis.state.pressed = 0;\n\t\t}\n\t}\n\n\tpublic update(): void {\n\t\tif (this.state.pressed && !this.previousPressed) {\n\t\t\tthis.previousPressed = true;\n\t\t\tthis.state.press = 1;\n\t\t} else {\n\t\t\tthis.state.press = 0;\n\t\t}\n\n\t\tif (!this.state.pressed && this.previousPressed) {\n\t\t\tthis.previousPressed = false;\n\t\t\tthis.state.release = 1;\n\t\t} else {\n\t\t\tthis.state.release = 0;\n\t\t}\n\n\t\tthis.state.wheel = this.wheel;\n\t\tthis.wheel = 0;\n\t}\n\n\tprivate attach(): void {\n\t\tif (!hasDocument) {\n\t\t\treturn;\n\t\t}\n\t\tconst target = document;\n\t\tconst onDown: MouseListener = (event) => this.handleMouseDown(event);\n\t\tconst onMove: MouseListener = (event) => this.handleMouseMove(event);\n\t\tconst onUp: MouseListener = (event) => this.handleMouseUp(event);\n\t\tconst onWheel: WheelListener = (event) => this.handleWheel(event as WheelEvent);\n\t\tconst onDomWheel: WheelListener = (event) => this.handleWheel(event as WheelEvent);\n\n\t\ttarget.addEventListener(\"mousedown\", onDown, {\n\t\t\tpassive: false,\n\t\t});\n\t\ttarget.addEventListener(\"mousemove\", onMove, {\n\t\t\tpassive: false,\n\t\t});\n\t\ttarget.addEventListener(\"mouseup\", onUp, {\n\t\t\tpassive: false,\n\t\t});\n\t\ttarget.addEventListener(\"mousewheel\", onWheel as EventListener, {\n\t\t\tpassive: false,\n\t\t});\n\t\ttarget.addEventListener(\"DOMMouseScroll\", onDomWheel as EventListener, {\n\t\t\tpassive: false,\n\t\t});\n\n\t\tthis.removeListeners = () => {\n\t\t\ttarget.removeEventListener(\"mousedown\", onDown);\n\t\t\ttarget.removeEventListener(\"mousemove\", onMove);\n\t\t\ttarget.removeEventListener(\"mouseup\", onUp);\n\t\t\ttarget.removeEventListener(\"mousewheel\", onWheel as EventListener);\n\t\t\ttarget.removeEventListener(\"DOMMouseScroll\", onDomWheel as EventListener);\n\t\t};\n\t}\n\n\tprivate detach(): void {\n\t\tthis.removeListeners?.();\n\t\tthis.removeListeners = undefined;\n\t\tthis.canvas = undefined;\n\t}\n\n\tprivate handleMouseDown(event: MouseEvent): void {\n\t\tif (!this.canvas) return;\n\t\tevent.preventDefault();\n\t\tconst { x, y } = computeRelativePosition(this.canvas, event.clientX, event.clientY);\n\t\tthis.state.x = x;\n\t\tthis.state.y = y;\n\t\tswitch (event.button) {\n\t\t\tcase 0:\n\t\t\t\tthis.state.left = 1;\n\t\t\t\tbreak;\n\t\t\tcase 1:\n\t\t\t\tthis.state.middle = 1;\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\tthis.state.right = 1;\n\t\t\t\tbreak;\n\t\t}\n\t\tthis.state.pressed = Math.min(1, this.state.left + this.state.right + this.state.middle);\n\t}\n\n\tprivate handleMouseMove(event: MouseEvent): void {\n\t\tif (!this.canvas) return;\n\t\tevent.preventDefault();\n\t\tconst { x, y } = computeRelativePosition(this.canvas, event.clientX, event.clientY);\n\t\tthis.state.x = x;\n\t\tthis.state.y = y;\n\t}\n\n\tprivate handleMouseUp(event: MouseEvent): void {\n\t\tif (!this.canvas) return;\n\t\tevent.preventDefault();\n\t\tconst { x, y } = computeRelativePosition(this.canvas, event.clientX, event.clientY);\n\t\tthis.state.x = x;\n\t\tthis.state.y = y;\n\t\tswitch (event.button) {\n\t\t\tcase 0:\n\t\t\t\tthis.state.left = 0;\n\t\t\t\tbreak;\n\t\t\tcase 1:\n\t\t\t\tthis.state.middle = 0;\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\tthis.state.right = 0;\n\t\t\t\tbreak;\n\t\t}\n\t\tthis.state.pressed = Math.min(1, this.state.left + this.state.right + this.state.middle);\n\t}\n\n\tprivate handleWheel(event: WheelEvent | Event): void {\n\t\tconst wheelEvent = event as WheelEvent & {\n\t\t\twheelDelta?: number;\n\t\t\tdetail?: number;\n\t\t};\n\t\tif (typeof wheelEvent.deltaY === \"number\" && wheelEvent.deltaY !== 0) {\n\t\t\tthis.wheel = wheelEvent.deltaY > 0 ? -1 : 1;\n\t\t} else if (typeof wheelEvent.wheelDelta === \"number\" && wheelEvent.wheelDelta !== 0) {\n\t\t\tthis.wheel = wheelEvent.wheelDelta < 0 ? -1 : 1;\n\t\t} else if (typeof wheelEvent.detail === \"number\" && wheelEvent.detail !== 0) {\n\t\t\tthis.wheel = wheelEvent.detail > 0 ? -1 : 1;\n\t\t} else {\n\t\t\tthis.wheel = 0;\n\t\t}\n\t\tevent.preventDefault();\n\t}\n}\n","import { TOUCH_MOUSE_ID } from \"../shared/constants\";\nimport { computeRelativePosition, hasDocument } from \"../shared/utils\";\nimport type { PointerIdentifier, TouchPoint, TouchState } from \"../types\";\nimport type { MouseInput } from \"./mouse\";\n\ntype TouchListener = (event: TouchEvent) => void;\n\nexport class TouchInput {\n\tpublic readonly state: TouchState = {\n\t\ttouching: 0,\n\t\tx: 0,\n\t\ty: 0,\n\t\tpress: 0,\n\t\trelease: 0,\n\t\ttouches: [],\n\t};\n\n\tprivate touches = new Map<\n\t\tPointerIdentifier,\n\t\t{\n\t\t\tx: number;\n\t\t\ty: number;\n\t\t}\n\t>();\n\tprivate previousTouching = false;\n\tprivate canvas?: HTMLCanvasElement;\n\tprivate removeListeners?: () => void;\n\n\tconstructor(\n\t\tprivate mouse: MouseInput,\n\t\tcanvas?: HTMLCanvasElement,\n\t) {\n\t\tif (canvas) {\n\t\t\tthis.setCanvas(canvas);\n\t\t}\n\t}\n\n\tpublic setCanvas(canvas: HTMLCanvasElement): void {\n\t\tthis.detach();\n\t\tthis.canvas = canvas;\n\t\tthis.attach();\n\t}\n\n\tpublic update(): void {\n\t\tthis.syncMouseTouch();\n\n\t\tconst list: TouchPoint[] = [];\n\t\tfor (const [id, { x, y }] of this.touches.entries()) {\n\t\t\tlist.push({\n\t\t\t\tid,\n\t\t\t\tx,\n\t\t\t\ty,\n\t\t\t});\n\t\t\tthis.state.x = x;\n\t\t\tthis.state.y = y;\n\t\t}\n\t\tthis.state.touches = list;\n\t\tthis.state.touching = this.touches.size > 0 ? 1 : 0;\n\n\t\tif (this.state.touching && !this.previousTouching) {\n\t\t\tthis.previousTouching = true;\n\t\t\tthis.state.press = 1;\n\t\t} else {\n\t\t\tthis.state.press = 0;\n\t\t}\n\n\t\tif (!this.state.touching && this.previousTouching) {\n\t\t\tthis.previousTouching = false;\n\t\t\tthis.state.release = 1;\n\t\t} else {\n\t\t\tthis.state.release = 0;\n\t\t}\n\t}\n\n\tprivate syncMouseTouch(): void {\n\t\tconst mouseState = this.mouse.state;\n\t\tif (mouseState.pressed) {\n\t\t\tthis.touches.set(TOUCH_MOUSE_ID, {\n\t\t\t\tx: mouseState.x,\n\t\t\t\ty: mouseState.y,\n\t\t\t});\n\t\t} else {\n\t\t\tthis.touches.delete(TOUCH_MOUSE_ID);\n\t\t}\n\t}\n\n\tprivate attach(): void {\n\t\tif (!hasDocument) return;\n\t\tconst onStart: TouchListener = (event) => this.handleTouchStart(event);\n\t\tconst onMove: TouchListener = (event) => this.handleTouchMove(event);\n\t\tconst onEnd: TouchListener = (event) => this.handleTouchEnd(event);\n\n\t\tdocument.addEventListener(\"touchstart\", onStart, {\n\t\t\tpassive: false,\n\t\t});\n\t\tdocument.addEventListener(\"touchmove\", onMove, {\n\t\t\tpassive: false,\n\t\t});\n\t\tdocument.addEventListener(\"touchend\", onEnd, {\n\t\t\tpassive: false,\n\t\t});\n\t\tdocument.addEventListener(\"touchcancel\", onEnd, {\n\t\t\tpassive: false,\n\t\t});\n\n\t\tthis.removeListeners = () => {\n\t\t\tdocument.removeEventListener(\"touchstart\", onStart);\n\t\t\tdocument.removeEventListener(\"touchmove\", onMove);\n\t\t\tdocument.removeEventListener(\"touchend\", onEnd);\n\t\t\tdocument.removeEventListener(\"touchcancel\", onEnd);\n\t\t};\n\t}\n\n\tprivate detach(): void {\n\t\tthis.removeListeners?.();\n\t\tthis.removeListeners = undefined;\n\t\tthis.canvas = undefined;\n\t\tthis.touches.clear();\n\t}\n\n\tprivate handleTouchStart(event: TouchEvent): void {\n\t\tif (!this.canvas) return;\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tfor (let i = 0; i < event.changedTouches.length; i++) {\n\t\t\tconst t = event.changedTouches[i];\n\t\t\tconst { x, y } = computeRelativePosition(this.canvas, t.clientX, t.clientY);\n\t\t\tthis.touches.set(t.identifier, {\n\t\t\t\tx,\n\t\t\t\ty,\n\t\t\t});\n\t\t\tthis.mouse.syncFromTouch(x, y, true);\n\t\t}\n\t}\n\n\tprivate handleTouchMove(event: TouchEvent): void {\n\t\tif (!this.canvas) return;\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tfor (let i = 0; i < event.changedTouches.length; i++) {\n\t\t\tconst t = event.changedTouches[i];\n\t\t\tif (!this.touches.has(t.identifier)) continue;\n\t\t\tconst { x, y } = computeRelativePosition(this.canvas, t.clientX, t.clientY);\n\t\t\tthis.touches.set(t.identifier, {\n\t\t\t\tx,\n\t\t\t\ty,\n\t\t\t});\n\t\t\tthis.mouse.syncFromTouch(x, y, true);\n\t\t}\n\t}\n\n\tprivate handleTouchEnd(event: TouchEvent): void {\n\t\tif (!this.canvas) return;\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tfor (let i = 0; i < event.changedTouches.length; i++) {\n\t\t\tconst t = event.changedTouches[i];\n\t\t\tthis.touches.delete(t.identifier);\n\t\t}\n\t\tthis.mouse.syncFromTouch(this.state.x, this.state.y, false);\n\t}\n}\n"],"mappings":"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","names":["APIErrorCode","reportRuntimeError","createState","press","release","BUTTONS_MAP","TRIGGERS_MAP","ensureState","state","GamepadInput","status","previous","count","global","update","pads","getGamepads","padCount","i","length","pad","index","name","Object","entries","idx","Number","button","buttons","pressed","trigger","value","axes","updateStick","aggregateStatus","updateChanges","navigator","x","y","target","prefix","radius","Math","sqrt","angle","floor","atan2","PI","UP","DOWN","LEFT","RIGHT","LEFT_STICK_UP","LEFT_STICK_DOWN","LEFT_STICK_LEFT","LEFT_STICK_RIGHT","RIGHT_STICK_UP","RIGHT_STICK_DOWN","RIGHT_STICK_LEFT","RIGHT_STICK_RIGHT","LEFT_STICK_ANGLE","LEFT_STICK_AMOUNT","RIGHT_STICK_ANGLE","RIGHT_STICK_AMOUNT","RT","LT","padState","DPAD_UP","DPAD_DOWN","DPAD_LEFT","DPAD_RIGHT","current","key","NORMALIZED_SCALE","OUT_OF_BOUNDS","PREVENT_DEFAULT_REGEX","TOUCH_MOUSE_ID","hasDocument","document","computeRelativePosition","canvas","clientX","clientY","rect","getBoundingClientRect","min","Math","clientWidth","clientHeight","x","left","NORMALIZED_SCALE","y","top","KeyboardInput","state","press","release","UP","DOWN","LEFT","RIGHT","previous","dirtyKeys","Set","target","hasDocument","document","undefined","addEventListener","event","handleKeyDown","handleKeyUp","convertCode","code","res","low","i","length","c","charAt","toUpperCase","altKey","ctrlKey","metaKey","PREVENT_DEFAULT_REGEX","test","key","preventDefault","codeKey","upperKey","add","updateDirectional","KEY_W","ARROW_UP","KEY_S","ARROW_DOWN","KEY_A","ARROW_LEFT","KEY_D","ARROW_RIGHT","update","current","prev","clear","reset","MouseInput","state","x","OUT_OF_BOUNDS","y","pressed","left","middle","right","press","release","wheel","previousPressed","canvas","removeListeners","setCanvas","detach","attach","syncFromTouch","touching","update","hasDocument","target","document","onDown","event","handleMouseDown","onMove","handleMouseMove","onUp","handleMouseUp","onWheel","handleWheel","onDomWheel","addEventListener","passive","removeEventListener","undefined","preventDefault","computeRelativePosition","clientX","clientY","button","Math","min","wheelEvent","deltaY","wheelDelta","detail","TouchInput","state","touching","x","y","press","release","touches","Map","previousTouching","canvas","removeListeners","mouse","setCanvas","detach","attach","update","syncMouseTouch","list","id","entries","push","size","mouseState","pressed","set","TOUCH_MOUSE_ID","delete","hasDocument","onStart","event","handleTouchStart","onMove","handleTouchMove","onEnd","handleTouchEnd","document","addEventListener","passive","removeEventListener","undefined","clear","preventDefault","stopPropagation","i","changedTouches","length","t","computeRelativePosition","clientX","clientY","identifier","syncFromTouch","has","Input","keyboard","mouse","touch","gamepad","runtime","canvas","KeyboardInput","MouseInput","TouchInput","GamepadInput","update","getKeyboard","state","reportRuntimeError","listener","APIErrorCode","E7052","error","getMouse","getTouch","getGamepad","navigator","getGamepads","E7051","device","setCanvas"]}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/shared/constants.ts
|
|
21
|
+
var constants_exports = {};
|
|
22
|
+
__export(constants_exports, {
|
|
23
|
+
NORMALIZED_SCALE: () => NORMALIZED_SCALE,
|
|
24
|
+
OUT_OF_BOUNDS: () => OUT_OF_BOUNDS,
|
|
25
|
+
PREVENT_DEFAULT_REGEX: () => PREVENT_DEFAULT_REGEX,
|
|
26
|
+
TOUCH_MOUSE_ID: () => TOUCH_MOUSE_ID
|
|
27
|
+
});
|
|
28
|
+
module.exports = __toCommonJS(constants_exports);
|
|
29
|
+
var NORMALIZED_SCALE = 200;
|
|
30
|
+
var OUT_OF_BOUNDS = -1e4;
|
|
31
|
+
var PREVENT_DEFAULT_REGEX = /Escape|(F\d+)/;
|
|
32
|
+
var TOUCH_MOUSE_ID = "mouse";
|
|
33
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
34
|
+
0 && (module.exports = {
|
|
35
|
+
NORMALIZED_SCALE,
|
|
36
|
+
OUT_OF_BOUNDS,
|
|
37
|
+
PREVENT_DEFAULT_REGEX,
|
|
38
|
+
TOUCH_MOUSE_ID
|
|
39
|
+
});
|
|
40
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/shared/constants.ts"],"sourcesContent":["export const NORMALIZED_SCALE = 200;\nexport const OUT_OF_BOUNDS = -10000;\nexport const PREVENT_DEFAULT_REGEX = /Escape|(F\\d+)/;\nexport const TOUCH_MOUSE_ID = \"mouse\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;AAAO,IAAMA,mBAAmB;AACzB,IAAMC,gBAAgB;AACtB,IAAMC,wBAAwB;AAC9B,IAAMC,iBAAiB;","names":["NORMALIZED_SCALE","OUT_OF_BOUNDS","PREVENT_DEFAULT_REGEX","TOUCH_MOUSE_ID"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// src/shared/constants.ts
|
|
2
|
+
var NORMALIZED_SCALE = 200;
|
|
3
|
+
var OUT_OF_BOUNDS = -1e4;
|
|
4
|
+
var PREVENT_DEFAULT_REGEX = /Escape|(F\d+)/;
|
|
5
|
+
var TOUCH_MOUSE_ID = "mouse";
|
|
6
|
+
export {
|
|
7
|
+
NORMALIZED_SCALE,
|
|
8
|
+
OUT_OF_BOUNDS,
|
|
9
|
+
PREVENT_DEFAULT_REGEX,
|
|
10
|
+
TOUCH_MOUSE_ID
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=constants.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/shared/constants.ts"],"sourcesContent":["export const NORMALIZED_SCALE = 200;\nexport const OUT_OF_BOUNDS = -10000;\nexport const PREVENT_DEFAULT_REGEX = /Escape|(F\\d+)/;\nexport const TOUCH_MOUSE_ID = \"mouse\";\n"],"mappings":";AAAO,IAAMA,mBAAmB;AACzB,IAAMC,gBAAgB;AACtB,IAAMC,wBAAwB;AAC9B,IAAMC,iBAAiB;","names":["NORMALIZED_SCALE","OUT_OF_BOUNDS","PREVENT_DEFAULT_REGEX","TOUCH_MOUSE_ID"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
interface RelativePosition {
|
|
2
|
+
x: number;
|
|
3
|
+
y: number;
|
|
4
|
+
}
|
|
5
|
+
declare const hasDocument: boolean;
|
|
6
|
+
declare const computeRelativePosition: (canvas: HTMLCanvasElement, clientX: number, clientY: number) => RelativePosition;
|
|
7
|
+
declare const addEventListener: <K extends keyof DocumentEventMap>(target: Document | HTMLElement, type: K, listener: (this: Document | HTMLElement, ev: DocumentEventMap[K]) => any) => void;
|
|
8
|
+
|
|
9
|
+
export { addEventListener, computeRelativePosition, hasDocument };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
interface RelativePosition {
|
|
2
|
+
x: number;
|
|
3
|
+
y: number;
|
|
4
|
+
}
|
|
5
|
+
declare const hasDocument: boolean;
|
|
6
|
+
declare const computeRelativePosition: (canvas: HTMLCanvasElement, clientX: number, clientY: number) => RelativePosition;
|
|
7
|
+
declare const addEventListener: <K extends keyof DocumentEventMap>(target: Document | HTMLElement, type: K, listener: (this: Document | HTMLElement, ev: DocumentEventMap[K]) => any) => void;
|
|
8
|
+
|
|
9
|
+
export { addEventListener, computeRelativePosition, hasDocument };
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
20
|
+
|
|
21
|
+
// src/shared/utils.ts
|
|
22
|
+
var utils_exports = {};
|
|
23
|
+
__export(utils_exports, {
|
|
24
|
+
addEventListener: () => addEventListener,
|
|
25
|
+
computeRelativePosition: () => computeRelativePosition,
|
|
26
|
+
hasDocument: () => hasDocument
|
|
27
|
+
});
|
|
28
|
+
module.exports = __toCommonJS(utils_exports);
|
|
29
|
+
|
|
30
|
+
// src/shared/constants.ts
|
|
31
|
+
var NORMALIZED_SCALE = 200;
|
|
32
|
+
|
|
33
|
+
// src/shared/utils.ts
|
|
34
|
+
var hasDocument = typeof document !== "undefined";
|
|
35
|
+
var computeRelativePosition = /* @__PURE__ */ __name((canvas, clientX, clientY) => {
|
|
36
|
+
const rect = canvas.getBoundingClientRect();
|
|
37
|
+
const min = Math.min(canvas.clientWidth, canvas.clientHeight) || 1;
|
|
38
|
+
const x = (clientX - rect.left - canvas.clientWidth / 2) / min * NORMALIZED_SCALE;
|
|
39
|
+
const y = (canvas.clientHeight / 2 - (clientY - rect.top)) / min * NORMALIZED_SCALE;
|
|
40
|
+
return {
|
|
41
|
+
x,
|
|
42
|
+
y
|
|
43
|
+
};
|
|
44
|
+
}, "computeRelativePosition");
|
|
45
|
+
var addEventListener = /* @__PURE__ */ __name((target, type, listener) => {
|
|
46
|
+
target.addEventListener(type, listener, {
|
|
47
|
+
passive: false
|
|
48
|
+
});
|
|
49
|
+
}, "addEventListener");
|
|
50
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
51
|
+
0 && (module.exports = {
|
|
52
|
+
addEventListener,
|
|
53
|
+
computeRelativePosition,
|
|
54
|
+
hasDocument
|
|
55
|
+
});
|
|
56
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/shared/utils.ts","../../src/shared/constants.ts"],"sourcesContent":["import { NORMALIZED_SCALE } from \"./constants\";\n\ninterface RelativePosition {\n\tx: number;\n\ty: number;\n}\n\nexport const hasDocument = typeof document !== \"undefined\";\n\nexport const computeRelativePosition = (\n\tcanvas: HTMLCanvasElement,\n\tclientX: number,\n\tclientY: number,\n): RelativePosition => {\n\tconst rect = canvas.getBoundingClientRect();\n\tconst min = Math.min(canvas.clientWidth, canvas.clientHeight) || 1;\n\tconst x = ((clientX - rect.left - canvas.clientWidth / 2) / min) * NORMALIZED_SCALE;\n\tconst y = ((canvas.clientHeight / 2 - (clientY - rect.top)) / min) * NORMALIZED_SCALE;\n\treturn {\n\t\tx,\n\t\ty,\n\t};\n};\n\nexport const addEventListener = <K extends keyof DocumentEventMap>(\n\ttarget: Document | HTMLElement,\n\ttype: K,\n\tlistener: (this: Document | HTMLElement, ev: DocumentEventMap[K]) => any,\n): void => {\n\ttarget.addEventListener(type, listener as EventListener, {\n\t\tpassive: false,\n\t});\n};\n","export const NORMALIZED_SCALE = 200;\nexport const OUT_OF_BOUNDS = -10000;\nexport const PREVENT_DEFAULT_REGEX = /Escape|(F\\d+)/;\nexport const TOUCH_MOUSE_ID = \"mouse\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;ACAO,IAAMA,mBAAmB;;;ADOzB,IAAMC,cAAc,OAAOC,aAAa;AAExC,IAAMC,0BAA0B,wBACtCC,QACAC,SACAC,YAAAA;AAEA,QAAMC,OAAOH,OAAOI,sBAAqB;AACzC,QAAMC,MAAMC,KAAKD,IAAIL,OAAOO,aAAaP,OAAOQ,YAAY,KAAK;AACjE,QAAMC,KAAMR,UAAUE,KAAKO,OAAOV,OAAOO,cAAc,KAAKF,MAAOM;AACnE,QAAMC,KAAMZ,OAAOQ,eAAe,KAAKN,UAAUC,KAAKU,QAAQR,MAAOM;AACrE,SAAO;IACNF;IACAG;EACD;AACD,GAbuC;AAehC,IAAME,mBAAmB,wBAC/BC,QACAC,MACAC,aAAAA;AAEAF,SAAOD,iBAAiBE,MAAMC,UAA2B;IACxDC,SAAS;EACV,CAAA;AACD,GARgC;","names":["NORMALIZED_SCALE","hasDocument","document","computeRelativePosition","canvas","clientX","clientY","rect","getBoundingClientRect","min","Math","clientWidth","clientHeight","x","left","NORMALIZED_SCALE","y","top","addEventListener","target","type","listener","passive"]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
|
|
4
|
+
// src/shared/constants.ts
|
|
5
|
+
var NORMALIZED_SCALE = 200;
|
|
6
|
+
|
|
7
|
+
// src/shared/utils.ts
|
|
8
|
+
var hasDocument = typeof document !== "undefined";
|
|
9
|
+
var computeRelativePosition = /* @__PURE__ */ __name((canvas, clientX, clientY) => {
|
|
10
|
+
const rect = canvas.getBoundingClientRect();
|
|
11
|
+
const min = Math.min(canvas.clientWidth, canvas.clientHeight) || 1;
|
|
12
|
+
const x = (clientX - rect.left - canvas.clientWidth / 2) / min * NORMALIZED_SCALE;
|
|
13
|
+
const y = (canvas.clientHeight / 2 - (clientY - rect.top)) / min * NORMALIZED_SCALE;
|
|
14
|
+
return {
|
|
15
|
+
x,
|
|
16
|
+
y
|
|
17
|
+
};
|
|
18
|
+
}, "computeRelativePosition");
|
|
19
|
+
var addEventListener = /* @__PURE__ */ __name((target, type, listener) => {
|
|
20
|
+
target.addEventListener(type, listener, {
|
|
21
|
+
passive: false
|
|
22
|
+
});
|
|
23
|
+
}, "addEventListener");
|
|
24
|
+
export {
|
|
25
|
+
addEventListener,
|
|
26
|
+
computeRelativePosition,
|
|
27
|
+
hasDocument
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=utils.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/shared/constants.ts","../../src/shared/utils.ts"],"sourcesContent":["export const NORMALIZED_SCALE = 200;\nexport const OUT_OF_BOUNDS = -10000;\nexport const PREVENT_DEFAULT_REGEX = /Escape|(F\\d+)/;\nexport const TOUCH_MOUSE_ID = \"mouse\";\n","import { NORMALIZED_SCALE } from \"./constants\";\n\ninterface RelativePosition {\n\tx: number;\n\ty: number;\n}\n\nexport const hasDocument = typeof document !== \"undefined\";\n\nexport const computeRelativePosition = (\n\tcanvas: HTMLCanvasElement,\n\tclientX: number,\n\tclientY: number,\n): RelativePosition => {\n\tconst rect = canvas.getBoundingClientRect();\n\tconst min = Math.min(canvas.clientWidth, canvas.clientHeight) || 1;\n\tconst x = ((clientX - rect.left - canvas.clientWidth / 2) / min) * NORMALIZED_SCALE;\n\tconst y = ((canvas.clientHeight / 2 - (clientY - rect.top)) / min) * NORMALIZED_SCALE;\n\treturn {\n\t\tx,\n\t\ty,\n\t};\n};\n\nexport const addEventListener = <K extends keyof DocumentEventMap>(\n\ttarget: Document | HTMLElement,\n\ttype: K,\n\tlistener: (this: Document | HTMLElement, ev: DocumentEventMap[K]) => any,\n): void => {\n\ttarget.addEventListener(type, listener as EventListener, {\n\t\tpassive: false,\n\t});\n};\n"],"mappings":";;;;AAAO,IAAMA,mBAAmB;;;ACOzB,IAAMC,cAAc,OAAOC,aAAa;AAExC,IAAMC,0BAA0B,wBACtCC,QACAC,SACAC,YAAAA;AAEA,QAAMC,OAAOH,OAAOI,sBAAqB;AACzC,QAAMC,MAAMC,KAAKD,IAAIL,OAAOO,aAAaP,OAAOQ,YAAY,KAAK;AACjE,QAAMC,KAAMR,UAAUE,KAAKO,OAAOV,OAAOO,cAAc,KAAKF,MAAOM;AACnE,QAAMC,KAAMZ,OAAOQ,eAAe,KAAKN,UAAUC,KAAKU,QAAQR,MAAOM;AACrE,SAAO;IACNF;IACAG;EACD;AACD,GAbuC;AAehC,IAAME,mBAAmB,wBAC/BC,QACAC,MACAC,aAAAA;AAEAF,SAAOD,iBAAiBE,MAAMC,UAA2B;IACxDC,SAAS;EACV,CAAA;AACD,GARgC;","names":["NORMALIZED_SCALE","hasDocument","document","computeRelativePosition","canvas","clientX","clientY","rect","getBoundingClientRect","min","Math","clientWidth","clientHeight","x","left","NORMALIZED_SCALE","y","top","addEventListener","target","type","listener","passive"]}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared input type definitions for game input handling.
|
|
3
|
+
*/
|
|
4
|
+
interface KeyboardPressRelease {
|
|
5
|
+
[key: string]: number;
|
|
6
|
+
}
|
|
7
|
+
interface KeyboardState extends Record<string, number | KeyboardPressRelease> {
|
|
8
|
+
press: KeyboardPressRelease;
|
|
9
|
+
release: KeyboardPressRelease;
|
|
10
|
+
UP: number;
|
|
11
|
+
DOWN: number;
|
|
12
|
+
LEFT: number;
|
|
13
|
+
RIGHT: number;
|
|
14
|
+
}
|
|
15
|
+
interface MouseState {
|
|
16
|
+
x: number;
|
|
17
|
+
y: number;
|
|
18
|
+
pressed: number;
|
|
19
|
+
left: number;
|
|
20
|
+
middle: number;
|
|
21
|
+
right: number;
|
|
22
|
+
press: number;
|
|
23
|
+
release: number;
|
|
24
|
+
wheel: number;
|
|
25
|
+
}
|
|
26
|
+
interface TouchPoint {
|
|
27
|
+
x: number;
|
|
28
|
+
y: number;
|
|
29
|
+
id: number | string;
|
|
30
|
+
}
|
|
31
|
+
interface TouchState {
|
|
32
|
+
touching: number;
|
|
33
|
+
x: number;
|
|
34
|
+
y: number;
|
|
35
|
+
press: number;
|
|
36
|
+
release: number;
|
|
37
|
+
touches: TouchPoint[];
|
|
38
|
+
}
|
|
39
|
+
type PointerIdentifier = number | string;
|
|
40
|
+
|
|
41
|
+
export type { KeyboardPressRelease, KeyboardState, MouseState, PointerIdentifier, TouchPoint, TouchState };
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared input type definitions for game input handling.
|
|
3
|
+
*/
|
|
4
|
+
interface KeyboardPressRelease {
|
|
5
|
+
[key: string]: number;
|
|
6
|
+
}
|
|
7
|
+
interface KeyboardState extends Record<string, number | KeyboardPressRelease> {
|
|
8
|
+
press: KeyboardPressRelease;
|
|
9
|
+
release: KeyboardPressRelease;
|
|
10
|
+
UP: number;
|
|
11
|
+
DOWN: number;
|
|
12
|
+
LEFT: number;
|
|
13
|
+
RIGHT: number;
|
|
14
|
+
}
|
|
15
|
+
interface MouseState {
|
|
16
|
+
x: number;
|
|
17
|
+
y: number;
|
|
18
|
+
pressed: number;
|
|
19
|
+
left: number;
|
|
20
|
+
middle: number;
|
|
21
|
+
right: number;
|
|
22
|
+
press: number;
|
|
23
|
+
release: number;
|
|
24
|
+
wheel: number;
|
|
25
|
+
}
|
|
26
|
+
interface TouchPoint {
|
|
27
|
+
x: number;
|
|
28
|
+
y: number;
|
|
29
|
+
id: number | string;
|
|
30
|
+
}
|
|
31
|
+
interface TouchState {
|
|
32
|
+
touching: number;
|
|
33
|
+
x: number;
|
|
34
|
+
y: number;
|
|
35
|
+
press: number;
|
|
36
|
+
release: number;
|
|
37
|
+
touches: TouchPoint[];
|
|
38
|
+
}
|
|
39
|
+
type PointerIdentifier = number | string;
|
|
40
|
+
|
|
41
|
+
export type { KeyboardPressRelease, KeyboardState, MouseState, PointerIdentifier, TouchPoint, TouchState };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __copyProps = (to, from, except, desc) => {
|
|
7
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
8
|
+
for (let key of __getOwnPropNames(from))
|
|
9
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
10
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
11
|
+
}
|
|
12
|
+
return to;
|
|
13
|
+
};
|
|
14
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
15
|
+
|
|
16
|
+
// src/types/index.ts
|
|
17
|
+
var types_exports = {};
|
|
18
|
+
module.exports = __toCommonJS(types_exports);
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/types/index.ts"],"sourcesContent":["/**\n * Shared input type definitions for game input handling.\n */\n\nexport interface KeyboardPressRelease {\n\t[key: string]: number;\n}\n\nexport interface KeyboardState extends Record<string, number | KeyboardPressRelease> {\n\tpress: KeyboardPressRelease;\n\trelease: KeyboardPressRelease;\n\tUP: number;\n\tDOWN: number;\n\tLEFT: number;\n\tRIGHT: number;\n}\n\nexport interface MouseState {\n\tx: number;\n\ty: number;\n\tpressed: number;\n\tleft: number;\n\tmiddle: number;\n\tright: number;\n\tpress: number;\n\trelease: number;\n\twheel: number;\n}\n\nexport interface TouchPoint {\n\tx: number;\n\ty: number;\n\tid: number | string;\n}\n\nexport interface TouchState {\n\ttouching: number;\n\tx: number;\n\ty: number;\n\tpress: number;\n\trelease: number;\n\ttouches: TouchPoint[];\n}\n\nexport type PointerIdentifier = number | string;\n"],"mappings":";;;;;;;;;;;;;;;;AAAA;;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/package.json
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@al8b/input",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"sideEffects": false,
|
|
5
|
+
"files": [
|
|
6
|
+
"dist/**/*",
|
|
7
|
+
"README.md",
|
|
8
|
+
"package.json"
|
|
9
|
+
],
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsup",
|
|
12
|
+
"clean": "bun --bun ../../../scripts/clean-package.mjs dist",
|
|
13
|
+
"test": "vitest run --passWithNoTests"
|
|
14
|
+
},
|
|
15
|
+
"main": "./dist/index.js",
|
|
16
|
+
"module": "./dist/index.mjs",
|
|
17
|
+
"types": "./dist/index.d.ts",
|
|
18
|
+
"exports": {
|
|
19
|
+
".": {
|
|
20
|
+
"types": "./dist/index.d.ts",
|
|
21
|
+
"import": "./dist/index.mjs",
|
|
22
|
+
"require": "./dist/index.js"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"@al8b/diagnostics": "workspace:*"
|
|
27
|
+
},
|
|
28
|
+
"keywords": [
|
|
29
|
+
"input"
|
|
30
|
+
],
|
|
31
|
+
"publishConfig": {
|
|
32
|
+
"access": "public"
|
|
33
|
+
}
|
|
34
|
+
}
|