Tracks gamepads in stable slots and gives access to the keyboard and mouse. Call update once
per frame. A reconnected gamepad returns to its old slot.
import { PMREMGenerator } from 'three';
import { RoomEnvironment } from 'three/addons/environments/RoomEnvironment.js';
import { ControllerManager } from 'gamepad-manager';
import { DualShockControllerModel, XboxControllerModel } from 'gamepad-manager/three';
// scene, camera and renderer are initialized here
scene.environment = new PMREMGenerator( renderer ).fromScene( new RoomEnvironment() ).texture;
camera.position.set( 0, - 0.1, 1.27 );
const xbox = new XboxControllerModel();
const dualShock = new DualShockControllerModel();
xbox.rotation.x = 0.95;
dualShock.rotation.x = 0.95;
scene.add( xbox, dualShock );
await Promise.all( [ xbox.loaded, dualShock.loaded ] );
const manager = new ControllerManager();
const pad = manager.getController( 0 );
pad.addEventListener( 'pressed', () => {
if ( pad.hasRumble ) {
pad.rumble( 'dual-rumble', { duration: 150, strongMagnitude: 0.8, weakMagnitude: 0.6 } );
}
} );
const status = document.createElement( 'div' );
status.textContent = 'Plug in a controller and press a button';
status.style.cssText = 'position: absolute; top: 16px; width: 100%; text-align: center; font: 14px sans-serif; color: #888;';
document.body.append( status );
renderer.setAnimationLoop( () => {
manager.update();
dualShock.visible = pad.brand === 'playstation';
xbox.visible = ! dualShock.visible;
xbox.setFromController( pad );
dualShock.setFromController( pad );
status.hidden = pad.connected;
renderer.render( scene, camera );
} );On this page
Events
{ type: 'connected', controller: GamepadController, slot: number }Fired when a gamepad connects. The event object is reused.
{ type: 'disconnected', controller: GamepadController, slot: number }Fired when a gamepad disconnects. The event object is reused.
Properties
controllers: Array<GamepadController>
Gamepads by slot, kept after disconnecting.
lastActive: Controller | null
The device used most recently, e.g. for picking which button prompts to show.
Methods
getController( slot: number ): GamepadControllerThe gamepad in a slot, created if needed so listeners can be added before one connects.
Check connected before using it.
getKeyboard(): KeyboardControllerThe keyboard, created on the first call.
getMouse(): MouseControllerThe mouse, created on the first call.
update(): voidUpdates every device. Call once per frame.
reassignSlots(): voidRemoves disconnected gamepads and moves the rest down to fill the slots from 0.
dispose(): voidRemoves the keyboard and mouse event listeners.