Source: controls/Gamepad.js

/**
 * Gamepad input handling
 * @class Gamepad
 */
export class Gamepad {
  get gamepads() {
    return navigator.getGamepads
      ? navigator.getGamepads()
      : navigator.webkitGetGamepads || [];
  }

  get(id) {
    const gamepad = this.gamepads[id];
    return gamepad
      ? {
          axes: gamepad.axes.map((value) =>
            Math.abs(value) >= 0.05 ? value : 0
          ),
          buttons: gamepad.buttons.map((button) =>
            typeof button === "number"
              ? { pressed: button === 1, touched: button === 1, value: button }
              : button
          ),
          timestamp: gamepad.timestamp,
        }
      : null;
  }
}