# GamePad

Class · category: Input

Source: https://github.com/playcanvas/engine/blob/b5b983982a9860d21e0c1dafb2f85f72e2c01afb/src/platform/input/game-pads.js#L357

A GamePad stores information about a gamepad from the Gamepad API.

## Properties

### hand

```ts
hand: string
```

The hand this gamepad is usually handled on. Only relevant for XR pads. Value is either "left", "right" or "none".

### id

```ts
id: string
```

The identifier for the gamepad. Its structure depends on device.

### index

```ts
index: number
```

The index for this controller. A gamepad that is disconnected and reconnected will retain the same index.

### map

```ts
map: any
```

The buttons and axes map.

### mapping

```ts
mapping: string
```

The gamepad mapping detected by the browser. Value is either "standard", "xr-standard", "" or "custom". When empty string, you may need to update the mapping yourself. "custom" means you updated the mapping.

## Accessors

### axes

```ts
get axes(): number[]
```

Gets the values from analog axes present on the GamePad. Values are between -1 and 1.

### buttons

```ts
get buttons(): GamePadButton[]
```

Gets the buttons present on the GamePad.

### connected

```ts
get connected(): boolean
```

Gets whether the gamepad is connected.

## Methods

### getAxis

```ts
getAxis(axis: number): number
```

Get the value of one of the analog axes of the pad.

**Parameters**

- `axis` (`number`): The axis to get the value of, use constants [PAD_L_STICK_X](https://api.playcanvas.com/engine/variables/PAD_L_STICK_X.md), etc.

**Returns** `number`: The value of the axis between -1 and 1.

### getButton

```ts
getButton(index: number): GamePadButton
```

Retrieve a button from its index.

**Parameters**

- `index` (`number`): The index to return the button for.

**Returns** [`GamePadButton`](https://api.playcanvas.com/engine/classes/GamePadButton.md): The button for the searched index. May be a placeholder if none found.

### getValue

```ts
getValue(button: number): number
```

Returns the value of a button between 0 and 1, with 0 representing a button that is not pressed, and 1 representing a button that is fully pressed.

**Parameters**

- `button` (`number`): The button to retrieve, use constants [PAD_FACE_1](https://api.playcanvas.com/engine/variables/PAD_FACE_1.md), etc.

**Returns** `number`: The value of the button between 0 and 1.

### isPressed

```ts
isPressed(button: number): boolean
```

Returns true if the button is pressed.

**Parameters**

- `button` (`number`): The button to test, use constants [PAD_FACE_1](https://api.playcanvas.com/engine/variables/PAD_FACE_1.md), etc.

**Returns** `boolean`: True if the button is pressed.

### isTouched

```ts
isTouched(button: number): boolean
```

Returns true if the button is touched.

**Parameters**

- `button` (`number`): The button to test, use constants [PAD_FACE_1](https://api.playcanvas.com/engine/variables/PAD_FACE_1.md), etc.

**Returns** `boolean`: True if the button is touched.

### pulse

```ts
pulse(intensity: number, duration: number, options?: object): Promise<boolean>
```

Make the gamepad vibrate.

**Parameters**

- `intensity` (`number`): Intensity for the vibration in the range 0 to 1.
- `duration` (`number`): Duration for the vibration in milliseconds.
- `options` (`object`, optional): Options for special vibration pattern.
    - `options.startDelay` (`number`, optional): Delay before the pattern starts, in milliseconds. Defaults to 0.
    - `options.strongMagnitude` (`number`, optional): Intensity for strong actuators in the range 0 to 1. Defaults to intensity.
    - `options.weakMagnitude` (`number`, optional): Intensity for weak actuators in the range 0 to 1. Defaults to intensity.

**Returns** `Promise<boolean>`: Return a Promise resulting in true if the pulse was successfully completed.

### resetMap

```ts
resetMap(): void
```

Reset gamepad mapping to default.

### updateMap

```ts
updateMap(map: object): void
```

Update the map for this gamepad.

**Parameters**

- `map` (`object`): The new mapping for this gamepad.
    - `map.axes` (`string[]`): Axes mapping for this gamepad.
    - `map.buttons` (`string[]`): Buttons mapping for this gamepad.
    - `map.mapping` (`"custom"`, optional): New mapping format. Will be forced into "custom".
    - `map.synthesizedButtons` (`any`, optional): Information about buttons to pull from axes for this gamepad. Requires definition of axis index, min value and max value.

**Example**

```ts
this.pad.updateMap({
    buttons: [[
        'PAD_FACE_1',
        'PAD_FACE_2',
        'PAD_FACE_3',
        'PAD_FACE_4',
        'PAD_L_SHOULDER_1',
        'PAD_R_SHOULDER_1',
        'PAD_L_SHOULDER_2',
        'PAD_R_SHOULDER_2',
        'PAD_SELECT',
        'PAD_START',
        'PAD_L_STICK_BUTTON',
        'PAD_R_STICK_BUTTON',
        'PAD_VENDOR'
    ],
    axes: [
        'PAD_L_STICK_X',
        'PAD_L_STICK_Y',
        'PAD_R_STICK_X',
        'PAD_R_STICK_Y'
    ],
    synthesizedButtons: {
        PAD_UP: { axis: 0, min: 0, max: 1 },
        PAD_DOWN: { axis: 0, min: -1, max: 0 },
        PAD_LEFT: { axis: 0, min: -1, max: 0 },
        PAD_RIGHT: { axis: 0, min: 0, max: 1 }
    }
});
```

### wasPressed

```ts
wasPressed(button: number): boolean
```

Return true if the button was pressed since the last update.

**Parameters**

- `button` (`number`): The button to test, use constants [PAD_FACE_1](https://api.playcanvas.com/engine/variables/PAD_FACE_1.md), etc.

**Returns** `boolean`: Return true if the button was pressed, false if not.

### wasReleased

```ts
wasReleased(button: number): boolean
```

Return true if the button was released since the last update.

**Parameters**

- `button` (`number`): The button to test, use constants [PAD_FACE_1](https://api.playcanvas.com/engine/variables/PAD_FACE_1.md), etc.

**Returns** `boolean`: Return true if the button was released, false if not.

### wasTouched

```ts
wasTouched(button: number): boolean
```

Return true if the button was touched since the last update.

**Parameters**

- `button` (`number`): The button to test, use constants [PAD_FACE_1](https://api.playcanvas.com/engine/variables/PAD_FACE_1.md), etc.

**Returns** `boolean`: Return true if the button was touched, false if not.
