- From: Marcos Cáceres <notifications@github.com>
- Date: Thu, 07 Nov 2019 20:18:06 -0800
- To: w3c/gamepad <gamepad@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <w3c/gamepad/pull/123/review/313727559@github.com>
marcoscaceres requested changes on this pull request. Couple of issues... the button attribute returning a new object sometimes might be a problem, so we should figure something out there. > @@ -209,7 +209,11 @@ <h2> <dfn>Gamepad</dfn> interface </h2> <p> - This interface defines an individual gamepad device. + This interface represents an individual gamepad device. A Gamepad is a + live object; that is, user interaction with the device will be reflected ```suggestion live object; that is, user interaction with the device are periodically reflected ``` > @@ -230,45 +234,75 @@ <h2> <dd> An identification string for the gamepad. This string identifies the brand or style of connected gamepad device. Typically, this will - include the USB vendor and a product ID. + include the USB vendor and a product ID. The ID string MUST NOT change + once the Gamepad object has been returned to script. We probably don't need to say (unless this has happened in practice?): > The ID string MUST NOT change once the Gamepad object has been returned to script. As nothing in the spec causes the to change. > + Zero-based index of the gamepad in the {{Navigator}}. The index + MUST NOT change once the Gamepad object has been returned to script. + </p> + <p> + When the system is notified that a gamepad has been connected, + its index attribute MUST be assigned to the lowest index that is not + assigned to any currently connected gamepad, starting at zero. + </p> + <p> + When the system is notified that a previously connected gamepad has + become unavailable, the `index` attribute of other gamepads MUST NOT + be reassigned. However, if a gamepad is disconnected, and + subsequently the same or a different gamepad is connected, the + lowest previously used index MUST be assigned to the newly connected + gamepad. + </p> Should we add an example for clarity? 1. getGamepads() returns - [pad1, pad2] 1. pad1 disconnects 1. getGamepads() returns - [null, pad2] 1. pad3 connects, event fire 1. getGamepads() returns - [pad3, pad2] 1 pad1 re-connects 1. getGamepads() returns - [pad3, pad2, pad1] > If no data has been received from the hardware, the value of the - <code>timestamp</code> attribute should be the time relative to + <code>timestamp</code> attribute MUST be the time relative to ```suggestion `timestamp` attribute MUST be the time relative to ``` > - the <a>user agent</a> needs to return different values (or values in - a different order). + axis of a directional stick. + </p> + <p> + When the system receives new data from a connected gamepad, a + microtask MUST be queued with the user interaction task source to + update the gamepad state. If the gamepad has the same axes in the same + order as the previous update, and if no axis values have changed + since the previous update, then the axes attribute MUST return the + same array object. If the number of axes has changed, or if any axis + value has changed, then the axis attribute MUST return a new array. + </p> + <p> + Once the system is notified that a previously connected gamepad has + been disconnected, the axes attribute MUST continue to return the ```suggestion been disconnected, the {{Gamepad/axes}} attribute MUST continue to return the ``` > - MUST be returned until the <a>user agent</a> needs to return - different values (or values in a different order). + <p> + Array of {{GamepadButton}} objects representing the current state of + all buttons of the gamepad. It is RECOMMENDED that buttons appear in + decreasing importance such that the primary button, secondary + button, tertiary button, and so on appear as elements 0, 1, 2, ... + in the buttons array. + </p> + <p> + When the system receives new data from a connected gamepad, a + microtask MUST be queued with the user interaction task source to + update the gamepad state. If the gamepad has the same buttons in the + same order as the previous update, the buttons attribute MUST return + the same array object. If the number of buttons or the ordering of + buttons has changed, the buttons attribute MUST return a new array Oh, this would break JS invariant: ``` a.foo === a.foo ``` The same array must always be returned... just the objects inside it might have changed. > + <p> + Array of {{GamepadButton}} objects representing the current state of + all buttons of the gamepad. It is RECOMMENDED that buttons appear in + decreasing importance such that the primary button, secondary + button, tertiary button, and so on appear as elements 0, 1, 2, ... + in the buttons array. + </p> + <p> + When the system receives new data from a connected gamepad, a + microtask MUST be queued with the user interaction task source to + update the gamepad state. If the gamepad has the same buttons in the + same order as the previous update, the buttons attribute MUST return + the same array object. If the number of buttons or the ordering of + buttons has changed, the buttons attribute MUST return a new array + object. If a button in the new array represents the same physical + button as a button from the previous array, the same GamepadButton ```suggestion button as a button from the previous array, the same {{GamepadButton}} ``` > @@ -428,6 +499,10 @@ <h2> each Gamepad present at the index in the array specified by its {{Gamepad/index}} attribute. Array indices for which there is no connected Gamepad with the corresponding index should return null. + + <p> + A new array MUST be returned for each call to getGamepads(). We can delete this and annotate getGamepads() with [`[NewObject]`](https://heycam.github.io/webidl/#NewObject). -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/w3c/gamepad/pull/123#pullrequestreview-313727559
Received on Friday, 8 November 2019 04:18:09 UTC