@woosh/meep-engine 3.35.0 → 3.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/engine/Engine.d.ts +2 -0
- package/src/engine/Engine.d.ts.map +1 -1
- package/src/engine/Engine.js +5 -1
- package/src/engine/input/devices/XRInputDevice.d.ts +91 -0
- package/src/engine/input/devices/XRInputDevice.d.ts.map +1 -0
- package/src/engine/input/devices/XRInputDevice.js +479 -0
- package/src/engine/input/devices/xr/XRGamepadMapping.d.ts +14 -0
- package/src/engine/input/devices/xr/XRGamepadMapping.d.ts.map +1 -0
- package/src/engine/input/devices/xr/XRGamepadMapping.js +9 -0
- package/src/engine/input/devices/xr/XRHandedness.d.ts +15 -0
- package/src/engine/input/devices/xr/XRHandedness.d.ts.map +1 -0
- package/src/engine/input/devices/xr/XRHandedness.js +10 -0
- package/src/engine/input/devices/xr/XRInputAction.d.ts +50 -0
- package/src/engine/input/devices/xr/XRInputAction.d.ts.map +1 -0
- package/src/engine/input/devices/xr/XRInputAction.js +116 -0
- package/src/engine/input/devices/xr/XRInputButton.d.ts +26 -0
- package/src/engine/input/devices/xr/XRInputButton.d.ts.map +1 -0
- package/src/engine/input/devices/xr/XRInputButton.js +53 -0
- package/src/engine/input/devices/xr/XRInputCoordinates.d.ts +23 -0
- package/src/engine/input/devices/xr/XRInputCoordinates.d.ts.map +1 -0
- package/src/engine/input/devices/xr/XRInputCoordinates.js +35 -0
- package/src/engine/input/devices/xr/XRInputHandle.d.ts +93 -0
- package/src/engine/input/devices/xr/XRInputHandle.d.ts.map +1 -0
- package/src/engine/input/devices/xr/XRInputHandle.js +268 -0
- package/src/engine/input/devices/xr/XRInputPose.d.ts +59 -0
- package/src/engine/input/devices/xr/XRInputPose.d.ts.map +1 -0
- package/src/engine/input/devices/xr/XRInputPose.js +77 -0
- package/src/engine/input/devices/xr/XRInputTypes.d.ts +76 -0
- package/src/engine/input/devices/xr/XRInputTypes.d.ts.map +1 -0
- package/src/engine/input/devices/xr/XRInputTypes.js +31 -0
- package/src/engine/input/devices/xr/XRInputValueSource.d.ts +11 -0
- package/src/engine/input/devices/xr/XRInputValueSource.d.ts.map +1 -0
- package/src/engine/input/devices/xr/XRInputValueSource.js +11 -0
- package/src/engine/input/devices/xr/XRTargetRayMode.d.ts +17 -0
- package/src/engine/input/devices/xr/XRTargetRayMode.d.ts.map +1 -0
- package/src/engine/input/devices/xr/XRTargetRayMode.js +12 -0
- package/src/engine/input/devices/xr/XRVisibilityState.d.ts +15 -0
- package/src/engine/input/devices/xr/XRVisibilityState.d.ts.map +1 -0
- package/src/engine/input/devices/xr/XRVisibilityState.js +10 -0
- package/src/engine/input/ecs/ism/coordinate/InputCoordinateChannel.d.ts +15 -1
- package/src/engine/input/ecs/ism/coordinate/InputCoordinateChannel.d.ts.map +1 -1
- package/src/engine/input/ecs/ism/coordinate/InputCoordinateChannel.js +9 -0
- package/src/engine/input/ecs/ism/coordinate/InputCoordinateDevice.d.ts +17 -4
- package/src/engine/input/ecs/ism/coordinate/InputCoordinateDevice.d.ts.map +1 -1
- package/src/engine/input/ecs/ism/coordinate/InputCoordinateDevice.js +26 -0
- package/src/engine/input/ecs/ism/coordinate/InputCoordinateSwitches.d.ts +17 -2
- package/src/engine/input/ecs/ism/coordinate/InputCoordinateSwitches.d.ts.map +1 -1
- package/src/engine/input/ecs/ism/device/GamepadInputDeviceAdapter.d.ts +5 -0
- package/src/engine/input/ecs/ism/device/GamepadInputDeviceAdapter.d.ts.map +1 -1
- package/src/engine/input/ecs/ism/device/InputDeviceAdapter.d.ts +2 -0
- package/src/engine/input/ecs/ism/device/InputDeviceAdapter.d.ts.map +1 -1
- package/src/engine/input/ecs/ism/device/InputDeviceAdapter.js +2 -0
- package/src/engine/input/ecs/ism/device/KeyboardInputDeviceAdapter.d.ts +7 -0
- package/src/engine/input/ecs/ism/device/KeyboardInputDeviceAdapter.d.ts.map +1 -1
- package/src/engine/input/ecs/ism/device/ManualInputDeviceAdapter.d.ts +5 -0
- package/src/engine/input/ecs/ism/device/ManualInputDeviceAdapter.d.ts.map +1 -1
- package/src/engine/input/ecs/ism/device/PointerInputDeviceAdapter.d.ts +5 -0
- package/src/engine/input/ecs/ism/device/PointerInputDeviceAdapter.d.ts.map +1 -1
- package/src/engine/input/ecs/ism/device/XRInputDeviceAdapter.d.ts +30 -0
- package/src/engine/input/ecs/ism/device/XRInputDeviceAdapter.d.ts.map +1 -0
- package/src/engine/input/ecs/ism/device/XRInputDeviceAdapter.js +87 -0
- package/src/engine/input/ecs/ism/device/XR_INPUT_DEVICE_IDS.d.ts +15 -0
- package/src/engine/input/ecs/ism/device/XR_INPUT_DEVICE_IDS.d.ts.map +1 -0
- package/src/engine/input/ecs/ism/device/XR_INPUT_DEVICE_IDS.js +22 -0
- package/src/engine/input/ecs/ism/trigger/InputTrigger.d.ts +11 -1
- package/src/engine/input/ecs/ism/trigger/InputTrigger.d.ts.map +1 -1
- package/src/engine/input/ecs/ism/trigger/InputTrigger.js +7 -0
- package/src/engine/input/ecs/ism/trigger/InputTriggerChord.d.ts +16 -2
- package/src/engine/input/ecs/ism/trigger/InputTriggerChord.d.ts.map +1 -1
- package/src/engine/input/ecs/ism/trigger/InputTriggerHold.d.ts +22 -2
- package/src/engine/input/ecs/ism/trigger/InputTriggerHold.d.ts.map +1 -1
- package/src/engine/input/ecs/ism/trigger/InputTriggerRelease.d.ts +16 -2
- package/src/engine/input/ecs/ism/trigger/InputTriggerRelease.d.ts.map +1 -1
- package/src/engine/input/ecs/ism/trigger/InputTriggerSequence.d.ts +24 -4
- package/src/engine/input/ecs/ism/trigger/InputTriggerSequence.d.ts.map +1 -1
- package/src/engine/input/ecs/ism/trigger/InputTriggerSwitch.d.ts +6 -8
- package/src/engine/input/ecs/ism/trigger/InputTriggerSwitch.d.ts.map +1 -1
- package/src/engine/input/ecs/ism/trigger/InputTriggerSwitch.js +5 -0
- package/src/engine/input/ecs/ism/trigger/InputTriggerXRButton.d.ts +15 -0
- package/src/engine/input/ecs/ism/trigger/InputTriggerXRButton.d.ts.map +1 -0
- package/src/engine/input/ecs/ism/trigger/InputTriggerXRButton.js +25 -0
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/shade/renderer/animation/chunk_pose_accumulator.js +14 -24
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.js +16 -15
- package/src/shade/renderer/deferred/indirect/chunk_lpv_sample_light.js +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +1123 -1122
- package/src/shade/renderer/gpu_primitive/bvh/PHASE1_HANDOVER.md +202 -201
- package/src/shade/renderer/light/environment/chunk_roughness_to_mip_ratio.js +24 -0
- package/src/shade/renderer/light/environment/chunk_sphere_probe_roughness_to_lod.js +2 -25
- package/src/shade/renderer/light/environment/shader_project_environment_sh.d.ts +2 -2
- package/src/shade/renderer/light/environment/shader_project_environment_sh.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/shader_project_environment_sh.js +50 -19
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/particles/DESIGN.md +1 -1
- package/src/shade/renderer/particles/bounds/chunk_particle_bounds.js +10 -9
- package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.js +10 -8
- package/src/shade/renderer/shader/chunk/atomic/chunk_atomic_add_f32_storage.js +25 -0
- package/src/shade/renderer/shader/chunk/atomic/chunk_atomic_max_f32_storage.js +28 -0
- package/src/shade/renderer/shader/chunk/atomic/chunk_atomic_min_f32_storage.js +28 -0
- package/src/shade/renderer/shader/chunk/geometry/plane/{plane_ray_raycast.js → chunk_plane_ray_raycast.js} +1 -1
- package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.js +3 -3
- package/src/shade/renderer/animation/skinning/bounds_refresh/chunk_aabb_atomic_f32.js +0 -59
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
import { assert } from "../../../../core/assert.js";
|
|
2
|
+
import { Vector1 } from "../../../../core/geom/Vector1.js";
|
|
3
|
+
import Vector2 from "../../../../core/geom/Vector2.js";
|
|
4
|
+
import { GamepadStick } from "../gamepad/GamepadStick.js";
|
|
5
|
+
import { XRInputAction } from "./XRInputAction.js";
|
|
6
|
+
import { XRInputButton } from "./XRInputButton.js";
|
|
7
|
+
import { XRInputPose, xr_input_read_pose } from "./XRInputPose.js";
|
|
8
|
+
import { XRInputValueSource } from "./XRInputValueSource.js";
|
|
9
|
+
import { XRHandedness } from "./XRHandedness.js";
|
|
10
|
+
import { XRTargetRayMode } from "./XRTargetRayMode.js";
|
|
11
|
+
import { XRGamepadMapping } from "./XRGamepadMapping.js";
|
|
12
|
+
|
|
13
|
+
const DEFAULT_METADATA = Object.freeze({
|
|
14
|
+
handedness: XRHandedness.None,
|
|
15
|
+
targetRayMode: XRTargetRayMode.Unavailable,
|
|
16
|
+
profiles: Object.freeze([])
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
/** @type {import('./XRInputTypes.js').XRGamepad} */
|
|
20
|
+
const DEFAULT_GAMEPAD = Object.freeze({
|
|
21
|
+
mapping: XRGamepadMapping.Unmapped,
|
|
22
|
+
buttons: Object.freeze([]),
|
|
23
|
+
axes: Object.freeze([])
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
const DEFAULT_BUTTON = Object.freeze({ value: 0, pressed: false, touched: false });
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* One XR input source, or a persistent handedness slot owned by XRInputDevice.
|
|
30
|
+
* All control objects survive disconnection. Consumers read them; the device owns mutation.
|
|
31
|
+
* With xr-standard, select/squeeze read native button amounts. Other mappings remain available through
|
|
32
|
+
* buttons/axes, while select/squeeze report 0/1 from native events; check their valueSource.
|
|
33
|
+
*
|
|
34
|
+
* Button indices 0/1 are select/squeeze; axes 0/1 are touchpad and 2/3 thumbstick in xr-standard.
|
|
35
|
+
* Placeholder entries are allowed by WebXR: a zero entry does not prove that a control exists.
|
|
36
|
+
*/
|
|
37
|
+
export class XRInputHandle {
|
|
38
|
+
/** @readonly */
|
|
39
|
+
select = new XRInputAction();
|
|
40
|
+
|
|
41
|
+
/** @readonly */
|
|
42
|
+
squeeze = new XRInputAction();
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Raw native buttons. Use {@link getButton} for an index that may not exist yet.
|
|
46
|
+
* @readonly
|
|
47
|
+
* @type {XRInputButton[]}
|
|
48
|
+
*/
|
|
49
|
+
buttons = [];
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Raw native axes in [-1, 1]. Use {@link getAxis} for an index that may not exist yet.
|
|
53
|
+
* @readonly
|
|
54
|
+
* @type {Vector1[]}
|
|
55
|
+
*/
|
|
56
|
+
axes = [];
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Calibrated xr-standard thumbstick, +x right and +y down.
|
|
60
|
+
* @readonly
|
|
61
|
+
*/
|
|
62
|
+
thumbstick = new GamepadStick(2, 3);
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Uncalibrated xr-standard touchpad coordinates, +x right and +y down.
|
|
66
|
+
* @readonly
|
|
67
|
+
*/
|
|
68
|
+
touchpad = new Vector2();
|
|
69
|
+
|
|
70
|
+
/** @readonly */
|
|
71
|
+
targetRay = new XRInputPose();
|
|
72
|
+
|
|
73
|
+
/** @readonly */
|
|
74
|
+
grip = new XRInputPose();
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Native source, or null while disconnected. Set by the device.
|
|
78
|
+
* @readonly
|
|
79
|
+
* @type {import('./XRInputTypes.js').XRInputSource|null}
|
|
80
|
+
*/
|
|
81
|
+
nativeSource = null;
|
|
82
|
+
|
|
83
|
+
/** @type {Pick<import('./XRInputTypes.js').XRInputSource, 'handedness'|'targetRayMode'|'profiles'>} */
|
|
84
|
+
#metadata = DEFAULT_METADATA;
|
|
85
|
+
|
|
86
|
+
/** @type {number[]} */
|
|
87
|
+
#axisValues = [0, 0, 0, 0];
|
|
88
|
+
|
|
89
|
+
/** Number of native buttons, excluding controls materialised for bindings. Do not modify directly. */
|
|
90
|
+
buttonCount = 0;
|
|
91
|
+
|
|
92
|
+
/** Number of native axes, excluding controls materialised for bindings. Do not modify directly. */
|
|
93
|
+
axisCount = 0;
|
|
94
|
+
|
|
95
|
+
constructor() {
|
|
96
|
+
this.getButton(3);
|
|
97
|
+
this.getAxis(3);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
get connected() {
|
|
101
|
+
return this.nativeSource !== null;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
get handedness() {
|
|
105
|
+
return this.#metadata.handedness;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
get targetRayMode() {
|
|
109
|
+
return this.#metadata.targetRayMode;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/** @returns {ReadonlyArray<string>} */
|
|
113
|
+
get profiles() {
|
|
114
|
+
return this.#metadata.profiles;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Return a stable button, creating neutral entries up to this index if needed.
|
|
119
|
+
* @param {number} index
|
|
120
|
+
* @returns {XRInputButton}
|
|
121
|
+
*/
|
|
122
|
+
getButton(index) {
|
|
123
|
+
assert.isNonNegativeInteger(index, 'index');
|
|
124
|
+
|
|
125
|
+
while (this.buttons.length <= index) {
|
|
126
|
+
this.buttons.push(new XRInputButton());
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
return this.buttons[index];
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Return a stable axis, creating neutral entries up to this index if needed.
|
|
134
|
+
* @param {number} index
|
|
135
|
+
* @returns {Vector1}
|
|
136
|
+
*/
|
|
137
|
+
getAxis(index) {
|
|
138
|
+
assert.isNonNegativeInteger(index, 'index');
|
|
139
|
+
|
|
140
|
+
while (this.axes.length <= index) {
|
|
141
|
+
this.axes.push(new Vector1());
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
return this.axes[index];
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* @internal
|
|
149
|
+
* @param {import('./XRInputTypes.js').XRInputSource|null} source
|
|
150
|
+
*/
|
|
151
|
+
bind(source) {
|
|
152
|
+
assert.defined(source, 'source');
|
|
153
|
+
assert.isObject(source, 'source');
|
|
154
|
+
|
|
155
|
+
if (this.nativeSource === source) {
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
this.nativeSource = null;
|
|
159
|
+
this.#metadata = DEFAULT_METADATA;
|
|
160
|
+
this.clear();
|
|
161
|
+
this.flush();
|
|
162
|
+
this.thumbstick.forgetCalibration();
|
|
163
|
+
this.nativeSource = source;
|
|
164
|
+
this.#metadata = source ?? DEFAULT_METADATA;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* @internal Sample values and poses before publishing raw switch edges.
|
|
169
|
+
* @param {import('./XRInputTypes.js').XRFrame|null} frame
|
|
170
|
+
* @param {EventTarget|null} referenceSpace
|
|
171
|
+
*/
|
|
172
|
+
sample(frame, referenceSpace) {
|
|
173
|
+
assert.defined(frame, 'frame');
|
|
174
|
+
assert.defined(referenceSpace, 'referenceSpace');
|
|
175
|
+
|
|
176
|
+
const source = this.nativeSource;
|
|
177
|
+
if (source === null) {
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
// A source/visibility notification has no pose frame. Preserve the last sample in that case;
|
|
181
|
+
// only an actual unavailable pose, a reference-space change or cleanup invalidates it.
|
|
182
|
+
if (frame !== null) {
|
|
183
|
+
const ray = xr_input_read_pose(frame, source.targetRaySpace, referenceSpace);
|
|
184
|
+
const grip = xr_input_read_pose(frame, source.gripSpace ?? null, referenceSpace);
|
|
185
|
+
this.targetRay.update(ray);
|
|
186
|
+
this.grip.update(grip);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
const gamepad = source.gamepad ?? DEFAULT_GAMEPAD;
|
|
190
|
+
const mapped = gamepad.mapping === XRGamepadMapping.Standard;
|
|
191
|
+
this.buttonCount = gamepad.buttons.length;
|
|
192
|
+
this.axisCount = gamepad.axes.length;
|
|
193
|
+
if (this.buttonCount > 0) {
|
|
194
|
+
this.getButton(this.buttonCount - 1);
|
|
195
|
+
}
|
|
196
|
+
if (this.axisCount > 0) {
|
|
197
|
+
this.getAxis(this.axisCount - 1);
|
|
198
|
+
}
|
|
199
|
+
for (let i = 0; i < this.buttons.length; i++) {
|
|
200
|
+
const button = gamepad.buttons[i] ?? DEFAULT_BUTTON;
|
|
201
|
+
this.buttons[i].update(button.value, button.pressed, button.touched);
|
|
202
|
+
}
|
|
203
|
+
for (let i = 0; i < this.axes.length; i++) {
|
|
204
|
+
const value = gamepad.axes[i] ?? 0;
|
|
205
|
+
this.#axisValues[i] = value;
|
|
206
|
+
this.axes[i].set(value);
|
|
207
|
+
}
|
|
208
|
+
if (mapped) {
|
|
209
|
+
this.touchpad.set(this.#axisValues[0], this.#axisValues[1]);
|
|
210
|
+
this.thumbstick.update(this.#axisValues);
|
|
211
|
+
} else {
|
|
212
|
+
this.touchpad.set(0, 0);
|
|
213
|
+
this.thumbstick.reset();
|
|
214
|
+
}
|
|
215
|
+
this.#sampleAction(this.select, 0, mapped);
|
|
216
|
+
this.#sampleAction(this.squeeze, 1, mapped);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* @param {XRInputAction} action
|
|
221
|
+
* @param {number} buttonIndex
|
|
222
|
+
* @param {boolean} mapped
|
|
223
|
+
*/
|
|
224
|
+
#sampleAction(action, buttonIndex, mapped) {
|
|
225
|
+
if (mapped && buttonIndex < this.buttonCount) {
|
|
226
|
+
action.update(this.buttons[buttonIndex].x, XRInputValueSource.Gamepad);
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
// Preserve event-driven amounts between native begin/end events. Clear a previous hardware
|
|
230
|
+
// amount when entering event-only mode.
|
|
231
|
+
if (action.valueSource !== XRInputValueSource.Action) {
|
|
232
|
+
action.update(0, XRInputValueSource.Action);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/** @internal Tracking loss does not imply release or cancellation. */
|
|
237
|
+
invalidatePoses() {
|
|
238
|
+
this.targetRay.update();
|
|
239
|
+
this.grip.update();
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/** @internal Neutralise everything before switch releases and cancellation callbacks. */
|
|
243
|
+
clear() {
|
|
244
|
+
this.invalidatePoses();
|
|
245
|
+
this.buttonCount = 0;
|
|
246
|
+
this.axisCount = 0;
|
|
247
|
+
for (let i = 0; i < this.buttons.length; i++) {
|
|
248
|
+
this.buttons[i].update();
|
|
249
|
+
}
|
|
250
|
+
for (let i = 0; i < this.axes.length; i++) {
|
|
251
|
+
this.axes[i].set(0);
|
|
252
|
+
this.#axisValues[i] = 0;
|
|
253
|
+
}
|
|
254
|
+
this.touchpad.set(0, 0);
|
|
255
|
+
this.thumbstick.reset();
|
|
256
|
+
this.select.reset();
|
|
257
|
+
this.squeeze.reset();
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/** @internal */
|
|
261
|
+
flush() {
|
|
262
|
+
for (let i = 0; i < this.buttons.length; i++) {
|
|
263
|
+
this.buttons[i].flushSwitches();
|
|
264
|
+
}
|
|
265
|
+
this.select.flushCancellation();
|
|
266
|
+
this.squeeze.flushCancellation();
|
|
267
|
+
}
|
|
268
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read a pose relative to the reference space. Returns {@link DEFAULT_POSE} when either space or
|
|
3
|
+
* the native pose is unavailable.
|
|
4
|
+
* @param {import('./XRInputTypes.js').XRFrame} frame
|
|
5
|
+
* @param {EventTarget|null} space
|
|
6
|
+
* @param {EventTarget|null} referenceSpace
|
|
7
|
+
* @returns {import('./XRInputTypes.js').XRPose}
|
|
8
|
+
*/
|
|
9
|
+
export function xr_input_read_pose(frame: import('./XRInputTypes.js').XRFrame, space: EventTarget | null, referenceSpace: EventTarget | null): import('./XRInputTypes.js').XRPose;
|
|
10
|
+
/**
|
|
11
|
+
* Neutral, unavailable pose. Shared immutable data, copied into each handle's own meep vectors.
|
|
12
|
+
* Identity is significant: a real tracked pose at the origin is still valid.
|
|
13
|
+
* @readonly
|
|
14
|
+
*/
|
|
15
|
+
export const DEFAULT_POSE: Readonly<{
|
|
16
|
+
transform: Readonly<{
|
|
17
|
+
position: Readonly<{
|
|
18
|
+
x: 0;
|
|
19
|
+
y: 0;
|
|
20
|
+
z: 0;
|
|
21
|
+
}>;
|
|
22
|
+
orientation: Readonly<{
|
|
23
|
+
x: 0;
|
|
24
|
+
y: 0;
|
|
25
|
+
z: 0;
|
|
26
|
+
w: 1;
|
|
27
|
+
}>;
|
|
28
|
+
}>;
|
|
29
|
+
emulatedPosition: false;
|
|
30
|
+
}>;
|
|
31
|
+
/**
|
|
32
|
+
* A copied pose in the device's configured reference space. The device owns mutation.
|
|
33
|
+
* Check {@link valid} before use. An unavailable pose has zero position and identity rotation.
|
|
34
|
+
* Target-ray forward is local -Z, regardless of a game's own forward convention.
|
|
35
|
+
*/
|
|
36
|
+
export class XRInputPose {
|
|
37
|
+
/** @readonly */
|
|
38
|
+
readonly position: Vector3;
|
|
39
|
+
/** @readonly */
|
|
40
|
+
readonly rotation: Quaternion;
|
|
41
|
+
/**
|
|
42
|
+
* Whether a pose is available in the current reference space. Do not modify directly.
|
|
43
|
+
* @type {boolean}
|
|
44
|
+
*/
|
|
45
|
+
valid: boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Whether the browser estimates the position instead of tracking it. Do not modify directly.
|
|
48
|
+
* @type {boolean}
|
|
49
|
+
*/
|
|
50
|
+
emulatedPosition: boolean;
|
|
51
|
+
/**
|
|
52
|
+
* @internal
|
|
53
|
+
* @param {import("./XRInputTypes.js").XRPose} [pose=DEFAULT_POSE]
|
|
54
|
+
*/
|
|
55
|
+
update(pose?: import("./XRInputTypes.js").XRPose): void;
|
|
56
|
+
}
|
|
57
|
+
import Vector3 from "../../../../core/geom/Vector3.js";
|
|
58
|
+
import Quaternion from "../../../../core/geom/Quaternion.js";
|
|
59
|
+
//# sourceMappingURL=XRInputPose.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"XRInputPose.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/input/devices/xr/XRInputPose.js"],"names":[],"mappings":"AAiBA;;;;;;;GAOG;AACH,0CALW,OAAO,mBAAmB,EAAE,OAAO,SACnC,WAAW,GAAC,IAAI,kBAChB,WAAW,GAAC,IAAI,GACd,OAAO,mBAAmB,EAAE,MAAM,CAW9C;AA9BD;;;;GAIG;AACH;;;;;;;;;;;;;;;GAMG;AAqBH;;;;GAIG;AACH;IACI,gBAAgB;IAChB,2BAAyB;IAEzB,gBAAgB;IAChB,8BAA4B;IAE5B;;;OAGG;IACH,OAFU,OAAO,CAEH;IAEd;;;OAGG;IACH,kBAFU,OAAO,CAEQ;IAEzB;;;OAGG;IACH,cAFW,OAAO,mBAAmB,EAAE,MAAM,QAa5C;CACJ;oBA1EmB,kCAAkC;uBAD/B,qCAAqC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { assert } from "../../../../core/assert.js";
|
|
2
|
+
import Quaternion from "../../../../core/geom/Quaternion.js";
|
|
3
|
+
import Vector3 from "../../../../core/geom/Vector3.js";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Neutral, unavailable pose. Shared immutable data, copied into each handle's own meep vectors.
|
|
7
|
+
* Identity is significant: a real tracked pose at the origin is still valid.
|
|
8
|
+
* @readonly
|
|
9
|
+
*/
|
|
10
|
+
export const DEFAULT_POSE = Object.freeze({
|
|
11
|
+
transform: Object.freeze({
|
|
12
|
+
position: Object.freeze({ x: 0, y: 0, z: 0 }),
|
|
13
|
+
orientation: Object.freeze({ x: 0, y: 0, z: 0, w: 1 })
|
|
14
|
+
}),
|
|
15
|
+
emulatedPosition: false
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Read a pose relative to the reference space. Returns {@link DEFAULT_POSE} when either space or
|
|
20
|
+
* the native pose is unavailable.
|
|
21
|
+
* @param {import('./XRInputTypes.js').XRFrame} frame
|
|
22
|
+
* @param {EventTarget|null} space
|
|
23
|
+
* @param {EventTarget|null} referenceSpace
|
|
24
|
+
* @returns {import('./XRInputTypes.js').XRPose}
|
|
25
|
+
*/
|
|
26
|
+
export function xr_input_read_pose(frame, space, referenceSpace) {
|
|
27
|
+
assert.defined(space, 'space');
|
|
28
|
+
assert.defined(referenceSpace, 'referenceSpace');
|
|
29
|
+
|
|
30
|
+
if (space === null || referenceSpace === null) {
|
|
31
|
+
return DEFAULT_POSE;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return frame.getPose(space, referenceSpace) ?? DEFAULT_POSE;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* A copied pose in the device's configured reference space. The device owns mutation.
|
|
39
|
+
* Check {@link valid} before use. An unavailable pose has zero position and identity rotation.
|
|
40
|
+
* Target-ray forward is local -Z, regardless of a game's own forward convention.
|
|
41
|
+
*/
|
|
42
|
+
export class XRInputPose {
|
|
43
|
+
/** @readonly */
|
|
44
|
+
position = new Vector3();
|
|
45
|
+
|
|
46
|
+
/** @readonly */
|
|
47
|
+
rotation = new Quaternion();
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Whether a pose is available in the current reference space. Do not modify directly.
|
|
51
|
+
* @type {boolean}
|
|
52
|
+
*/
|
|
53
|
+
valid = false;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Whether the browser estimates the position instead of tracking it. Do not modify directly.
|
|
57
|
+
* @type {boolean}
|
|
58
|
+
*/
|
|
59
|
+
emulatedPosition = false;
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* @internal
|
|
63
|
+
* @param {import("./XRInputTypes.js").XRPose} [pose=DEFAULT_POSE]
|
|
64
|
+
*/
|
|
65
|
+
update(pose = DEFAULT_POSE) {
|
|
66
|
+
assert.notNull(pose, 'pose');
|
|
67
|
+
assert.isBoolean(pose.emulatedPosition, 'pose.emulatedPosition');
|
|
68
|
+
|
|
69
|
+
const p = pose.transform.position;
|
|
70
|
+
const q = pose.transform.orientation;
|
|
71
|
+
|
|
72
|
+
this.valid = pose !== DEFAULT_POSE;
|
|
73
|
+
this.emulatedPosition = pose.emulatedPosition;
|
|
74
|
+
this.position.set(p.x, p.y, p.z);
|
|
75
|
+
this.rotation.set(q.x, q.y, q.z, q.w);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WebXR interfaces accepted by meep's input API. Native WebXR objects satisfy these structural types;
|
|
3
|
+
* applications can use meep's declarations without installing ambient WebXR types.
|
|
4
|
+
* Only the members consumed by the input device are required.
|
|
5
|
+
*/
|
|
6
|
+
export type XRGamepad = {
|
|
7
|
+
mapping: string;
|
|
8
|
+
buttons: ReadonlyArray<{
|
|
9
|
+
value: number;
|
|
10
|
+
pressed: boolean;
|
|
11
|
+
touched: boolean;
|
|
12
|
+
}>;
|
|
13
|
+
axes: ReadonlyArray<number>;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* WebXR interfaces accepted by meep's input API. Native WebXR objects satisfy these structural types;
|
|
17
|
+
* applications can use meep's declarations without installing ambient WebXR types.
|
|
18
|
+
* Only the members consumed by the input device are required.
|
|
19
|
+
*/
|
|
20
|
+
export type XRInputSource = {
|
|
21
|
+
handedness: string;
|
|
22
|
+
targetRayMode: string;
|
|
23
|
+
profiles: ReadonlyArray<string>;
|
|
24
|
+
targetRaySpace: EventTarget;
|
|
25
|
+
gripSpace?: EventTarget | null;
|
|
26
|
+
gamepad?: XRGamepad | null;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* WebXR interfaces accepted by meep's input API. Native WebXR objects satisfy these structural types;
|
|
30
|
+
* applications can use meep's declarations without installing ambient WebXR types.
|
|
31
|
+
* Only the members consumed by the input device are required.
|
|
32
|
+
*/
|
|
33
|
+
export type XRSession = EventTarget & {
|
|
34
|
+
readonly inputSources: ArrayLike<XRInputSource>;
|
|
35
|
+
readonly visibilityState: string;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* WebXR interfaces accepted by meep's input API. Native WebXR objects satisfy these structural types;
|
|
39
|
+
* applications can use meep's declarations without installing ambient WebXR types.
|
|
40
|
+
* Only the members consumed by the input device are required.
|
|
41
|
+
*/
|
|
42
|
+
export type XRPose = {
|
|
43
|
+
transform: {
|
|
44
|
+
position: {
|
|
45
|
+
x: number;
|
|
46
|
+
y: number;
|
|
47
|
+
z: number;
|
|
48
|
+
};
|
|
49
|
+
orientation: {
|
|
50
|
+
x: number;
|
|
51
|
+
y: number;
|
|
52
|
+
z: number;
|
|
53
|
+
w: number;
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
emulatedPosition: boolean;
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* WebXR interfaces accepted by meep's input API. Native WebXR objects satisfy these structural types;
|
|
60
|
+
* applications can use meep's declarations without installing ambient WebXR types.
|
|
61
|
+
* Only the members consumed by the input device are required.
|
|
62
|
+
*/
|
|
63
|
+
export type XRFrame = {
|
|
64
|
+
session: XRSession;
|
|
65
|
+
getPose: (space: EventTarget, baseSpace: EventTarget) => XRPose | null | undefined;
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* WebXR interfaces accepted by meep's input API. Native WebXR objects satisfy these structural types;
|
|
69
|
+
* applications can use meep's declarations without installing ambient WebXR types.
|
|
70
|
+
* Only the members consumed by the input device are required.
|
|
71
|
+
*/
|
|
72
|
+
export type XRSessionInputEvent = Event & {
|
|
73
|
+
inputSource?: XRInputSource;
|
|
74
|
+
frame?: XRFrame;
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=XRInputTypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"XRInputTypes.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/input/devices/xr/XRInputTypes.js"],"names":[],"mappings":";;;;;;aAMc,MAAM;aACN,cAAc;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAC,CAAC;UAClE,cAAc,MAAM,CAAC;;;;;;;;gBAGrB,MAAM;mBACN,MAAM;cACN,cAAc,MAAM,CAAC;oBACrB,WAAW;gBACX,WAAW,GAAC,IAAI;cAChB,SAAS,GAAC,IAAI;;;;;;;wBAEf,WAAW,GAAG;IAAC,QAAQ,CAAC,YAAY,EAAE,UAAU,aAAa,CAAC,CAAC;IAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;CAAC;;;;;;;eAGhG;QAAC,QAAQ,EAAE;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAC,CAAC;QAAC,WAAW,EAAE;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAC,CAAA;KAAC;sBACxG,OAAO;;;;;;;;aAGP,SAAS;aACT,CAAC,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,KAAK,MAAM,GAAC,IAAI,GAAC,SAAS;;;;;;;kCAEtE,KAAK,GAAG;IAAC,WAAW,CAAC,EAAE,aAAa,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WebXR interfaces accepted by meep's input API. Native WebXR objects satisfy these structural types;
|
|
3
|
+
* applications can use meep's declarations without installing ambient WebXR types.
|
|
4
|
+
* Only the members consumed by the input device are required.
|
|
5
|
+
*
|
|
6
|
+
* @typedef {object} XRGamepad
|
|
7
|
+
* @property {string} mapping
|
|
8
|
+
* @property {ReadonlyArray<{value: number, pressed: boolean, touched: boolean}>} buttons
|
|
9
|
+
* @property {ReadonlyArray<number>} axes
|
|
10
|
+
*
|
|
11
|
+
* @typedef {object} XRInputSource
|
|
12
|
+
* @property {string} handedness
|
|
13
|
+
* @property {string} targetRayMode
|
|
14
|
+
* @property {ReadonlyArray<string>} profiles
|
|
15
|
+
* @property {EventTarget} targetRaySpace
|
|
16
|
+
* @property {EventTarget|null} [gripSpace]
|
|
17
|
+
* @property {XRGamepad|null} [gamepad]
|
|
18
|
+
*
|
|
19
|
+
* @typedef {EventTarget & {readonly inputSources: ArrayLike<XRInputSource>, readonly visibilityState: string}} XRSession
|
|
20
|
+
*
|
|
21
|
+
* @typedef {object} XRPose
|
|
22
|
+
* @property {{position: {x: number, y: number, z: number}, orientation: {x: number, y: number, z: number, w: number}}} transform
|
|
23
|
+
* @property {boolean} emulatedPosition
|
|
24
|
+
*
|
|
25
|
+
* @typedef {object} XRFrame
|
|
26
|
+
* @property {XRSession} session
|
|
27
|
+
* @property {(space: EventTarget, baseSpace: EventTarget) => XRPose|null|undefined} getPose
|
|
28
|
+
*
|
|
29
|
+
* @typedef {Event & {inputSource?: XRInputSource, frame?: XRFrame}} XRSessionInputEvent
|
|
30
|
+
*/
|
|
31
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where an XR action's scalar comes from. Gamepad means a native button value, which may itself be
|
|
3
|
+
* digital. Action means an event-derived 0/1 value, not a measurement of pressure.
|
|
4
|
+
*/
|
|
5
|
+
export type XRInputValueSource = number;
|
|
6
|
+
export namespace XRInputValueSource {
|
|
7
|
+
let Unavailable: number;
|
|
8
|
+
let Gamepad: number;
|
|
9
|
+
let Action: number;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=XRInputValueSource.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"XRInputValueSource.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/input/devices/xr/XRInputValueSource.js"],"names":[],"mappings":";;;;iCAIU,MAAM"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where an XR action's scalar comes from. Gamepad means a native button value, which may itself be
|
|
3
|
+
* digital. Action means an event-derived 0/1 value, not a measurement of pressure.
|
|
4
|
+
* @readonly
|
|
5
|
+
* @enum {number}
|
|
6
|
+
*/
|
|
7
|
+
export const XRInputValueSource = {
|
|
8
|
+
Unavailable: 0,
|
|
9
|
+
Gamepad: 1,
|
|
10
|
+
Action: 2
|
|
11
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Native target-ray modes, plus Unavailable for a disconnected handle.
|
|
3
|
+
*/
|
|
4
|
+
export type XRTargetRayMode = string;
|
|
5
|
+
/**
|
|
6
|
+
* Native target-ray modes, plus Unavailable for a disconnected handle.
|
|
7
|
+
* @readonly
|
|
8
|
+
* @enum {string}
|
|
9
|
+
*/
|
|
10
|
+
export const XRTargetRayMode: Readonly<{
|
|
11
|
+
Unavailable: "";
|
|
12
|
+
Gaze: "gaze";
|
|
13
|
+
TrackedPointer: "tracked-pointer";
|
|
14
|
+
Screen: "screen";
|
|
15
|
+
TransientPointer: "transient-pointer";
|
|
16
|
+
}>;
|
|
17
|
+
//# sourceMappingURL=XRTargetRayMode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"XRTargetRayMode.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/input/devices/xr/XRTargetRayMode.js"],"names":[],"mappings":";;;8BAGU,MAAM;AAHhB;;;;GAIG;AACH;;;;;;GAMG"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Native target-ray modes, plus Unavailable for a disconnected handle.
|
|
3
|
+
* @readonly
|
|
4
|
+
* @enum {string}
|
|
5
|
+
*/
|
|
6
|
+
export const XRTargetRayMode = Object.freeze({
|
|
7
|
+
Unavailable: '',
|
|
8
|
+
Gaze: 'gaze',
|
|
9
|
+
TrackedPointer: 'tracked-pointer',
|
|
10
|
+
Screen: 'screen',
|
|
11
|
+
TransientPointer: 'transient-pointer'
|
|
12
|
+
});
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Native XRSession visibility states.
|
|
3
|
+
*/
|
|
4
|
+
export type XRVisibilityState = string;
|
|
5
|
+
/**
|
|
6
|
+
* Native XRSession visibility states.
|
|
7
|
+
* @readonly
|
|
8
|
+
* @enum {string}
|
|
9
|
+
*/
|
|
10
|
+
export const XRVisibilityState: Readonly<{
|
|
11
|
+
Visible: "visible";
|
|
12
|
+
VisibleBlurred: "visible-blurred";
|
|
13
|
+
Hidden: "hidden";
|
|
14
|
+
}>;
|
|
15
|
+
//# sourceMappingURL=XRVisibilityState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"XRVisibilityState.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/input/devices/xr/XRVisibilityState.js"],"names":[],"mappings":";;;gCAGU,MAAM;AAHhB;;;;GAIG;AACH;;;;GAIG"}
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @typedef {import('./InputCoordinateChannelType.js').InputCoordinateChannelType} InputCoordinateChannelType
|
|
3
|
+
* @typedef {import('../InputSourceTable.js').InputSourceTable} InputSourceTable
|
|
4
|
+
* @typedef {import('../device/InputDeviceAdapter.js').InputDeviceAdapter} InputDeviceAdapter
|
|
5
|
+
* @typedef {import('../InputSource.js').InputSource} InputSource
|
|
6
|
+
* @typedef {import('../trigger/InputTrigger.js').InputTrigger} InputTrigger
|
|
7
|
+
* @typedef {import('../../../../../core/binary/BitSet.js').BitSet} BitSet
|
|
8
|
+
*/
|
|
1
9
|
/**
|
|
2
10
|
* An N-dimensional analog channel an action can be bound to.
|
|
3
11
|
*
|
|
@@ -16,7 +24,7 @@ export class InputCoordinateChannel {
|
|
|
16
24
|
/**
|
|
17
25
|
* @returns {InputCoordinateChannelType}
|
|
18
26
|
*/
|
|
19
|
-
get type():
|
|
27
|
+
get type(): number;
|
|
20
28
|
/**
|
|
21
29
|
* Component count.
|
|
22
30
|
* @returns {number}
|
|
@@ -64,4 +72,10 @@ export class InputCoordinateChannel {
|
|
|
64
72
|
*/
|
|
65
73
|
hash(): number;
|
|
66
74
|
}
|
|
75
|
+
export type InputCoordinateChannelType = import('./InputCoordinateChannelType.js').InputCoordinateChannelType;
|
|
76
|
+
export type InputSourceTable = import('../InputSourceTable.js').InputSourceTable;
|
|
77
|
+
export type InputDeviceAdapter = import('../device/InputDeviceAdapter.js').InputDeviceAdapter;
|
|
78
|
+
export type InputSource = import('../InputSource.js').InputSource;
|
|
79
|
+
export type InputTrigger = import('../trigger/InputTrigger.js').InputTrigger;
|
|
80
|
+
export type BitSet = import('../../../../../core/binary/BitSet.js').BitSet;
|
|
67
81
|
//# sourceMappingURL=InputCoordinateChannel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputCoordinateChannel.d.ts","sourceRoot":"","sources":["../../../../../../../src/engine/input/ecs/ism/coordinate/InputCoordinateChannel.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH;IAEI;;OAEG;IACH,
|
|
1
|
+
{"version":3,"file":"InputCoordinateChannel.d.ts","sourceRoot":"","sources":["../../../../../../../src/engine/input/ecs/ism/coordinate/InputCoordinateChannel.js"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;;;;;;;;GAaG;AACH;IAEI;;OAEG;IACH,mBAEC;IAED;;;OAGG;IACH,yBAEC;IAED;;;;;;OAMG;IACH,eAHW,gBAAgB,YAChB,IAAI,MAAM,EAAE,kBAAkB,CAAC,QAIzC;IAED;;OAEG;IACH,uBAFW,WAAW,EAAE,QAIvB;IAED;;;;;;;;OAQG;IACH,wBAFW,YAAY,EAAE,QAIxB;IAED;;;;OAIG;IACH,aAJW,MAAM,EAAE,GAAC,YAAY,UACrB,MAAM,QACN,MAAM,QAIhB;IAED;;OAEG;IACH,SAFa,sBAAsB,CAIlC;IAED;;;OAGG;IACH,cAHW,sBAAsB,GACpB,OAAO,CAInB;IAED;;OAEG;IACH,QAFa,MAAM,CAIlB;CACJ;yCApGY,OAAO,iCAAiC,EAAE,0BAA0B;+BACpE,OAAO,wBAAwB,EAAE,gBAAgB;iCACjD,OAAO,iCAAiC,EAAE,kBAAkB;0BAC5D,OAAO,mBAAmB,EAAE,WAAW;2BACvC,OAAO,4BAA4B,EAAE,YAAY;qBACjD,OAAO,sCAAsC,EAAE,MAAM"}
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @typedef {import('./InputCoordinateChannelType.js').InputCoordinateChannelType} InputCoordinateChannelType
|
|
3
|
+
* @typedef {import('../InputSourceTable.js').InputSourceTable} InputSourceTable
|
|
4
|
+
* @typedef {import('../device/InputDeviceAdapter.js').InputDeviceAdapter} InputDeviceAdapter
|
|
5
|
+
* @typedef {import('../InputSource.js').InputSource} InputSource
|
|
6
|
+
* @typedef {import('../trigger/InputTrigger.js').InputTrigger} InputTrigger
|
|
7
|
+
* @typedef {import('../../../../../core/binary/BitSet.js').BitSet} BitSet
|
|
8
|
+
*/
|
|
9
|
+
|
|
1
10
|
/**
|
|
2
11
|
* An N-dimensional analog channel an action can be bound to.
|
|
3
12
|
*
|