Re: [w3c/gamepad] Move vibrationActuator to the main spec (PR #190)

@gabrielsanbrito commented on this pull request.



> +                |effectPromise| with {{GamepadHapticsResult/"preempted"}}.
+                </li>
+              </ol>
+            </li>
+            <li>If this actuator cannot [=play effects with type=] |type|,
+            return [=a promise rejected with=] reason {{NotSupportedError}}.
+            </li>
+            <li>Let {{GamepadHapticActuator/[[playingEffectPromise]]}} be [=a
+            new promise=].
+            </li>
+            <li>Do the following steps in parallel:
+              <ol>
+                <li>[=Issue a haptic effect=] to the actuator with |type| and
+                |params|.
+                </li>
+                <li>When the effect completes, if it was not preempted, [=queue

Thinking a little bit more about it, I think that only checking `GamepadHapticActuator/[[playingEffectPromise]]` might not be the best way to proceed. For example:
1. Effect `e1` starts playing. So `GamepadHapticActuator/[[playingEffectPromise]]` is set to `p1`
2. While `e1` is already executing (gamepad is already vibrating), we issue `e2`
3. `GamepadHapticActuator/[[playingEffectPromise]]` is set to `p2` and `p1` is resolved with `"preempted"`.
4. `e1` finishes playing normally and `GamepadHapticActuator/[[playingEffectPromise]]` is already set to `p2`. `p2` is resolved with `"completed"` and `GamepadHapticActuator/[[playingEffectPromise]]` is set to `null`. 

I think that we could maybe add an explicit "stop haptics effect", like we did with `reset()`:
```
<li>If [=this=].{{GamepadHapticActuator/[[playingEffectPromise]]}}
            is not `null`:
              <ol>
                <li>Let |effectPromise| be
                [=this=].{{GamepadHapticActuator/[[playingEffectPromise]]}}.
                </li>
                <li>Set
                [=this=].{{GamepadHapticActuator/[[playingEffectPromise]]}} to
                `null`.
                </li>
                <li>[=Stop haptic effects=] on [=this=]'s gamepad's actuator.
               </li>
                <li>[=Queue a global task=] on the [=relevant global object=]
                of [=this=] using the [=gamepad task source=] to [=resolve=]
                |effectPromise| with {{GamepadHapticsResult/"preempted"}}.
                </li>
              </ol>
            </li>
```
I think that is why the "if it was not preempted" part is also relevant. What do you think? Also @nondebug.

-- 
Reply to this email directly or view it on GitHub:
https://github.com/w3c/gamepad/pull/190#discussion_r1428610110
You are receiving this because you are subscribed to this thread.

Message ID: <w3c/gamepad/pull/190/review/1785077292@github.com>

Received on Saturday, 16 December 2023 00:32:45 UTC