- From: Matt Reynolds <notifications@github.com>
- Date: Tue, 14 Nov 2023 15:43:02 -0800
- To: w3c/gamepad <gamepad@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <w3c/gamepad/pull/190/review/1730967486@github.com>
@nondebug requested changes on this pull request. > + <td> + An empty [=list=] + </td> + <td> + A [=list=] containing the maximum logical value for each button + </td> + </tr> + <tr> + <td> + <dfn data-dfn-for="Gamepad">[[\vibrationActuator]]</dfn> + </td> + <td> + null + </td> + <td> + A {{GamepadHapticActuator}} object capable of generating a haptic effect that vibrates the entire gamepad. A {{GamepadHapticActuator}} object capable of generating a haptic effect that vibrates the entire gamepad, or null if the gamepad has no such capability. > + 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. The same + object MUST be returned until the [=user agent=] needs to return + different values (or values in a different order). + </p> + <p> + The {{Gamepad/buttons}} getter steps are: + </p> + <ol> + <li>Return [=this=].{{Gamepad/[[buttons]]}}. + </li> + </ol> + </dd> + <dt> + <dfn>vibrationActuator</dfn> attribute We should define algorithmic steps for the vibrationActuator attribute getter like we do for other attributes. ``` <p> The {{Gamepad/vibrationActuator}} getter steps are: </p> <ol> <li>Return [=this=].{{Gamepad/[[vibrationActuator]]}}. </li> </ol> ``` I think the paragraph below is no longer needed since we now define steps for initializing the internal slot in [=initialize the vibration actuator=]. > + </dd> + </dl> + </section> + <section data-dfn-for="GamepadHapticActuator" data-link-for="GamepadHapticActuator"> + <h2> + <dfn>GamepadHapticActuator</dfn> Interface + </h2> + <p> + A {{GamepadHapticActuator}} corresponds to a configuration of motors or + other actuators that can apply a force for the purposes of haptic + feedback. + </p> + <pre class="idl"> + [Exposed=Window] + interface GamepadHapticActuator { + readonly attribute GamepadHapticActuatorType type; Let's remove `GamepadHapticActuatorType type`, it is not needed now that we have `canPlayEffectType`. > + </dl> + </section> + <section data-dfn-for="GamepadHapticActuator" data-link-for="GamepadHapticActuator"> + <h2> + <dfn>GamepadHapticActuator</dfn> Interface + </h2> + <p> + A {{GamepadHapticActuator}} corresponds to a configuration of motors or + other actuators that can apply a force for the purposes of haptic + feedback. + </p> + <pre class="idl"> + [Exposed=Window] + interface GamepadHapticActuator { + readonly attribute GamepadHapticActuatorType type; + boolean canPlayEffectType(GamepadHapticEffectType type); In an earlier review [Marcos suggested](https://github.com/w3c/gamepad/pull/163#pullrequestreview-1000657433) some modifications to `canPlayEffectType`. I think there are no implementations yet so we are unconstrained. suggestion 1: rename to "canPlay" or "supports" suggestion 2: change the parameter to a DOMString so it's not an error to pass a new effect type to an old browser that doesn't recognize it suggestion 3: replace "canPlayEffectType" with an "effects" attribute that returns a FrozenArray of supported effect types Suggestion 3 seems best to me. > + with {{GamepadHapticsResult/"complete"}}. + </li> + <li>Set + [=this=].{{GamepadHapticActuator/[[playingEffectPromise]]}} + to `undefined`. + </li> + </ol> + </li> + </ol> + </li> + <li>Return {{GamepadHapticActuator/[[playingEffectPromise]]}}. + </li> + </ol> + </dd> + <dt> + <dfn>pulse()</dfn> method We should define steps for `pulse`. > + <dfn>Gamepad</dfn> interface + </h2> + <p> + This interface defines an individual gamepad device. + </p> + <pre class="idl" data-cite="HR-TIME"> + [Exposed=Window, SecureContext] + interface Gamepad { + readonly attribute DOMString id; + readonly attribute long index; + readonly attribute boolean connected; + readonly attribute DOMHighResTimeStamp timestamp; + readonly attribute GamepadMappingType mapping; + readonly attribute FrozenArray<double> axes; + readonly attribute FrozenArray<GamepadButton> buttons; + [SameObject] readonly attribute GamepadHapticActuator? vibrationActuator; To support `pulse()` we probably need to bring back the `hapticActuators` array: ``` readonly attribute FrozenArray<GamepadHapticActuator> hapticActuators; ``` With `pulse()` it's expected that a gamepad could have multiple haptic actuators and each actuator can be controlled independently. With `playEffect()` the `vibrationActuator` member is expected to control multiple actuators. This means there should be overlap between the actuators in `hapticActuators` and `vibrationActuator`. The spec should explain how to handle pre-empting `pulse()` with `playEffect()` and vice versa. -- Reply to this email directly or view it on GitHub: https://github.com/w3c/gamepad/pull/190#pullrequestreview-1730967486 You are receiving this because you are subscribed to this thread. Message ID: <w3c/gamepad/pull/190/review/1730967486@github.com>
Received on Tuesday, 14 November 2023 23:43:07 UTC