npm.io
0.13.1 • Published yesterday

@gjsify/gamepad

Licence
MIT
Version
0.13.1
Deps
1
Size
20 kB
Vulns
0
Weekly
1.7K

@gjsify/gamepad

The W3C Gamepad API for GJS, backed by libmanette 0.2. Provides navigator.getGamepads() polling, Gamepad, GamepadButton, gamepadconnected/gamepaddisconnected events, and dual-rumble haptics via GamepadHapticActuator. The Manette monitor is lazily initialised and degrades gracefully when libmanette is unavailable.

Part of the gjsify project — Node.js and Web APIs for GJS (GNOME JavaScript).

Installation

gjsify install @gjsify/gamepad

# npm or yarn also work (e.g. adding it to an existing project):
npm install @gjsify/gamepad
yarn add @gjsify/gamepad

Usage

import { GamepadManager, GamepadEvent } from '@gjsify/gamepad';

// Start monitoring connected gamepads
const manager = new GamepadManager();

window.addEventListener('gamepadconnected', (e) => {
    const event = e as GamepadEvent;
    const pad = event.gamepad;
    console.log(`Connected: ${pad.id}, buttons: ${pad.buttons.length}`);
});

window.addEventListener('gamepaddisconnected', (e) => {
    console.log(`Disconnected: ${(e as GamepadEvent).gamepad.id}`);
});

// Poll the current state
const gamepads = navigator.getGamepads();
for (const pad of gamepads) {
    if (pad) console.log(pad.axes, pad.buttons.map((b) => b.pressed));
}

License

MIT

Keywords