- From: Marcos Cáceres <notifications@github.com>
- Date: Wed, 07 Jul 2021 23:53:06 -0700
- To: w3c/gamepad <gamepad@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <w3c/gamepad/pull/151/review/701686307@github.com>
@marcoscaceres approved this pull request.
Wowser! This is so much better! Nice one @nondebug!
I'd be inclined for us to take this as is (with the suggestions) and we should just build on it.
> + <ol>
+ <li>Set |navigator|.{{Navigator/[[hasGamepadGesture]]}} to
+ `true`.
+ </li>
+ <li>[=list/For each=] |connectedGamepad:Gamepad?| of
+ |navigator|.{{Navigator/[[gamepads]]}}:
+ <ol>
+ <li>If |connectedGamepad| is not equal to `null`:
+ <ol>
+ <li>Set |connectedGamepad|.{{Gamepad/[[exposed]]}} to
+ `true`.
+ </li>
+ <li>Set |connectedGamepad|.{{Gamepad/[[timestamp]]}} to
+ |now|.
+ </li>
+ <li>If |gamepad|'s [=relevant global object=] is a
I think here we should be able to just queue on gamepad task source instead of going through the global one.
> + <li>Set |navigator|.{{Navigator/[[hasGamepadGesture]]}} to
+ `true`.
+ </li>
+ <li>[=list/For each=] |connectedGamepad:Gamepad?| of
+ |navigator|.{{Navigator/[[gamepads]]}}:
+ <ol>
+ <li>If |connectedGamepad| is not equal to `null`:
+ <ol>
+ <li>Set |connectedGamepad|.{{Gamepad/[[exposed]]}} to
+ `true`.
+ </li>
+ <li>Set |connectedGamepad|.{{Gamepad/[[timestamp]]}} to
+ |now|.
+ </li>
+ <li>If |gamepad|'s [=relevant global object=] is a
+ {{Window}} object, [=queue a global task=] on |gamepad|'s
Here, we might want to also do the fully active check (as we are checking the {{Window}} is still there, per #149).... we can come back to this tho.
> + {{GamepadEvent}} with its {{GamepadEvent/gamepad}}
+ attribute initialized to |connectedGamepad|.
+ </li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ <p>
+ To <dfn>map and normalize axes</dfn> for |gamepad:Gamepad|, run the
+ following steps:
+ </p>
+ <ol>
+ <li>Let |axisValues:list| be a [=list=] of `unsigned long` values
```suggestion
<li>Let |axisValues:list| be a [=list=] of {{unsigned long}} values
```
> + </li>
+ <li>Let |normalizedValue:double| be 2 (|logicalValue| −
+ |logicalMinimum|) / (|logicalMaximum| − |logicalMinimum|) − 1.
+ </li>
+ <li>Set |gamepad|.{{Gamepad/[[axes]]}}[|axisIndex|] to be
+ |normalizedValue|.
+ </li>
+ </ol>
+ </li>
+ </ol>
+ <p>
+ To <dfn>map and normalize buttons</dfn> for |gamepad:Gamepad|, run
+ the following steps:
+ </p>
+ <ol>
+ <li>Let |buttonValues:list| be a [=list=] of `unsigned long` values
```suggestion
<li>Let |buttonValues:list| be a [=list=] of {{unsigned long}} values
```
> + <li>[=list/Append=] `null` to |navigator|.{{Navigator/[[gamepads]]}}.
+ </li>
+ <li>Return the [=list/size=] of
+ |navigator|.{{Navigator/[[gamepads]]}} − 1.
+ </li>
+ </ol>
+ <p>
+ To <dfn data-lt="initializing axes">initialize axes</dfn> for
+ |gamepad:Gamepad|, run the following steps:
+ </p>
+ <ol>
+ <li>Let |inputCount:long| be the number of axis inputs exposed by the
+ device represented by |gamepad|.
+ </li>
+ <li>Set |gamepad|.{{Gamepad/[[axisMinimums]]}} to a [=list=] of
+ `unsigned long` values with [=list/size=] equal to |inputCount|
```suggestion
{{unsigned long}} values with [=list/size=] equal to |inputCount|
```
Plus a few other ones...
> + <p>
+ User agents implementing this specification must provide a new DOM
+ event, named {{gamepadconnected}}. The corresponding event MUST be of
+ type {{GamepadEvent}} and, if [=allowed to use=] the `"gamepad"`
+ permission, MUST fire on the {{Window}} object. Registration for and
+ firing of the {{gamepadconnected}} event MUST follow the usual
+ behavior of DOM Events. [[DOM]]
+ </p>
+ <p>
+ A [=user agent=] MUST dispatch this event type to indicate the user
+ has connected a gamepad. If a gamepad was already connected when the
+ page was loaded, the {{gamepadconnected}} event SHOULD be dispatched
+ when the user presses a button or moves an axis.
+ </p>
+ <p>
+ A [=user agent=] MUST NOT dispatch this event type if the
+ [=environment settings object=] is a [=non-secure context=].
+ </p>
We don't need this stuff anymore 🎉... it's already above (including the secure context stuff... the API is not exposed in insecure contexts, so that can't ever happen).
```suggestion
```
> @@ -275,43 +883,121 @@ <h2>
readonly attribute double value;
};
</pre>
+ <p>
+ Instances of {{GamepadButton}} are created with the internal slots
+ described in the following table:
+ </p>
+ <table class="simple" dfn-for="GamepadButton">
```suggestion
<table class="simple">
```
> + <li>If the [=current settings object=]'s [=environment settings object
+ / responsible document=] is not [=allowed to use=] the `"gamepad"`
+ permission, then abort these steps.
+ </li>
I don't think we need the check here?
```suggestion
```
> </p>
</section>
<section>
<h3 id="event-gamepaddisconnected">
The <dfn class="event">gamepaddisconnected</dfn> event
</h3>
+ <p>
+ When a gamepad becomes unavailable on the system, run the following
+ steps:
+ </p>
+ <ol>
+ <li>If the [=current settings object=]'s [=environment settings object
+ / responsible document=] is not [=allowed to use=] the `"gamepad"`
+ permission, then abort these steps.
+ </li>
+ <li>Let |gamepad:Gamepad| be the {{Gamepad}} representing the
+ unavailable device.
+ </li>
+ <li>Set |gamepad|.{{Gamepad/[[connected]]}} to `false`.
I think this should be done in the steps of the task (right before the event is fired), no? Otherwise, it would update somewhat randomly.
> <p>
User agents implementing this specification must provide a new DOM
- event, named <code>gamepaddisconnected</code>. The corresponding event
- MUST be of type <code>GamepadEvent</code> and, if <a>allowed to use</a>
- the "`gamepad`" permission, MUST fire on the <code>window</code>
- object. Registration for and firing of the
- <code>gamepaddisconnected</code> event MUST follow the usual behavior
- of DOM Events. [[DOM]]
+ event, named {{gamepaddisconnected}}. The corresponding event MUST be
I think they "allowed to use" checks should only happen when the developer tries to use the API.
We can maybe have a global check that if the permission to use the API gets disabled, then just bring down everything... but that's probably overkill.
> + permission, MUST fire on the {{Window}} object. Registration for and
+ firing of the {{gamepaddisconnected}} event MUST follow the usual
+ behavior of DOM Events. [[DOM]]
Don't need this :) We are doing the right thing...
```suggestion
permission, MUST fire on the {{Window}} object.
```
> + A [=user agent=] MUST NOT dispatch this event type if the [=environment
+ settings object=] is a [=non-secure context=].
Don't need this... can't register events in insecure contexts, so they will never fire in these contexts...
```suggestion
```
--
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/151#pullrequestreview-701686307
Received on Thursday, 8 July 2021 06:55:26 UTC