@iwsdk/core 0.2.2 → 0.3.1

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.
Files changed (228) hide show
  1. package/README.md +94 -0
  2. package/dist/asset/loaders/hdr-texture-loader.d.ts +1 -1
  3. package/dist/asset/loaders/hdr-texture-loader.d.ts.map +1 -1
  4. package/dist/asset/loaders/hdr-texture-loader.js +4 -4
  5. package/dist/asset/loaders/hdr-texture-loader.js.map +1 -1
  6. package/dist/audio/audio-system.d.ts +6 -2
  7. package/dist/audio/audio-system.d.ts.map +1 -1
  8. package/dist/audio/audio-system.js +1 -0
  9. package/dist/audio/audio-system.js.map +1 -1
  10. package/dist/audio/audio.d.ts +3 -1
  11. package/dist/audio/audio.d.ts.map +1 -1
  12. package/dist/audio/audio.js +8 -2
  13. package/dist/audio/audio.js.map +1 -1
  14. package/dist/camera/camera-source.js +1 -0
  15. package/dist/camera/camera-source.js.map +1 -1
  16. package/dist/camera/camera-system.d.ts.map +1 -1
  17. package/dist/camera/camera-system.js +1 -0
  18. package/dist/camera/camera-system.js.map +1 -1
  19. package/dist/camera/camera-utils.d.ts.map +1 -1
  20. package/dist/camera/camera-utils.js.map +1 -1
  21. package/dist/depth/depth-occludable.d.ts +48 -0
  22. package/dist/depth/depth-occludable.d.ts.map +1 -0
  23. package/dist/depth/depth-occludable.js +48 -0
  24. package/dist/depth/depth-occludable.js.map +1 -0
  25. package/dist/depth/depth-sensing-system.d.ts +164 -0
  26. package/dist/depth/depth-sensing-system.d.ts.map +1 -0
  27. package/dist/depth/depth-sensing-system.js +453 -0
  28. package/dist/depth/depth-sensing-system.js.map +1 -0
  29. package/dist/depth/depth-textures.d.ts +53 -0
  30. package/dist/depth/depth-textures.d.ts.map +1 -0
  31. package/dist/depth/depth-textures.js +114 -0
  32. package/dist/depth/depth-textures.js.map +1 -0
  33. package/dist/depth/index.d.ts +10 -0
  34. package/dist/depth/index.d.ts.map +1 -0
  35. package/dist/depth/occlusion/preprocessing-pass.d.ts +52 -0
  36. package/dist/depth/occlusion/preprocessing-pass.d.ts.map +1 -0
  37. package/dist/depth/occlusion/preprocessing-pass.js +105 -0
  38. package/dist/depth/occlusion/preprocessing-pass.js.map +1 -0
  39. package/dist/depth/occlusion/preprocessing-shader.glsl.d.ts +22 -0
  40. package/dist/depth/occlusion/preprocessing-shader.glsl.d.ts.map +1 -0
  41. package/dist/depth/occlusion/preprocessing-shader.glsl.js +115 -0
  42. package/dist/depth/occlusion/preprocessing-shader.glsl.js.map +1 -0
  43. package/dist/ecs/entity.d.ts +17 -1
  44. package/dist/ecs/entity.d.ts.map +1 -1
  45. package/dist/ecs/entity.js +7 -1
  46. package/dist/ecs/entity.js.map +1 -1
  47. package/dist/ecs/world.d.ts +12 -0
  48. package/dist/ecs/world.d.ts.map +1 -1
  49. package/dist/ecs/world.js +47 -3
  50. package/dist/ecs/world.js.map +1 -1
  51. package/dist/environment/dome-gradient.js +1 -0
  52. package/dist/environment/dome-gradient.js.map +1 -1
  53. package/dist/environment/dome-texture.d.ts +3 -1
  54. package/dist/environment/dome-texture.d.ts.map +1 -1
  55. package/dist/environment/dome-texture.js +7 -1
  56. package/dist/environment/dome-texture.js.map +1 -1
  57. package/dist/environment/environment-system.d.ts +8 -0
  58. package/dist/environment/environment-system.d.ts.map +1 -1
  59. package/dist/environment/environment-system.js +78 -2
  60. package/dist/environment/environment-system.js.map +1 -1
  61. package/dist/environment/ibl-gradient.js +1 -0
  62. package/dist/environment/ibl-gradient.js.map +1 -1
  63. package/dist/environment/ibl-texture.d.ts +3 -1
  64. package/dist/environment/ibl-texture.d.ts.map +1 -1
  65. package/dist/environment/ibl-texture.js +7 -1
  66. package/dist/environment/ibl-texture.js.map +1 -1
  67. package/dist/environment-raycast/environment-raycast.d.ts +136 -0
  68. package/dist/environment-raycast/environment-raycast.d.ts.map +1 -0
  69. package/dist/environment-raycast/environment-raycast.js +333 -0
  70. package/dist/environment-raycast/environment-raycast.js.map +1 -0
  71. package/dist/environment-raycast/index.d.ts +9 -0
  72. package/dist/environment-raycast/index.d.ts.map +1 -0
  73. package/dist/environment-raycast/raycast-target.d.ts +114 -0
  74. package/dist/environment-raycast/raycast-target.d.ts.map +1 -0
  75. package/dist/environment-raycast/raycast-target.js +84 -0
  76. package/dist/environment-raycast/raycast-target.js.map +1 -0
  77. package/dist/grab/distance-grabbable.d.ts +27 -2
  78. package/dist/grab/distance-grabbable.d.ts.map +1 -1
  79. package/dist/grab/distance-grabbable.js +25 -2
  80. package/dist/grab/distance-grabbable.js.map +1 -1
  81. package/dist/grab/grab-system.d.ts +106 -61
  82. package/dist/grab/grab-system.d.ts.map +1 -1
  83. package/dist/grab/grab-system.js +61 -10
  84. package/dist/grab/grab-system.js.map +1 -1
  85. package/dist/grab/handles.d.ts +14 -4
  86. package/dist/grab/handles.d.ts.map +1 -1
  87. package/dist/grab/handles.js +45 -18
  88. package/dist/grab/handles.js.map +1 -1
  89. package/dist/grab/index.d.ts +0 -1
  90. package/dist/grab/index.d.ts.map +1 -1
  91. package/dist/grab/index.js +0 -2
  92. package/dist/grab/index.js.map +1 -1
  93. package/dist/grab/one-hand-grabbable.js +1 -0
  94. package/dist/grab/one-hand-grabbable.js.map +1 -1
  95. package/dist/grab/two-hands-grabbable.js +1 -0
  96. package/dist/grab/two-hands-grabbable.js.map +1 -1
  97. package/dist/index.d.ts +3 -0
  98. package/dist/index.d.ts.map +1 -1
  99. package/dist/index.js +9 -1
  100. package/dist/index.js.map +1 -1
  101. package/dist/init/world-initializer.d.ts +13 -1
  102. package/dist/init/world-initializer.d.ts.map +1 -1
  103. package/dist/init/world-initializer.js +78 -18
  104. package/dist/init/world-initializer.js.map +1 -1
  105. package/dist/init/xr.d.ts +1 -0
  106. package/dist/init/xr.d.ts.map +1 -1
  107. package/dist/init/xr.js +6 -0
  108. package/dist/init/xr.js.map +1 -1
  109. package/dist/input/input-system.d.ts +409 -5
  110. package/dist/input/input-system.d.ts.map +1 -1
  111. package/dist/input/input-system.js +166 -32
  112. package/dist/input/input-system.js.map +1 -1
  113. package/dist/input/state-tags.d.ts +32 -15
  114. package/dist/input/state-tags.d.ts.map +1 -1
  115. package/dist/input/state-tags.js +34 -16
  116. package/dist/input/state-tags.js.map +1 -1
  117. package/dist/level/level-entity-creator.js +1 -0
  118. package/dist/level/level-entity-creator.js.map +1 -1
  119. package/dist/level/level-root.js +1 -0
  120. package/dist/level/level-root.js.map +1 -1
  121. package/dist/level/level-system.js +1 -0
  122. package/dist/level/level-system.js.map +1 -1
  123. package/dist/level/level-tag.js +1 -0
  124. package/dist/level/level-tag.js.map +1 -1
  125. package/dist/locomotion/locomotion.d.ts +10 -0
  126. package/dist/locomotion/locomotion.d.ts.map +1 -1
  127. package/dist/locomotion/locomotion.js +17 -1
  128. package/dist/locomotion/locomotion.js.map +1 -1
  129. package/dist/locomotion/slide.d.ts +10 -0
  130. package/dist/locomotion/slide.d.ts.map +1 -1
  131. package/dist/locomotion/slide.js +6 -2
  132. package/dist/locomotion/slide.js.map +1 -1
  133. package/dist/locomotion/teleport.js +1 -0
  134. package/dist/locomotion/teleport.js.map +1 -1
  135. package/dist/mcp/ecs-debug-tools.d.ts +167 -0
  136. package/dist/mcp/ecs-debug-tools.d.ts.map +1 -0
  137. package/dist/mcp/ecs-debug-tools.js +602 -0
  138. package/dist/mcp/ecs-debug-tools.js.map +1 -0
  139. package/dist/mcp/index.d.ts +10 -0
  140. package/dist/mcp/index.d.ts.map +1 -0
  141. package/dist/mcp/mcp-runtime.d.ts +31 -0
  142. package/dist/mcp/mcp-runtime.d.ts.map +1 -0
  143. package/dist/mcp/mcp-runtime.js +85 -0
  144. package/dist/mcp/mcp-runtime.js.map +1 -0
  145. package/dist/mcp/scene-tools.d.ts +41 -0
  146. package/dist/mcp/scene-tools.d.ts.map +1 -0
  147. package/dist/mcp/scene-tools.js +95 -0
  148. package/dist/mcp/scene-tools.js.map +1 -0
  149. package/dist/physics/physics-system.d.ts +1 -1
  150. package/dist/physics/physics-system.d.ts.map +1 -1
  151. package/dist/physics/physics-system.js +9 -4
  152. package/dist/physics/physics-system.js.map +1 -1
  153. package/dist/physics/utils.d.ts.map +1 -1
  154. package/dist/physics/utils.js +1 -1
  155. package/dist/scene-understanding/anchor.js +1 -0
  156. package/dist/scene-understanding/anchor.js.map +1 -1
  157. package/dist/scene-understanding/mesh.js +1 -0
  158. package/dist/scene-understanding/mesh.js.map +1 -1
  159. package/dist/scene-understanding/plane.js +1 -0
  160. package/dist/scene-understanding/plane.js.map +1 -1
  161. package/dist/scene-understanding/scene-understanding-system.d.ts +0 -39
  162. package/dist/scene-understanding/scene-understanding-system.d.ts.map +1 -1
  163. package/dist/scene-understanding/scene-understanding-system.js +10 -2
  164. package/dist/scene-understanding/scene-understanding-system.js.map +1 -1
  165. package/dist/transform/index.d.ts +2 -0
  166. package/dist/transform/index.d.ts.map +1 -1
  167. package/dist/transform/synced-euler.d.ts +62 -0
  168. package/dist/transform/synced-euler.d.ts.map +1 -0
  169. package/dist/transform/synced-euler.js +212 -0
  170. package/dist/transform/synced-euler.js.map +1 -0
  171. package/dist/transform/synced-quaternion.d.ts +11 -0
  172. package/dist/transform/synced-quaternion.d.ts.map +1 -1
  173. package/dist/transform/synced-quaternion.js +29 -0
  174. package/dist/transform/synced-quaternion.js.map +1 -1
  175. package/dist/transform/transform-utils.d.ts +24 -0
  176. package/dist/transform/transform-utils.d.ts.map +1 -0
  177. package/dist/transform/transform-utils.js +53 -0
  178. package/dist/transform/transform-utils.js.map +1 -0
  179. package/dist/transform/transform.d.ts.map +1 -1
  180. package/dist/transform/transform.js +19 -2
  181. package/dist/transform/transform.js.map +1 -1
  182. package/dist/ui/follow.js +1 -0
  183. package/dist/ui/follow.js.map +1 -1
  184. package/dist/ui/index.d.ts +1 -1
  185. package/dist/ui/index.d.ts.map +1 -1
  186. package/dist/ui/screenspace.js +1 -0
  187. package/dist/ui/screenspace.js.map +1 -1
  188. package/dist/ui/ui.d.ts.map +1 -1
  189. package/dist/ui/ui.js +2 -8
  190. package/dist/ui/ui.js.map +1 -1
  191. package/dist/version.d.ts +1 -1
  192. package/dist/version.js +1 -1
  193. package/dist/visibility/visibility.d.ts.map +1 -1
  194. package/dist/visibility/visibility.js +4 -1
  195. package/dist/visibility/visibility.js.map +1 -1
  196. package/package.json +16 -9
  197. package/dist/node_modules/.pnpm/@pmndrs_uikitml@0.1.7_super-three@0.177.0/node_modules/@pmndrs/uikitml/dist/interpreter/html.js +0 -128
  198. package/dist/node_modules/.pnpm/@pmndrs_uikitml@0.1.7_super-three@0.177.0/node_modules/@pmndrs/uikitml/dist/interpreter/html.js.map +0 -1
  199. package/dist/node_modules/.pnpm/@pmndrs_uikitml@0.1.7_super-three@0.177.0/node_modules/@pmndrs/uikitml/dist/interpreter/index.js +0 -161
  200. package/dist/node_modules/.pnpm/@pmndrs_uikitml@0.1.7_super-three@0.177.0/node_modules/@pmndrs/uikitml/dist/interpreter/index.js.map +0 -1
  201. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/error-codes.js +0 -66
  202. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/error-codes.js.map +0 -1
  203. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/foreign-content.js +0 -162
  204. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/foreign-content.js.map +0 -1
  205. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/html.js +0 -519
  206. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/html.js.map +0 -1
  207. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/token.js +0 -15
  208. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/token.js.map +0 -1
  209. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/unicode.js +0 -32
  210. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/unicode.js.map +0 -1
  211. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/formatting-element-list.js +0 -10
  212. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/formatting-element-list.js.map +0 -1
  213. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/index.js +0 -41
  214. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/index.js.map +0 -1
  215. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/open-element-stack.js +0 -35
  216. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/open-element-stack.js.map +0 -1
  217. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/serializer/index.js +0 -24
  218. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/serializer/index.js.map +0 -1
  219. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/tokenizer/index.js +0 -92
  220. package/dist/node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/tokenizer/index.js.map +0 -1
  221. package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/libs/fflate.module.js +0 -382
  222. package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/libs/fflate.module.js.map +0 -1
  223. package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/loaders/EXRLoader.js +0 -2587
  224. package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/loaders/EXRLoader.js.map +0 -1
  225. package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/loaders/RGBELoader.js +0 -477
  226. package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/examples/jsm/loaders/RGBELoader.js.map +0 -1
  227. package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/src/math/MathUtils.js +0 -17
  228. package/dist/node_modules/.pnpm/super-three@0.177.0/node_modules/super-three/src/math/MathUtils.js.map +0 -1
@@ -1,10 +1,15 @@
1
1
  import { createSystem } from '../ecs/system.js';
2
2
  import { VisibilityState } from '../ecs/world.js';
3
3
  import 'elics';
4
+ import '../ecs/entity.js';
4
5
  import '../ecs/component-registry.js';
6
+ import { DistanceGrabbable } from '../grab/distance-grabbable.js';
7
+ import { OneHandGrabbable } from '../grab/one-hand-grabbable.js';
8
+ import { TwoHandsGrabbable } from '../grab/two-hands-grabbable.js';
5
9
  import { Transform } from '../transform/transform.js';
10
+ import '../transform/transform-utils.js';
6
11
  import '../runtime/three.js';
7
- import { Interactable, Hovered, Pressed } from './state-tags.js';
12
+ import { PokeInteractable, RayInteractable, Hovered, Pressed } from './state-tags.js';
8
13
 
9
14
  /**
10
15
  * Copyright (c) Meta Platforms, Inc. and affiliates.
@@ -18,14 +23,14 @@ import { Interactable, Hovered, Pressed } from './state-tags.js';
18
23
  *
19
24
  * @remarks
20
25
  * - Scheduled after player movement so pointers reflect updated transforms.
21
- * - Rebuilds the interactable list every frame when in XR mode.
26
+ * - Maintains type-specific descendant arrays for optimized pointer intersection.
22
27
  * - Adds transient `Hovered` / `Pressed` tags so other systems can react declaratively.
23
28
  *
24
29
  * @category Input
25
30
  * @example React to Hovered / Pressed
26
31
  * ```ts
27
32
  * export class HighlightSystem extends createSystem({
28
- * items: { required: [Interactable] }
33
+ * items: { required: [RayInteractable] }
29
34
  * }) {
30
35
  * update() {
31
36
  * this.queries.items.entities.forEach(e => {
@@ -36,51 +41,175 @@ import { Interactable, Hovered, Pressed } from './state-tags.js';
36
41
  * ```
37
42
  */
38
43
  class InputSystem extends createSystem({
39
- interactable: { required: [Interactable, Transform] },
44
+ /** Entities interactable via ray pointer */
45
+ rayInteractables: { required: [RayInteractable, Transform] },
46
+ /** Entities interactable via touch/poke pointer */
47
+ pokeInteractables: { required: [PokeInteractable, Transform] },
48
+ /** One-hand grabbable entities */
49
+ oneHandGrabbables: { required: [OneHandGrabbable, Transform] },
50
+ /** Two-hands grabbable entities */
51
+ twoHandsGrabbables: { required: [TwoHandsGrabbable, Transform] },
52
+ /** Distance grabbable entities */
53
+ distanceGrabbables: { required: [DistanceGrabbable, Transform] },
40
54
  }, {}) {
41
55
  constructor() {
42
56
  super(...arguments);
43
- this.intersectables = [];
57
+ /** Descendants for ray pointer intersection */
58
+ this.rayDescendants = [];
59
+ /** Descendants for touch/poke pointer intersection */
60
+ this.touchDescendants = [];
61
+ /** Descendants for grab pointer intersection */
62
+ this.grabDescendants = [];
44
63
  this.shouldSetIntersectables = false;
64
+ this.dirty = true;
45
65
  this.listeners = new WeakMap();
46
66
  this.lastBVHUpdate = new WeakMap();
47
67
  }
48
68
  init() {
49
- // Track XR visibility for scoped intersections (XR mode only)
69
+ // React to XR visibility for enabling scoped intersections
50
70
  this.cleanupFuncs.push(this.visibilityState.subscribe((value) => {
51
- this.shouldSetIntersectables = value === VisibilityState.Visible;
71
+ const nextVisible = value === VisibilityState.Visible;
72
+ if (this.shouldSetIntersectables !== nextVisible) {
73
+ this.shouldSetIntersectables = nextVisible;
74
+ this.dirty = true;
75
+ }
52
76
  }));
53
- // Setup/cleanup event listeners when entities qualify/disqualify
54
- this.queries.interactable.subscribe('qualify', (entity) => {
77
+ // Handle additions/removals for ray interactables
78
+ this.queries.rayInteractables.subscribe('qualify', (entity) => {
79
+ this.setupEventListeners(entity);
80
+ this.dirty = true;
81
+ });
82
+ this.queries.rayInteractables.subscribe('disqualify', (entity) => {
83
+ this.cleanupEventListeners(entity);
84
+ this.dirty = true;
85
+ });
86
+ // Handle additions/removals for poke interactables
87
+ this.queries.pokeInteractables.subscribe('qualify', (entity) => {
55
88
  this.setupEventListeners(entity);
89
+ this.dirty = true;
90
+ // Enable touch pointers when first poke interactable appears
91
+ this.input.multiPointers.left.toggleSubPointer('touch', true);
92
+ this.input.multiPointers.right.toggleSubPointer('touch', true);
56
93
  });
57
- this.queries.interactable.subscribe('disqualify', (entity) => {
94
+ this.queries.pokeInteractables.subscribe('disqualify', (entity) => {
58
95
  this.cleanupEventListeners(entity);
96
+ this.dirty = true;
97
+ // Disable touch pointers when no poke interactables remain
98
+ if (this.queries.pokeInteractables.entities.size === 0) {
99
+ this.input.multiPointers.left.toggleSubPointer('touch', false);
100
+ this.input.multiPointers.right.toggleSubPointer('touch', false);
101
+ }
102
+ });
103
+ // Handle additions/removals for grabbables (all types)
104
+ this.queries.oneHandGrabbables.subscribe('qualify', () => {
105
+ this.dirty = true;
106
+ });
107
+ this.queries.oneHandGrabbables.subscribe('disqualify', () => {
108
+ this.dirty = true;
109
+ });
110
+ this.queries.twoHandsGrabbables.subscribe('qualify', () => {
111
+ this.dirty = true;
59
112
  });
113
+ this.queries.twoHandsGrabbables.subscribe('disqualify', () => {
114
+ this.dirty = true;
115
+ });
116
+ this.queries.distanceGrabbables.subscribe('qualify', () => {
117
+ this.dirty = true;
118
+ });
119
+ this.queries.distanceGrabbables.subscribe('disqualify', () => {
120
+ this.dirty = true;
121
+ });
122
+ // Enable touch pointer if there are already poke interactables
123
+ if (this.queries.pokeInteractables.entities.size > 0) {
124
+ this.input.multiPointers.left.toggleSubPointer('touch', true);
125
+ this.input.multiPointers.right.toggleSubPointer('touch', true);
126
+ }
60
127
  }
61
128
  update(delta, time) {
62
129
  // Update input sampling first
63
130
  this.input.update(this.xrManager, delta, time);
64
- // Rebuild interactables list every frame in XR mode
65
- if (this.shouldSetIntersectables) {
66
- this.intersectables.length = 0;
67
- for (const entity of this.queries.interactable.entities) {
68
- if (entity.object3D) {
69
- this.intersectables.push(entity.object3D);
131
+ // Maintain the filtered lists of interactables for pointer raycasting
132
+ if (this.dirty) {
133
+ this.dirty = false;
134
+ this.updateDescendantArrays();
135
+ }
136
+ }
137
+ /**
138
+ * Update per-type descendant arrays for optimized pointer intersection
139
+ */
140
+ updateDescendantArrays() {
141
+ // Clear arrays
142
+ this.rayDescendants.length = 0;
143
+ this.touchDescendants.length = 0;
144
+ this.grabDescendants.length = 0;
145
+ if (!this.shouldSetIntersectables) {
146
+ // Clear all descendant arrays on scene
147
+ this.scene.interactableDescendants = undefined;
148
+ this.scene.rayDescendants = undefined;
149
+ this.scene.touchDescendants = undefined;
150
+ this.scene.grabDescendants = undefined;
151
+ return;
152
+ }
153
+ // Collect ray interactables + distance grabbables (both use ray)
154
+ for (const entity of this.queries.rayInteractables.entities) {
155
+ const obj = entity.object3D;
156
+ if (isDescendantOf(obj, this.scene)) {
157
+ this.rayDescendants.push(obj);
158
+ }
159
+ }
160
+ for (const entity of this.queries.distanceGrabbables.entities) {
161
+ const obj = entity.object3D;
162
+ if (isDescendantOf(obj, this.scene)) {
163
+ // Only add if not already in ray descendants
164
+ if (!this.rayDescendants.includes(obj)) {
165
+ this.rayDescendants.push(obj);
70
166
  }
71
167
  }
72
- this.scene.interactableDescendants = this.intersectables;
73
168
  }
74
- else {
75
- // In 2D mode, clear the reference so pointer-events uses default behavior
76
- this.scene.interactableDescendants = undefined;
169
+ // Collect poke/touch interactables
170
+ for (const entity of this.queries.pokeInteractables.entities) {
171
+ const obj = entity.object3D;
172
+ if (isDescendantOf(obj, this.scene)) {
173
+ this.touchDescendants.push(obj);
174
+ }
77
175
  }
176
+ // Collect grab interactables (oneHand + twoHands)
177
+ for (const entity of this.queries.oneHandGrabbables.entities) {
178
+ const obj = entity.object3D;
179
+ if (isDescendantOf(obj, this.scene)) {
180
+ this.grabDescendants.push(obj);
181
+ }
182
+ }
183
+ for (const entity of this.queries.twoHandsGrabbables.entities) {
184
+ const obj = entity.object3D;
185
+ if (isDescendantOf(obj, this.scene)) {
186
+ // Only add if not already in grab descendants
187
+ if (!this.grabDescendants.includes(obj)) {
188
+ this.grabDescendants.push(obj);
189
+ }
190
+ }
191
+ }
192
+ // Set type-specific arrays on scene
193
+ this.scene.rayDescendants = this.rayDescendants;
194
+ this.scene.touchDescendants = this.touchDescendants;
195
+ this.scene.grabDescendants = this.grabDescendants;
196
+ // Also set legacy interactableDescendants as union for backwards compatibility
197
+ const allDescendants = new Set([
198
+ ...this.rayDescendants,
199
+ ...this.touchDescendants,
200
+ ...this.grabDescendants,
201
+ ]);
202
+ this.scene.interactableDescendants = Array.from(allDescendants);
78
203
  }
79
204
  setupEventListeners(entity) {
80
205
  const object3D = entity.object3D;
81
206
  if (!object3D) {
82
207
  return;
83
208
  }
209
+ // Skip if already has listeners
210
+ if (this.listeners.has(object3D)) {
211
+ return;
212
+ }
84
213
  // Compute BVH for all meshes in the entity hierarchy for fast raycasting
85
214
  this.computeBoundsTreeForEntity(object3D);
86
215
  // Enable pointer events for raycasting
@@ -97,22 +226,26 @@ class InputSystem extends createSystem({
97
226
  this.lastBVHUpdate.set(object3D, now);
98
227
  }
99
228
  };
100
- const enter = () => {
229
+ const enter = (event) => {
230
+ event.stopPropagation();
101
231
  maybeRefreshBVH();
102
232
  if (!entity.hasComponent(Hovered)) {
103
233
  entity.addComponent(Hovered);
104
234
  }
105
235
  };
106
- const leave = () => {
236
+ const leave = (event) => {
237
+ event.stopPropagation();
107
238
  entity.removeComponent(Hovered);
108
239
  };
109
- const down = () => {
240
+ const down = (event) => {
241
+ event.stopPropagation();
110
242
  maybeRefreshBVH();
111
243
  if (!entity.hasComponent(Pressed)) {
112
244
  entity.addComponent(Pressed);
113
245
  }
114
246
  };
115
- const up = () => {
247
+ const up = (event) => {
248
+ event.stopPropagation();
116
249
  entity.removeComponent(Pressed);
117
250
  };
118
251
  this.listeners.set(object3D, { enter, leave, down, up });
@@ -149,16 +282,17 @@ class InputSystem extends createSystem({
149
282
  object3D.removeEventListener('pointerup', fns.up);
150
283
  this.listeners.delete(object3D);
151
284
  }
152
- // Remove hover/press state components if they exist
153
- // Check hasComponent first to avoid warnings when entity is being destroyed
154
- // (entity destruction removes all components, so trying to remove them again causes warnings)
155
- if (entity.hasComponent(Hovered)) {
156
- entity.removeComponent(Hovered);
157
- }
158
- if (entity.hasComponent(Pressed)) {
159
- entity.removeComponent(Pressed);
285
+ entity.removeComponent(Hovered).removeComponent(Pressed);
286
+ }
287
+ }
288
+ function isDescendantOf(object, parent) {
289
+ while (object) {
290
+ if (object === parent) {
291
+ return true;
160
292
  }
293
+ object = object.parent;
161
294
  }
295
+ return false;
162
296
  }
163
297
 
164
298
  export { InputSystem };
@@ -1 +1 @@
1
- {"version":3,"file":"input-system.js","sources":["../../src/input/input-system.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"input-system.js","sources":["../../src/input/input-system.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -5,52 +5,69 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
7
  /**
8
- * Marks an entity as eligible for XR/UI pointer interaction.
8
+ * Marks an entity as eligible for ray-based pointer interaction.
9
9
  *
10
10
  * @remarks
11
- * - The {@link InputSystem} discovers all entities with `Interactable` and, when
12
- * XR visibility is Visible, registers their Object3D roots as raycast targets
13
- * (computing BVHs for meshes to accelerate intersection tests).
11
+ * - The {@link InputSystem} discovers all entities with `RayInteractable` and
12
+ * registers their Object3D roots as raycast targets.
13
+ * - Used for UI elements, buttons, and clickable objects interacted via ray pointer.
14
14
  * - When a pointer enters/leaves or presses/releases on the entity, the system
15
- * adds/removes the transient tags {@link Hovered} and {@link Pressed} so other
16
- * systems can react declaratively without manual event wiring.
17
- * - Add this tag to the root Object3D of your UI/interactive object. Children
18
- * are implicitly covered because the InputSystem registers the whole subtree.
15
+ * adds/removes the transient tags {@link Hovered} and {@link Pressed}.
19
16
  *
20
17
  * @category Input
21
18
  * @example Highlight on hover
22
19
  * ```ts
23
- * export class HighlightSystem extends createSystem({ items: { required: [Interactable] } }) {
20
+ * export class HighlightSystem extends createSystem({ items: { required: [RayInteractable] } }) {
24
21
  * update() {
25
22
  * this.queries.items.entities.forEach(e => {
26
- * e.object3D.visible = !e.hasComponent(Pressed);
27
23
  * e.object3D.material.emissiveIntensity = e.hasComponent(Hovered) ? 1.0 : 0.0;
28
24
  * });
29
25
  * }
30
26
  * }
31
27
  * ```
32
28
  */
33
- export declare const Interactable: import("elics").Component<{}>;
29
+ export declare const RayInteractable: import("elics").Component<{}>;
30
+ /**
31
+ * Marks an entity as eligible for poke/touch interaction.
32
+ *
33
+ * @remarks
34
+ * - Used for UI elements that can be poked/touched with finger or controller.
35
+ * - Auto-selects when finger crosses the surface (distance <= 0).
36
+ * - Uses hysteresis (separate enter/exit thresholds) to prevent flickering.
37
+ *
38
+ * @category Input
39
+ * @example Create a pokeable button
40
+ * ```ts
41
+ * entity.addComponent(PokeInteractable);
42
+ * ```
43
+ */
44
+ export declare const PokeInteractable: import("elics").Component<{}>;
34
45
  /**
35
- * A transient tag set while a pointer ray is intersecting an `Interactable`.
46
+ * A transient tag set while a pointer is intersecting an interactable.
36
47
  *
37
48
  * @remarks
38
- * - Managed by {@link InputSystem}; do not add/remove this component manually in normal usage.
49
+ * - Managed by {@link InputSystem}; do not add/remove this component manually.
39
50
  * - Use as a declarative condition for hover effects, tooltips, or affordances.
51
+ * - Works with both RayInteractable and PokeInteractable entities.
40
52
  *
41
53
  * @category Input
42
54
  * @hideineditor
43
55
  */
44
56
  export declare const Hovered: import("elics").Component<{}>;
45
57
  /**
46
- * A transient tag set while a pointer is actively pressing an `Interactable`.
58
+ * A transient tag set while a pointer is actively pressing an interactable.
47
59
  *
48
60
  * @remarks
49
- * - Managed by {@link InputSystem}; do not add/remove this component manually in normal usage.
61
+ * - Managed by {@link InputSystem}; do not add/remove this component manually.
50
62
  * - Often used to gate activation logic or pressed-state visuals.
63
+ * - Works with both RayInteractable and PokeInteractable entities.
51
64
  *
52
65
  * @category Input
53
66
  * @hideineditor
54
67
  */
55
68
  export declare const Pressed: import("elics").Component<{}>;
69
+ /**
70
+ * @deprecated Use `RayInteractable` instead. This will be removed in a future version.
71
+ */
72
+ export declare const Interactable: import("elics").Component<{}>;
56
73
  //# sourceMappingURL=state-tags.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"state-tags.d.ts","sourceRoot":"","sources":["../../src/input/state-tags.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,YAAY,+BAIxB,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,OAAO,+BAInB,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,OAAO,+BAInB,CAAC"}
1
+ {"version":3,"file":"state-tags.d.ts","sourceRoot":"","sources":["../../src/input/state-tags.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,eAAe,+BAI3B,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,gBAAgB,+BAI5B,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,OAAO,+BAInB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,OAAO,+BAInB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,+BAAkB,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import '@preact/signals-core';
2
2
  import '../ecs/world.js';
3
3
  import { createComponent } from 'elics';
4
+ import '../ecs/entity.js';
4
5
  import '../ecs/component-registry.js';
5
6
 
6
7
  /**
@@ -10,54 +11,71 @@ import '../ecs/component-registry.js';
10
11
  * LICENSE file in the root directory of this source tree.
11
12
  */
12
13
  /**
13
- * Marks an entity as eligible for XR/UI pointer interaction.
14
+ * Marks an entity as eligible for ray-based pointer interaction.
14
15
  *
15
16
  * @remarks
16
- * - The {@link InputSystem} discovers all entities with `Interactable` and, when
17
- * XR visibility is Visible, registers their Object3D roots as raycast targets
18
- * (computing BVHs for meshes to accelerate intersection tests).
17
+ * - The {@link InputSystem} discovers all entities with `RayInteractable` and
18
+ * registers their Object3D roots as raycast targets.
19
+ * - Used for UI elements, buttons, and clickable objects interacted via ray pointer.
19
20
  * - When a pointer enters/leaves or presses/releases on the entity, the system
20
- * adds/removes the transient tags {@link Hovered} and {@link Pressed} so other
21
- * systems can react declaratively without manual event wiring.
22
- * - Add this tag to the root Object3D of your UI/interactive object. Children
23
- * are implicitly covered because the InputSystem registers the whole subtree.
21
+ * adds/removes the transient tags {@link Hovered} and {@link Pressed}.
24
22
  *
25
23
  * @category Input
26
24
  * @example Highlight on hover
27
25
  * ```ts
28
- * export class HighlightSystem extends createSystem({ items: { required: [Interactable] } }) {
26
+ * export class HighlightSystem extends createSystem({ items: { required: [RayInteractable] } }) {
29
27
  * update() {
30
28
  * this.queries.items.entities.forEach(e => {
31
- * e.object3D.visible = !e.hasComponent(Pressed);
32
29
  * e.object3D.material.emissiveIntensity = e.hasComponent(Hovered) ? 1.0 : 0.0;
33
30
  * });
34
31
  * }
35
32
  * }
36
33
  * ```
37
34
  */
38
- const Interactable = createComponent('Interactable', {}, 'Marks an entity as eligible for XR pointer interaction (ray/proximity).');
35
+ const RayInteractable = createComponent('RayInteractable', {}, 'Marks an entity as eligible for ray-based pointer interaction.');
39
36
  /**
40
- * A transient tag set while a pointer ray is intersecting an `Interactable`.
37
+ * Marks an entity as eligible for poke/touch interaction.
41
38
  *
42
39
  * @remarks
43
- * - Managed by {@link InputSystem}; do not add/remove this component manually in normal usage.
40
+ * - Used for UI elements that can be poked/touched with finger or controller.
41
+ * - Auto-selects when finger crosses the surface (distance <= 0).
42
+ * - Uses hysteresis (separate enter/exit thresholds) to prevent flickering.
43
+ *
44
+ * @category Input
45
+ * @example Create a pokeable button
46
+ * ```ts
47
+ * entity.addComponent(PokeInteractable);
48
+ * ```
49
+ */
50
+ const PokeInteractable = createComponent('PokeInteractable', {}, 'Marks an entity as eligible for poke/touch interaction.');
51
+ /**
52
+ * A transient tag set while a pointer is intersecting an interactable.
53
+ *
54
+ * @remarks
55
+ * - Managed by {@link InputSystem}; do not add/remove this component manually.
44
56
  * - Use as a declarative condition for hover effects, tooltips, or affordances.
57
+ * - Works with both RayInteractable and PokeInteractable entities.
45
58
  *
46
59
  * @category Input
47
60
  * @hideineditor
48
61
  */
49
62
  const Hovered = createComponent('Hovered', {}, 'A tag added by InputSystem while a pointer is hovering over the entity.');
50
63
  /**
51
- * A transient tag set while a pointer is actively pressing an `Interactable`.
64
+ * A transient tag set while a pointer is actively pressing an interactable.
52
65
  *
53
66
  * @remarks
54
- * - Managed by {@link InputSystem}; do not add/remove this component manually in normal usage.
67
+ * - Managed by {@link InputSystem}; do not add/remove this component manually.
55
68
  * - Often used to gate activation logic or pressed-state visuals.
69
+ * - Works with both RayInteractable and PokeInteractable entities.
56
70
  *
57
71
  * @category Input
58
72
  * @hideineditor
59
73
  */
60
74
  const Pressed = createComponent('Pressed', {}, 'A tag added by InputSystem while the entity is actively pressed.');
75
+ /**
76
+ * @deprecated Use `RayInteractable` instead. This will be removed in a future version.
77
+ */
78
+ const Interactable = RayInteractable;
61
79
 
62
- export { Hovered, Interactable, Pressed };
80
+ export { Hovered, Interactable, PokeInteractable, Pressed, RayInteractable };
63
81
  //# sourceMappingURL=state-tags.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"state-tags.js","sources":["../../src/input/state-tags.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAAA;;;;;AAKG;AAIH;;;;;;;;;;;;;;;;;;;;;;;;;AAyBG;AACI,MAAM,YAAY,GAAG,eAAe,CACzC,cAAc,EACd,EAAE,EACF,yEAAyE;AAG3E;;;;;;;;;AASG;AACI,MAAM,OAAO,GAAG,eAAe,CACpC,SAAS,EACT,EAAE,EACF,yEAAyE;AAG3E;;;;;;;;;AASG;AACI,MAAM,OAAO,GAAG,eAAe,CACpC,SAAS,EACT,EAAE,EACF,kEAAkE;;;;"}
1
+ {"version":3,"file":"state-tags.js","sources":["../../src/input/state-tags.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAAA;;;;;AAKG;AAIH;;;;;;;;;;;;;;;;;;;;;AAqBG;AACI,MAAM,eAAe,GAAG,eAAe,CAC5C,iBAAiB,EACjB,EAAE,EACF,gEAAgE;AAGlE;;;;;;;;;;;;;AAaG;AACI,MAAM,gBAAgB,GAAG,eAAe,CAC7C,kBAAkB,EAClB,EAAE,EACF,yDAAyD;AAG3D;;;;;;;;;;AAUG;AACI,MAAM,OAAO,GAAG,eAAe,CACpC,SAAS,EACT,EAAE,EACF,yEAAyE;AAG3E;;;;;;;;;;AAUG;AACI,MAAM,OAAO,GAAG,eAAe,CACpC,SAAS,EACT,EAAE,EACF,kEAAkE;AAGpE;;AAEG;AACI,MAAM,YAAY,GAAG;;;;"}
@@ -1,6 +1,7 @@
1
1
  import { ComponentRegistry, Types } from 'elics';
2
2
  import '@preact/signals-core';
3
3
  import '../ecs/world.js';
4
+ import '../ecs/entity.js';
4
5
  import '../ecs/component-registry.js';
5
6
  import '@pmndrs/uikit';
6
7
  import 'three';
@@ -1 +1 @@
1
- {"version":3,"file":"level-entity-creator.js","sources":["../../src/level/level-entity-creator.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"level-entity-creator.js","sources":["../../src/level/level-entity-creator.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import '@preact/signals-core';
2
2
  import '../ecs/world.js';
3
3
  import { createComponent } from 'elics';
4
+ import '../ecs/entity.js';
4
5
  import '../ecs/component-registry.js';
5
6
 
6
7
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"level-root.js","sources":["../../src/level/level-root.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAAA;;;;;AAKG;AAIH;;;;;;;;;AASG;AACI,MAAM,SAAS,GAAG,eAAe,CACtC,WAAW,EACX,EAAE,EACF,kDAAkD;;;;"}
1
+ {"version":3,"file":"level-root.js","sources":["../../src/level/level-root.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAAA;;;;;AAKG;AAIH;;;;;;;;;AASG;AACI,MAAM,SAAS,GAAG,eAAe,CACtC,WAAW,EACX,EAAE,EACF,kDAAkD;;;;"}
@@ -2,6 +2,7 @@ import { signal } from '@preact/signals-core';
2
2
  import { createSystem } from '../ecs/system.js';
3
3
  import '../ecs/world.js';
4
4
  import { Types } from 'elics';
5
+ import '../ecs/entity.js';
5
6
  import '../ecs/component-registry.js';
6
7
  import { DomeTexture } from '../environment/dome-texture.js';
7
8
  import { DomeGradient } from '../environment/dome-gradient.js';
@@ -1 +1 @@
1
- {"version":3,"file":"level-system.js","sources":["../../src/level/level-system.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"level-system.js","sources":["../../src/level/level-system.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import '@preact/signals-core';
2
2
  import '../ecs/world.js';
3
3
  import { createComponent, Types } from 'elics';
4
+ import '../ecs/entity.js';
4
5
  import '../ecs/component-registry.js';
5
6
 
6
7
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"level-tag.js","sources":["../../src/level/level-tag.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAAA;;;;;AAKG;AAIH;;;;;;;;;;AAUG;AACI,MAAM,QAAQ,GAAG,eAAe,CACrC,UAAU,EACV;AACE,IAAA,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;CACxC,EACD,uCAAuC;;;;"}
1
+ {"version":3,"file":"level-tag.js","sources":["../../src/level/level-tag.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAAA;;;;;AAKG;AAIH;;;;;;;;;;AAUG;AACI,MAAM,QAAQ,GAAG,eAAe,CACrC,UAAU,EACV;AACE,IAAA,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;CACxC,EACD,uCAAuC;;;;"}
@@ -101,6 +101,11 @@ declare const LocomotionSystem_base: import("elics").SystemConstructor<{
101
101
  type: Types.String;
102
102
  default: InputComponent;
103
103
  };
104
+ /** Whether jumping is enabled. */
105
+ enableJumping: {
106
+ type: Types.Boolean;
107
+ default: true;
108
+ };
104
109
  }, {
105
110
  envs: {
106
111
  required: import("elics").Component<{
@@ -183,6 +188,11 @@ declare const LocomotionSystem_base: import("elics").SystemConstructor<{
183
188
  type: Types.String;
184
189
  default: InputComponent;
185
190
  };
191
+ /** Whether jumping is enabled. */
192
+ enableJumping: {
193
+ type: Types.Boolean;
194
+ default: true;
195
+ };
186
196
  }, {
187
197
  envs: {
188
198
  required: import("elics").Component<{
@@ -1 +1 @@
1
- {"version":3,"file":"locomotion.d.ts","sourceRoot":"","sources":["../../src/locomotion/locomotion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAmB,MAAM,qBAAqB,CAAC;AAM7D,OAAO,EAAc,aAAa,EAAE,MAAM,WAAW,CAAC;AAEtD;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;EAYjC,CAAC;;IAwBE,wDAAwD;;;;;IAExD,4EAA4E;;;;;IAE5E,0DAA0D;;;;;IAE1D,mCAAmC;;;;;IAEnC,oCAAoC;;;;;IAEpC,6BAA6B;;;;;IAE7B,6CAA6C;;;;;IAE7C,2DAA2D;;;;;IAE3D,0EAA0E;;;;;IAE1E,kCAAkC;;;;;IAElC,qCAAqC;;;;;IAErC,0CAA0C;;;;;;;;;;;;;;;;;;;;;;;;;;;IAtB1C,wDAAwD;;;;;IAExD,4EAA4E;;;;;IAE5E,0DAA0D;;;;;IAE1D,mCAAmC;;;;;IAEnC,oCAAoC;;;;;IAEpC,6BAA6B;;;;;IAE7B,6CAA6C;;;;;IAE7C,2DAA2D;;;;;IAE3D,0EAA0E;;;;;IAE1E,kCAAkC;;;;;IAElC,qCAAqC;;;;;IAErC,0CAA0C;;;;;;;;;;;;;;;;;;;;;;;;;;;AA5C9C;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,gBAAiB,SAAQ,qBA8BrC;IACC,OAAO,CAAC,SAAS,CAAa;IAE9B,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,WAAW,CAAC,CAAc;IAClC,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,2BAA2B,CAAS;IAE5C,IAAI;YA8DU,aAAa;IA0C3B,OAAO,CAAC,sBAAsB;IA0B9B,OAAO,CAAC,2BAA2B;IASnC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAmC3B,OAAO,IAAI,IAAI;CAchB"}
1
+ {"version":3,"file":"locomotion.d.ts","sourceRoot":"","sources":["../../src/locomotion/locomotion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAmB,MAAM,qBAAqB,CAAC;AAM7D,OAAO,EAAc,aAAa,EAAE,MAAM,WAAW,CAAC;AAEtD;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;EAYjC,CAAC;;IAwBE,wDAAwD;;;;;IAExD,4EAA4E;;;;;IAE5E,0DAA0D;;;;;IAE1D,mCAAmC;;;;;IAEnC,oCAAoC;;;;;IAEpC,6BAA6B;;;;;IAE7B,6CAA6C;;;;;IAE7C,2DAA2D;;;;;IAE3D,0EAA0E;;;;;IAE1E,kCAAkC;;;;;IAElC,qCAAqC;;;;;IAErC,0CAA0C;;;;;IAE1C,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;IAxBlC,wDAAwD;;;;;IAExD,4EAA4E;;;;;IAE5E,0DAA0D;;;;;IAE1D,mCAAmC;;;;;IAEnC,oCAAoC;;;;;IAEpC,6BAA6B;;;;;IAE7B,6CAA6C;;;;;IAE7C,2DAA2D;;;;;IAE3D,0EAA0E;;;;;IAE1E,kCAAkC;;;;;IAElC,qCAAqC;;;;;IAErC,0CAA0C;;;;;IAE1C,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;AA9CtC;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,gBAAiB,SAAQ,qBAgCrC;IACC,OAAO,CAAC,SAAS,CAAa;IAE9B,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,WAAW,CAAC,CAAc;IAClC,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,2BAA2B,CAAS;IAE5C,IAAI;YAmEU,aAAa;IA2C3B,OAAO,CAAC,sBAAsB;IA6B9B,OAAO,CAAC,2BAA2B;IAYnC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAsC3B,OAAO,IAAI,IAAI;CAahB"}