diff --git a/gamepad/gamepad-tests.ts b/gamepad/gamepad-tests.ts index 4b0cddcad..6bf80458d 100644 --- a/gamepad/gamepad-tests.ts +++ b/gamepad/gamepad-tests.ts @@ -19,24 +19,22 @@ }; (()=>{ - window.addEventListener('GamepadConnected', (e: Gamepad.GamepadEvent)=>{ + var gamepadconnected = (e: Gamepad.GamepadEvent) => { console.log('Gamepad ' + e.gamepad.index + ' connected!'); - }, false); - window.addEventListener('GamepadDisconnected', (e: Gamepad.GamepadEvent)=>{ + if(e.gamepad.mapping == 'standard'){ + console.log("The Gamepad's controls have been mapped to the Standard Gamepad layout."); + } + }; + var gamepaddisconnected = (e: Gamepad.GamepadEvent) => { console.log('Gamepad ' + e.gamepad.index + ' disconnected!'); - }, false); - window.addEventListener('webkitGamepadConnected', (e: Gamepad.GamepadEvent)=>{ - console.log('Gamepad ' + e.gamepad.index + ' connected!'); - }, false); - window.addEventListener('webkitGamepadDisconnected', (e: Gamepad.GamepadEvent)=>{ - console.log('Gamepad ' + e.gamepad.index + ' disconnected!'); - }, false); - window.addEventListener('mozGamepadConnected', (e: Gamepad.GamepadEvent)=>{ - console.log('Gamepad ' + e.gamepad.index + ' connected!'); - }, false); - window.addEventListener('mozGamepadDisconnected', (e: Gamepad.GamepadEvent)=>{ - console.log('Gamepad ' + e.gamepad.index + ' disconnected!'); - }, false); + }; + + window.addEventListener('GamepadConnected', gamepadconnected, false); + window.addEventListener('GamepadDisconnected', gamepaddisconnected, false); + window.addEventListener('webkitGamepadConnected', gamepadconnected, false); + window.addEventListener('webkitGamepadDisconnected', gamepaddisconnected, false); + window.addEventListener('mozGamepadConnected', gamepadconnected, false); + window.addEventListener('mozGamepadDisconnected', gamepaddisconnected, false); var requestAnimationFrame = window.requestAnimationFrame || (window).mozRequestAnimationFrame; var getGamepads = navigator.getGamepads || navigator.webkitGetGamepads; @@ -45,13 +43,13 @@ { requestAnimationFrame.call(window, runAnimation); - var gamepads: Gamepad.GamepadList = getGamepads.call(navigator); + var gamepads: Gamepad.Gamepad[] = getGamepads.call(navigator); for(var i = 0; i < gamepads.length; i++){ var pad: Gamepad.Gamepad = gamepads[i]; - if(pad){ + if(pad && pad.connected){ for (var k = 0; k < pad.buttons.length; k++) { - var button = pad.buttons[k]; + var button: Gamepad.GamepadButton = pad.buttons[k]; if(button.pressed){ console.log('pad[' + pad.index + ']: ' + 'time=' + pad.timestamp + ' id="' + pad.id + '" button[' + k + '] = ' + button.value); } diff --git a/gamepad/gamepad.d.ts b/gamepad/gamepad.d.ts index 69ef795fb..647eb1fe6 100644 --- a/gamepad/gamepad.d.ts +++ b/gamepad/gamepad.d.ts @@ -37,6 +37,18 @@ declare module Gamepad{ * @readonly */ buttons:GamepadButton[]; + + /** + * Indicates whether the physical device represented by this object is still connected to the system. When a gamepad becomes unavailable, whether by being physically disconnected, powered off or otherwise unusable, the connected attribute must be set to false. + * @readonly + */ + connected:boolean; + + /** + * The mapping in use for this device. If the user agent has knowledge of the layout of the device, then it should indicate that a mapping is in use by setting this property to a known mapping name. Currently the only known mapping is "standard", which corresponds to the Standard Gamepad layout. If the user agent does not have knowledge of the device layout and is simply providing the controls as represented by the driver in use, then it must set the mapping property to an empty string. + * @readonly + */ + mapping:string; } /**