@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
@@ -6,7 +6,7 @@
6
6
  */
7
7
  import { HandleOptions, HandleStore } from '@pmndrs/handle';
8
8
  import { Types } from '../ecs/index.js';
9
- import { Object3D } from '../runtime/index.js';
9
+ import { Object3D, Quaternion, Vector3 } from '../runtime/index.js';
10
10
  export declare const Handle: import("elics").Component<{
11
11
  instance: {
12
12
  type: Types.Object;
@@ -28,17 +28,27 @@ export declare class DistanceGrabHandle<T> extends HandleStore<T> {
28
28
  readonly target_: Object3D | {
29
29
  current?: Object3D | null;
30
30
  };
31
+ readonly sceneRoot_: Object3D;
31
32
  readonly getOptions: () => HandleOptions<T>;
32
33
  readonly movementMode: string;
33
- readonly returnToOrigin: Boolean;
34
- readonly moveSpeed: number;
34
+ readonly returnToOrigin: boolean;
35
+ readonly moveSpeedFactor: number;
36
+ readonly targetPosOffset: Vector3;
37
+ readonly targetQuatOffset: Quaternion;
38
+ readonly detachOnGrab: boolean;
35
39
  private previousPointerOrigin;
40
+ private isSnapped;
41
+ private static SNAP_THRESHOLD;
42
+ private static MOVE_SPEED_SCALE;
36
43
  private static _tmp;
44
+ private static _tmpQuat;
37
45
  private static _posHelper;
38
46
  private static _quatHelper;
47
+ private static _offsetPosHelper;
48
+ private static _offsetQuatHelper;
39
49
  constructor(target_: Object3D | {
40
50
  current?: Object3D | null;
41
- }, getOptions: (() => HandleOptions<T>) | undefined, movementMode: string, returnToOrigin: Boolean, moveSpeed?: number);
51
+ }, sceneRoot_: Object3D, getOptions: (() => HandleOptions<T>) | undefined, movementMode: string, returnToOrigin: boolean, moveSpeedFactor: number | undefined, targetPosOffset: Vector3 | undefined, targetQuatOffset: Quaternion | undefined, detachOnGrab: boolean);
42
52
  update(time: number): void;
43
53
  protected apply(target: Object3D): T;
44
54
  }
@@ -1 +1 @@
1
- {"version":3,"file":"handles.d.ts","sourceRoot":"","sources":["../../src/grab/handles.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAmB,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAuB,MAAM,qBAAqB,CAAC;AAEpE,eAAO,MAAM,MAAM;;;;;EAMlB,CAAC;AAEF,iEAAiE;AACjE,eAAO,MAAM,YAAY;IACvB,oFAAoF;;IAEpF,qEAAqE;;IAErE,qFAAqF;;IAErF,8DAA8D;;CAE/D,CAAC;AAEF,qBAAa,kBAAkB,CAAC,CAAC,CAAE,SAAQ,WAAW,CAAC,CAAC,CAAC;IAOrD,QAAQ,CAAC,OAAO,EAAE,QAAQ,GAAG;QAAE,OAAO,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAA;KAAE;aAC1C,UAAU,EAAE,MAAM,aAAa,CAAC,CAAC,CAAC;aAClC,YAAY,EAAE,MAAM;aACpB,cAAc,EAAE,OAAO;aACvB,SAAS,EAAE,MAAM;IAVnC,OAAO,CAAC,qBAAqB,CAAsB;IACnD,OAAO,CAAC,MAAM,CAAC,IAAI,CAAiB;IACpC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAiB;IAC1C,OAAO,CAAC,MAAM,CAAC,WAAW,CAAoB;gBAGnC,OAAO,EAAE,QAAQ,GAAG;QAAE,OAAO,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAA;KAAE,EAC1C,UAAU,GAAE,MAAM,aAAa,CAAC,CAAC,CAAC,aAAa,EAC/C,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,OAAO,EACvB,SAAS,GAAE,MAAY;IAKzC,MAAM,CAAC,IAAI,EAAE,MAAM;IAqHnB,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,GAAG,CAAC;CAcrC"}
1
+ {"version":3,"file":"handles.d.ts","sourceRoot":"","sources":["../../src/grab/handles.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAmB,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEpE,eAAO,MAAM,MAAM;;;;;EAMlB,CAAC;AAEF,iEAAiE;AACjE,eAAO,MAAM,YAAY;IACvB,oFAAoF;;IAEpF,qEAAqE;;IAErE,qFAAqF;;IAErF,8DAA8D;;CAE/D,CAAC;AAEF,qBAAa,kBAAkB,CAAC,CAAC,CAAE,SAAQ,WAAW,CAAC,CAAC,CAAC;IAarD,QAAQ,CAAC,OAAO,EAAE,QAAQ,GAAG;QAAE,OAAO,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAA;KAAE;IAC1D,QAAQ,CAAC,UAAU,EAAE,QAAQ;aACb,UAAU,EAAE,MAAM,aAAa,CAAC,CAAC,CAAC;aAClC,YAAY,EAAE,MAAM;aACpB,cAAc,EAAE,OAAO;aACvB,eAAe,EAAE,MAAM;aACvB,eAAe,EAAE,OAAO;aACxB,gBAAgB,EAAE,UAAU;aAC5B,YAAY,EAAE,OAAO;IApBvC,OAAO,CAAC,qBAAqB,CAAsB;IACnD,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAS;IACtC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAO;IACtC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAiB;IACpC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAoB;IAC3C,OAAO,CAAC,MAAM,CAAC,UAAU,CAAiB;IAC1C,OAAO,CAAC,MAAM,CAAC,WAAW,CAAoB;IAC9C,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAiB;IAChD,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAoB;gBAGzC,OAAO,EAAE,QAAQ,GAAG;QAAE,OAAO,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAA;KAAE,EACjD,UAAU,EAAE,QAAQ,EACb,UAAU,GAAE,MAAM,aAAa,CAAC,CAAC,CAAC,aAAa,EAC/C,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,OAAO,EACvB,eAAe,EAAE,MAAM,YAAM,EAC7B,eAAe,EAAE,OAAO,YAAuB,EAC/C,gBAAgB,EAAE,UAAU,YAA6B,EACzD,YAAY,EAAE,OAAO;IAWvC,MAAM,CAAC,IAAI,EAAE,MAAM;IAmInB,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,GAAG,CAAC;CAcrC"}
@@ -2,6 +2,7 @@ import { HandleStore } from '@pmndrs/handle';
2
2
  import '@preact/signals-core';
3
3
  import '../ecs/world.js';
4
4
  import { createComponent, Types } from 'elics';
5
+ import '../ecs/entity.js';
5
6
  import '../ecs/component-registry.js';
6
7
  import '../runtime/three.js';
7
8
  import { Vector3, Quaternion } from 'three';
@@ -27,21 +28,25 @@ const MovementMode = {
27
28
  RotateAtSource: 'RotateAtSource',
28
29
  };
29
30
  class DistanceGrabHandle extends HandleStore {
30
- constructor(target_, getOptions = () => ({}), movementMode, returnToOrigin, moveSpeed = 0.1) {
31
+ constructor(target_, sceneRoot_, getOptions = () => ({}), movementMode, returnToOrigin, moveSpeedFactor = 0.1, targetPosOffset = new Vector3(0, 0, 0), targetQuatOffset = new Quaternion(0, 0, 0, 1), detachOnGrab) {
31
32
  super(target_, getOptions);
32
33
  this.target_ = target_;
34
+ this.sceneRoot_ = sceneRoot_;
33
35
  this.getOptions = getOptions;
34
36
  this.movementMode = movementMode;
35
37
  this.returnToOrigin = returnToOrigin;
36
- this.moveSpeed = moveSpeed;
38
+ this.moveSpeedFactor = moveSpeedFactor;
39
+ this.targetPosOffset = targetPosOffset;
40
+ this.targetQuatOffset = targetQuatOffset;
41
+ this.detachOnGrab = detachOnGrab;
42
+ this.isSnapped = false;
43
+ this.targetQuatOffset.normalize();
44
+ target_.addEventListener('pointerup', () => {
45
+ this.isSnapped = false;
46
+ });
37
47
  }
38
48
  update(time) {
39
49
  var _a;
40
- if (this.movementMode === MovementMode.RotateAtSource ||
41
- this.movementMode === MovementMode.MoveFromTarget) {
42
- super.update(time);
43
- return;
44
- }
45
50
  const target = this.getTarget();
46
51
  if (target == null ||
47
52
  this.inputState.size === 0 ||
@@ -52,6 +57,14 @@ class DistanceGrabHandle extends HandleStore {
52
57
  }
53
58
  return;
54
59
  }
60
+ if (this.detachOnGrab && target.parent != this.sceneRoot_) {
61
+ this.sceneRoot_.attach(target);
62
+ }
63
+ if (this.movementMode === MovementMode.RotateAtSource ||
64
+ this.movementMode === MovementMode.MoveFromTarget) {
65
+ super.update(time);
66
+ return;
67
+ }
55
68
  const pointerAmount = this.inputState.size;
56
69
  target.getWorldPosition(DistanceGrabHandle._posHelper);
57
70
  target.getWorldQuaternion(DistanceGrabHandle._quatHelper);
@@ -79,18 +92,27 @@ class DistanceGrabHandle extends HandleStore {
79
92
  case MovementMode.MoveTowardsTarget: {
80
93
  const [p1] = this.inputState.values();
81
94
  const pointerOrigin = p1.pointerWorldOrigin;
82
- const distance = pointerOrigin.distanceTo(DistanceGrabHandle._posHelper);
83
- if (distance > this.moveSpeed) {
84
- const step = DistanceGrabHandle._tmp
85
- .copy(pointerOrigin)
86
- .sub(DistanceGrabHandle._posHelper)
87
- .normalize()
88
- .multiplyScalar(this.moveSpeed);
89
- DistanceGrabHandle._posHelper.add(step);
95
+ const pointerQuaternion = p1.pointerWorldQuaternion;
96
+ // Calculate target position by applying position offset in pointer's local space
97
+ const targetPosition = DistanceGrabHandle._offsetPosHelper
98
+ .copy(this.targetPosOffset)
99
+ .applyQuaternion(pointerQuaternion)
100
+ .add(pointerOrigin);
101
+ // Calculate target rotation by multiplying pointer rotation with rotation offset
102
+ const targetQuaternion = DistanceGrabHandle._offsetQuatHelper
103
+ .copy(pointerQuaternion)
104
+ .multiply(this.targetQuatOffset);
105
+ const distance = targetPosition.distanceTo(DistanceGrabHandle._posHelper);
106
+ if (!this.isSnapped && distance > DistanceGrabHandle.SNAP_THRESHOLD) {
107
+ DistanceGrabHandle._posHelper.lerp(targetPosition, this.moveSpeedFactor * time * DistanceGrabHandle.MOVE_SPEED_SCALE);
108
+ DistanceGrabHandle._quatHelper.slerp(targetQuaternion, this.moveSpeedFactor * time * DistanceGrabHandle.MOVE_SPEED_SCALE);
90
109
  }
91
110
  else {
92
- DistanceGrabHandle._posHelper.set(pointerOrigin.x, pointerOrigin.y, pointerOrigin.z);
93
- DistanceGrabHandle._quatHelper.set(p1.pointerWorldQuaternion.x, p1.pointerWorldQuaternion.y, p1.pointerWorldQuaternion.z, p1.pointerWorldQuaternion.w);
111
+ if (!this.isSnapped) {
112
+ this.isSnapped = true;
113
+ }
114
+ DistanceGrabHandle._posHelper.copy(targetPosition);
115
+ DistanceGrabHandle._quatHelper.copy(targetQuaternion);
94
116
  }
95
117
  break;
96
118
  }
@@ -107,7 +129,7 @@ class DistanceGrabHandle extends HandleStore {
107
129
  .applyMatrix4(parentWorldMatrixInverse);
108
130
  // Transform desired world quaternion to local space
109
131
  const parentWorldQuaternionInverse = target.parent
110
- .getWorldQuaternion(new Quaternion())
132
+ .getWorldQuaternion(DistanceGrabHandle._tmpQuat)
111
133
  .invert();
112
134
  quaternion
113
135
  .copy(DistanceGrabHandle._quatHelper)
@@ -147,9 +169,14 @@ class DistanceGrabHandle extends HandleStore {
147
169
  return super.apply(target);
148
170
  }
149
171
  }
172
+ DistanceGrabHandle.SNAP_THRESHOLD = 0.005;
173
+ DistanceGrabHandle.MOVE_SPEED_SCALE = 100;
150
174
  DistanceGrabHandle._tmp = new Vector3();
175
+ DistanceGrabHandle._tmpQuat = new Quaternion();
151
176
  DistanceGrabHandle._posHelper = new Vector3();
152
177
  DistanceGrabHandle._quatHelper = new Quaternion();
178
+ DistanceGrabHandle._offsetPosHelper = new Vector3();
179
+ DistanceGrabHandle._offsetQuatHelper = new Quaternion();
153
180
 
154
181
  export { DistanceGrabHandle, Handle, MovementMode };
155
182
  //# sourceMappingURL=handles.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"handles.js","sources":["../../src/grab/handles.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handles.js","sources":["../../src/grab/handles.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;AAAA;;;;;AAKG;AAMI,MAAM,MAAM,GAAG,eAAe,CACnC,QAAQ,EACR;IACE,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;CACrD,EACD,kEAAkE;AAGpE;AACO,MAAM,YAAY,GAAG;;AAE1B,IAAA,cAAc,EAAE,gBAAgB;;AAEhC,IAAA,iBAAiB,EAAE,mBAAmB;;AAEtC,IAAA,YAAY,EAAE,cAAc;;AAE5B,IAAA,cAAc,EAAE,gBAAgB;;AAG5B,MAAO,kBAAsB,SAAQ,WAAc,CAAA;AAYvD,IAAA,WAAA,CACW,OAAiD,EACjD,UAAoB,EACb,UAAA,GAAqC,OAAO,EAAE,CAAC,EAC/C,YAAoB,EACpB,cAAuB,EACvB,eAAA,GAA0B,GAAG,EAC7B,eAAA,GAA2B,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC/C,mBAA+B,IAAI,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACzD,YAAqB,EAAA;AAErC,QAAA,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC;QAVjB,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,UAAU,GAAV,UAAU;QACH,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,eAAe,GAAf,eAAe;QACf,IAAA,CAAA,eAAe,GAAf,eAAe;QACf,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAChB,IAAA,CAAA,YAAY,GAAZ,YAAY;QAnBtB,IAAA,CAAA,SAAS,GAAY,KAAK;AAuBhC,QAAA,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE;AAEhC,QAAA,OAAoB,CAAC,gBAAgB,CAAC,WAAW,EAAE,MAAK;AACvD,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK;AACxB,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,MAAM,CAAC,IAAY,EAAA;;AACjB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE;QAE/B,IACE,MAAM,IAAI,IAAI;AACd,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC;AAC1B,aAAC,IAAI,CAAC,eAAe,IAAI,IAAI;AAC3B,gBAAA,CAAC,CAAA,EAAA,GAAA,IAAI,CAAC,UAAU,EAAE,CAAC,YAAY,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,KAAK,MAAM,KAAK,CAAC,EACtD;AACA,YAAA,IAAI,IAAI,CAAC,qBAAqB,IAAI,SAAS,EAAE;AAC3C,gBAAA,IAAI,CAAC,qBAAqB,GAAG,SAAS;YACxC;YACA;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE;AACzD,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;QAChC;AAEA,QAAA,IACE,IAAI,CAAC,YAAY,KAAK,YAAY,CAAC,cAAc;AACjD,YAAA,IAAI,CAAC,YAAY,KAAK,YAAY,CAAC,cAAc,EACjD;AACA,YAAA,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;YAClB;QACF;AAEA,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI;AAC1C,QAAA,MAAM,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,UAAU,CAAC;AACtD,QAAA,MAAM,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,WAAW,CAAC;AACzD,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ;AAChC,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU;AACpC,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ;AAChC,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK;AAE1B,QAAA,QAAQ,IAAI,CAAC,YAAY;AACvB,YAAA,KAAK,YAAY,CAAC,YAAY,EAAE;gBAC9B,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;AACrC,gBAAA,MAAM,OAAO,GAAG,EAAE,CAAC,kBAAkB;AACrC,gBAAA,IAAI,IAAI,CAAC,qBAAqB,IAAI,SAAS,EAAE;AAC3C,oBAAA,MAAM,KAAK,GAAG,kBAAkB,CAAC;yBAC9B,IAAI,CAAC,OAAO;AACZ,yBAAA,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC;AAClC,oBAAA,kBAAkB,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;gBAC1C;qBAAO;oBACL,IAAI,CAAC,qBAAqB,GAAG,IAAI,OAAO,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;gBAC1D;;AAEA,gBAAA,IAAI,CAAC,qBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC;gBACzC;YACF;AACA,YAAA,KAAK,YAAY,CAAC,iBAAiB,EAAE;gBACnC,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;AACrC,gBAAA,MAAM,aAAa,GAAG,EAAE,CAAC,kBAAkB;AAC3C,gBAAA,MAAM,iBAAiB,GAAG,EAAE,CAAC,sBAAsB;;AAGnD,gBAAA,MAAM,cAAc,GAAG,kBAAkB,CAAC;AACvC,qBAAA,IAAI,CAAC,IAAI,CAAC,eAAe;qBACzB,eAAe,CAAC,iBAAiB;qBACjC,GAAG,CAAC,aAAa,CAAC;;AAGrB,gBAAA,MAAM,gBAAgB,GAAG,kBAAkB,CAAC;qBACzC,IAAI,CAAC,iBAAiB;AACtB,qBAAA,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC;gBAElC,MAAM,QAAQ,GAAG,cAAc,CAAC,UAAU,CACxC,kBAAkB,CAAC,UAAU,CAC9B;gBAED,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,QAAQ,GAAG,kBAAkB,CAAC,cAAc,EAAE;AACnE,oBAAA,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAChC,cAAc,EACd,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,kBAAkB,CAAC,gBAAgB,CAClE;AACD,oBAAA,kBAAkB,CAAC,WAAW,CAAC,KAAK,CAClC,gBAAgB,EAChB,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,kBAAkB,CAAC,gBAAgB,CAClE;gBACH;qBAAO;AACL,oBAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnB,wBAAA,IAAI,CAAC,SAAS,GAAG,IAAI;oBACvB;AACA,oBAAA,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC;AAClD,oBAAA,kBAAkB,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC;gBACvD;gBAEA;YACF;;;AAIF,QAAA,IAAI,MAAM,CAAC,MAAM,EAAE;;AAEjB,YAAA,MAAM,wBAAwB,GAAG,MAAM,CAAC,MAAM,CAAC;AAC5C,iBAAA,KAAK;AACL,iBAAA,MAAM,EAAE;;YAGX;AACG,iBAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU;iBAClC,YAAY,CAAC,wBAAwB,CAAC;;AAGzC,YAAA,MAAM,4BAA4B,GAAG,MAAM,CAAC;AACzC,iBAAA,kBAAkB,CAAC,kBAAkB,CAAC,QAAQ;AAC9C,iBAAA,MAAM,EAAE;YACX;AACG,iBAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW;iBACnC,WAAW,CAAC,4BAA4B,CAAC;QAC9C;aAAO;;AAEL,YAAA,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC;AAC5C,YAAA,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC;QACjD;;;QAIA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE;YAC5C,aAAa;YACb,QAAQ;YACR,UAAU;YACV,QAAQ;YACR,KAAK;YACL,IAAI;AACL,SAAA,CAAC;QACF,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AAC1C,QAAA,IAAI,CAAC,eAAe,GAAG,SAAS;IAClC;AAEU,IAAA,KAAK,CAAC,MAAgB,EAAA;;;;AAG9B,QAAA,IAAI,IAAI,CAAC,cAAc,KAAI,CAAA,EAAA,GAAC,IAAY,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,IAAI,CAAA,EAAE;YAC1D,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC;;YAEhD,MAAM,CAAC,QAAQ,CAAC,KAAK,GAAI,IAAY,CAAC,qBAAqB,CAAC,KAAK;YACjE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC;YACpD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC;;AAE1C,YAAA,OAAO,SAAyB;QAClC;AACA,QAAA,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;IAC5B;;AA7Ke,kBAAA,CAAA,cAAc,GAAG,KAAH;AACd,kBAAA,CAAA,gBAAgB,GAAG,GAAH;AAChB,kBAAA,CAAA,IAAI,GAAG,IAAI,OAAO,EAAE;AACpB,kBAAA,CAAA,QAAQ,GAAG,IAAI,UAAU,EAAE;AAC3B,kBAAA,CAAA,UAAU,GAAG,IAAI,OAAO,EAAE;AAC1B,kBAAA,CAAA,WAAW,GAAG,IAAI,UAAU,EAAE;AAC9B,kBAAA,CAAA,gBAAgB,GAAG,IAAI,OAAO,EAAE;AAChC,kBAAA,CAAA,iBAAiB,GAAG,IAAI,UAAU,EAAE;;;;"}
@@ -4,7 +4,6 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  */
7
- export { Interactable, Hovered, Pressed } from '../input/index.js';
8
7
  export * from './grab-system.js';
9
8
  export * from './one-hand-grabbable.js';
10
9
  export * from './two-hands-grabbable.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/grab/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACnE,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/grab/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC"}
@@ -1,7 +1,5 @@
1
1
  import { RayIntersector, SphereIntersector } from '@pmndrs/pointer-events';
2
2
  import { patchedIntersectRayPointerCapture, patchedIntersectSpherePointerCapture, patchedExecuteIntersection } from './pointer-events-patch.js';
3
- import '../input/input-system.js';
4
- export { Hovered, Interactable, Pressed } from '../input/state-tags.js';
5
3
  export { GrabSystem } from './grab-system.js';
6
4
  export { OneHandGrabbable } from './one-hand-grabbable.js';
7
5
  export { TwoHandsGrabbable } from './two-hands-grabbable.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/grab/index.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;AAAA;;;;;AAKG;AAiBH;AACA,cAAc,CAAC,SAAS,CAAC,uBAAuB;AAC9C,IAAA,iCAAiC;AACnC,iBAAiB,CAAC,SAAS,CAAC,uBAAuB;AACjD,IAAA,oCAAoC;AACtC,iBAAiB,CAAC,SAAS,CAAC,mBAAmB,GAAG,0BAA0B"}
1
+ {"version":3,"file":"index.js","sources":["../../src/grab/index.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;AAAA;;;;;AAKG;AAeH;AACA,cAAc,CAAC,SAAS,CAAC,uBAAuB;AAC9C,IAAA,iCAAiC;AACnC,iBAAiB,CAAC,SAAS,CAAC,uBAAuB;AACjD,IAAA,oCAAoC;AACtC,iBAAiB,CAAC,SAAS,CAAC,mBAAmB,GAAG,0BAA0B"}
@@ -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":"one-hand-grabbable.js","sources":["../../src/grab/one-hand-grabbable.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAAA;;;;;AAKG;AAIH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCG;AAEI,MAAM,gBAAgB,GAAG,eAAe,CAC7C,kBAAkB,EAClB;;IAEE,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;;AAE9C,IAAA,SAAS,EAAE;QACT,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,QAAA,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;AACxC,KAAA;;AAED,IAAA,SAAS,EAAE;QACT,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC;AAC3C,KAAA;;IAED,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;;AAEjD,IAAA,YAAY,EAAE;QACZ,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,QAAA,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;AACxC,KAAA;;AAED,IAAA,YAAY,EAAE;QACZ,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC;AAC3C,KAAA;CACF,EACD,4DAA4D;;;;"}
1
+ {"version":3,"file":"one-hand-grabbable.js","sources":["../../src/grab/one-hand-grabbable.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAAA;;;;;AAKG;AAIH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCG;AAEI,MAAM,gBAAgB,GAAG,eAAe,CAC7C,kBAAkB,EAClB;;IAEE,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;;AAE9C,IAAA,SAAS,EAAE;QACT,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,QAAA,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;AACxC,KAAA;;AAED,IAAA,SAAS,EAAE;QACT,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC;AAC3C,KAAA;;IAED,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;;AAEjD,IAAA,YAAY,EAAE;QACZ,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,QAAA,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;AACxC,KAAA;;AAED,IAAA,YAAY,EAAE;QACZ,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC;AAC3C,KAAA;CACF,EACD,4DAA4D;;;;"}
@@ -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":"two-hands-grabbable.js","sources":["../../src/grab/two-hands-grabbable.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAAA;;;;;AAKG;AAIH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CG;AAEI,MAAM,iBAAiB,GAAG,eAAe,CAC9C,mBAAmB,EACnB;;IAEE,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;;AAE9C,IAAA,SAAS,EAAE;QACT,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,QAAA,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;AACxC,KAAA;;AAED,IAAA,SAAS,EAAE;QACT,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC;AAC3C,KAAA;;IAED,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;;AAEjD,IAAA,YAAY,EAAE;QACZ,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,QAAA,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;AACxC,KAAA;;AAED,IAAA,YAAY,EAAE;QACZ,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC;AAC3C,KAAA;;IAED,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;;AAE7C,IAAA,QAAQ,EAAE;QACR,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,QAAA,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;AACxC,KAAA;;AAED,IAAA,QAAQ,EAAE;QACR,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC;AAC3C,KAAA;CACF,EACD,2DAA2D;;;;"}
1
+ {"version":3,"file":"two-hands-grabbable.js","sources":["../../src/grab/two-hands-grabbable.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAAA;;;;;AAKG;AAIH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CG;AAEI,MAAM,iBAAiB,GAAG,eAAe,CAC9C,mBAAmB,EACnB;;IAEE,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;;AAE9C,IAAA,SAAS,EAAE;QACT,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,QAAA,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;AACxC,KAAA;;AAED,IAAA,SAAS,EAAE;QACT,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC;AAC3C,KAAA;;IAED,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;;AAEjD,IAAA,YAAY,EAAE;QACZ,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,QAAA,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;AACxC,KAAA;;AAED,IAAA,YAAY,EAAE;QACZ,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC;AAC3C,KAAA;;IAED,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;;AAE7C,IAAA,QAAQ,EAAE;QACR,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,QAAA,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;AACxC,KAAA;;AAED,IAAA,QAAQ,EAAE;QACR,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC;AAC3C,KAAA;CACF,EACD,2DAA2D;;;;"}
package/dist/index.d.ts CHANGED
@@ -18,9 +18,12 @@ export * from './input/index.js';
18
18
  export * from './environment/index.js';
19
19
  export * from './level/index.js';
20
20
  export * from './scene-understanding/index.js';
21
+ export * from './environment-raycast/index.js';
21
22
  export * from './audio/index.js';
22
23
  export * from './physics/index.js';
23
24
  export * from './camera/index.js';
25
+ export * from './depth/index.js';
26
+ export * from './mcp/index.js';
24
27
  export * from '@iwsdk/xr-input';
25
28
  export * from '@iwsdk/locomotor';
26
29
  export * as UIKit from '@pmndrs/uikit';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,OAAO,KAAK,KAAK,MAAM,eAAe,CAAC;AAEvC,OAAO,EAAE,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAG/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,OAAO,KAAK,KAAK,MAAM,eAAe,CAAC;AAEvC,OAAO,EAAE,OAAO,EAAE,CAAC"}
package/dist/index.js CHANGED
@@ -9,8 +9,10 @@ export { VisibilityState, World } from './ecs/world.js';
9
9
  export { NullEntity } from './ecs/entity.js';
10
10
  export { GLXFComponentRegistry } from './ecs/component-registry.js';
11
11
  export { Transform, TransformSystem } from './transform/transform.js';
12
+ export { setWorldPosition, setWorldQuaternion } from './transform/transform-utils.js';
12
13
  export { SyncedVector3 } from './transform/synced-vector3.js';
13
14
  export { SyncedQuaternion } from './transform/synced-quaternion.js';
15
+ export { SyncedEuler } from './transform/synced-euler.js';
14
16
  export { AssetManager, AssetType } from './asset/asset-manager.js';
15
17
  export { CacheManager } from './asset/cache-manager.js';
16
18
  export { SlideSystem } from './locomotion/slide.js';
@@ -26,7 +28,7 @@ export { ReferenceSpaceType, SessionMode, buildSessionInit, launchXR, normalizeR
26
28
  export { initializeWorld } from './init/world-initializer.js';
27
29
  import './grab/index.js';
28
30
  export { InputSystem } from './input/input-system.js';
29
- export { Hovered, Interactable, Pressed } from './input/state-tags.js';
31
+ export { Hovered, Interactable, PokeInteractable, Pressed, RayInteractable } from './input/state-tags.js';
30
32
  export { DomeTexture } from './environment/dome-texture.js';
31
33
  export { DomeGradient } from './environment/dome-gradient.js';
32
34
  export { IBLTexture } from './environment/ibl-texture.js';
@@ -41,6 +43,8 @@ export { SceneUnderstandingSystem } from './scene-understanding/scene-understand
41
43
  export { XRAnchor } from './scene-understanding/anchor.js';
42
44
  export { XRPlane } from './scene-understanding/plane.js';
43
45
  export { XRMesh } from './scene-understanding/mesh.js';
46
+ export { EnvironmentRaycastSystem } from './environment-raycast/environment-raycast.js';
47
+ export { EnvironmentRaycastTarget, RaycastSpace } from './environment-raycast/raycast-target.js';
44
48
  export { AudioSource, DistanceModel, InstanceStealPolicy, PlaybackMode } from './audio/audio.js';
45
49
  export { AudioSystem } from './audio/audio-system.js';
46
50
  export { AudioUtils } from './audio/audio-utils.js';
@@ -53,6 +57,10 @@ export { CameraFacing, CameraState } from './camera/types.js';
53
57
  export { CameraUtils } from './camera/camera-utils.js';
54
58
  export { CameraSource } from './camera/camera-source.js';
55
59
  export { CameraSystem } from './camera/camera-system.js';
60
+ export { DepthOccludable, OcclusionShadersMode } from './depth/depth-occludable.js';
61
+ export { DepthTextures } from './depth/depth-textures.js';
62
+ export { DepthSensingSystem } from './depth/depth-sensing-system.js';
63
+ export { MCPRuntime } from './mcp/mcp-runtime.js';
56
64
  export * from '@iwsdk/xr-input';
57
65
  export * from '@iwsdk/locomotor';
58
66
  import * as uikit from '@pmndrs/uikit';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":[null],"names":["EliCSVersion"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;AAKG;AA8BH,OAAO,CAAC,GAAG,CAAC,CAAA;;;;;;;;;qBASS,OAAO;YAChB,QAAQ;SACXA,SAAY,CAAA,CAAE,CAAC;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":[null],"names":["EliCSVersion"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;AAKG;AAiCH,OAAO,CAAC,GAAG,CAAC,CAAA;;;;;;;;;qBASS,OAAO;YAChB,QAAQ;SACXA,SAAY,CAAA,CAAE,CAAC;;;;"}
@@ -6,6 +6,7 @@
6
6
  */
7
7
  import { AssetManifest } from '../asset/index.js';
8
8
  import { World } from '../ecs/index.js';
9
+ import { TurningMethod } from '../locomotion/index.js';
9
10
  import { ColorScheme } from '../ui/index.js';
10
11
  import { XROptions } from './index.js';
11
12
  /** Options for {@link initializeWorld} / {@link World.create}.
@@ -35,21 +36,32 @@ export type WorldOptions = {
35
36
  far?: number;
36
37
  /** Generate a default gradient environment and background. @defaultValue true */
37
38
  defaultLighting?: boolean;
39
+ /** Enable stencil buffer. @defaultValue false */
40
+ stencil?: boolean;
38
41
  };
39
42
  /** Opt‑in feature systems. */
40
43
  features?: {
41
44
  /** Locomotion (teleport/slide/turn). Boolean or config. @defaultValue false */
42
45
  locomotion?: boolean | {
43
46
  useWorker?: boolean;
47
+ initialPlayerPosition?: [number, number, number];
48
+ comfortAssistLevel?: number;
49
+ turningMethod?: TurningMethod;
50
+ /** Whether jumping is enabled. @defaultValue true */
51
+ enableJumping?: boolean;
44
52
  };
45
53
  /** Grabbing (one/two‑hand, distance). @defaultValue false */
46
- grabbing?: boolean;
54
+ grabbing?: boolean | {
55
+ useHandPinchForGrab?: boolean;
56
+ };
47
57
  /** Physics simulation (Havok). @defaultValue false */
48
58
  physics?: boolean;
49
59
  /** Scene Understanding (planes/meshes/anchors). Boolean or config. @defaultValue false */
50
60
  sceneUnderstanding?: boolean | {
51
61
  showWireFrame?: boolean;
52
62
  };
63
+ /** Environment Raycast (hit-test against real-world surfaces). @defaultValue false */
64
+ environmentRaycast?: boolean;
53
65
  /** Camera access for video streaming. @defaultValue false */
54
66
  camera?: boolean;
55
67
  /** Spatial UI systems (PanelUI/ScreenSpace/Follow). Boolean or config. @defaultValue true */
@@ -1 +1 @@
1
- {"version":3,"file":"world-initializer.d.ts","sourceRoot":"","sources":["../../src/init/world-initializer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAgB,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGhE,OAAO,EAAE,KAAK,EAAmB,MAAM,iBAAiB,CAAC;AAkCzD,OAAO,EAOL,WAAW,EACZ,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAGL,SAAS,EAIV,MAAM,YAAY,CAAC;AAEpB;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,wDAAwD;IACxD,MAAM,CAAC,EAAE,aAAa,CAAC;IAEvB,qGAAqG;IACrG,KAAK,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC;IAElC,6CAA6C;IAC7C,EAAE,CAAC,EAAE,SAAS,GAAG;QAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAA;KAAE,CAAC;IAExD,uCAAuC;IACvC,MAAM,CAAC,EAAE;QACP,wDAAwD;QACxD,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,6CAA6C;QAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,4CAA4C;QAC5C,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,iFAAiF;QACjF,eAAe,CAAC,EAAE,OAAO,CAAC;KAC3B,CAAC;IAEF,8BAA8B;IAC9B,QAAQ,CAAC,EAAE;QACT,+EAA+E;QAC/E,UAAU,CAAC,EAAE,OAAO,GAAG;YAAE,SAAS,CAAC,EAAE,OAAO,CAAA;SAAE,CAAC;QAC/C,6DAA6D;QAC7D,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,sDAAsD;QACtD,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,0FAA0F;QAC1F,kBAAkB,CAAC,EAAE,OAAO,GAAG;YAAE,aAAa,CAAC,EAAE,OAAO,CAAA;SAAE,CAAC;QAC3D,6DAA6D;QAC7D,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,6FAA6F;QAC7F,SAAS,CAAC,EACN,OAAO,GACP;YACE,iBAAiB,CAAC,EAAE,OAAO,CAAC;YAC5B,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAChE,oBAAoB,CAAC,EAAE,WAAW,CAAC;SACpC,CAAC;KACP,CAAC;CACH,CAAC;AAEF;;;;;;;GAOG;AACH;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,cAAc,EACzB,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,KAAK,CAAC,CAwDhB"}
1
+ {"version":3,"file":"world-initializer.d.ts","sourceRoot":"","sources":["../../src/init/world-initializer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EAAgB,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGhE,OAAO,EAAE,KAAK,EAAmB,MAAM,iBAAiB,CAAC;AAsBzD,OAAO,EAAoB,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAsBzE,OAAO,EAOL,WAAW,EACZ,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAGL,SAAS,EAIV,MAAM,YAAY,CAAC;AAEpB;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,wDAAwD;IACxD,MAAM,CAAC,EAAE,aAAa,CAAC;IAEvB,qGAAqG;IACrG,KAAK,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC;IAElC,6CAA6C;IAC7C,EAAE,CAAC,EAAE,SAAS,GAAG;QAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAA;KAAE,CAAC;IAExD,uCAAuC;IACvC,MAAM,CAAC,EAAE;QACP,wDAAwD;QACxD,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,6CAA6C;QAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,4CAA4C;QAC5C,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,iFAAiF;QACjF,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,iDAAiD;QACjD,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;IAEF,8BAA8B;IAC9B,QAAQ,CAAC,EAAE;QACT,+EAA+E;QAC/E,UAAU,CAAC,EACP,OAAO,GACP;YACE,SAAS,CAAC,EAAE,OAAO,CAAC;YACpB,qBAAqB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YACjD,kBAAkB,CAAC,EAAE,MAAM,CAAC;YAC5B,aAAa,CAAC,EAAE,aAAa,CAAC;YAC9B,qDAAqD;YACrD,aAAa,CAAC,EAAE,OAAO,CAAC;SACzB,CAAC;QACN,6DAA6D;QAC7D,QAAQ,CAAC,EAAE,OAAO,GAAG;YAAE,mBAAmB,CAAC,EAAE,OAAO,CAAA;SAAE,CAAC;QACvD,sDAAsD;QACtD,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,0FAA0F;QAC1F,kBAAkB,CAAC,EAAE,OAAO,GAAG;YAAE,aAAa,CAAC,EAAE,OAAO,CAAA;SAAE,CAAC;QAC3D,sFAAsF;QACtF,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,6DAA6D;QAC7D,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,6FAA6F;QAC7F,SAAS,CAAC,EACN,OAAO,GACP;YACE,iBAAiB,CAAC,EAAE,OAAO,CAAC;YAC5B,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAChE,oBAAoB,CAAC,EAAE,WAAW,CAAC;SACpC,CAAC;KACP,CAAC;CACH,CAAC;AAEF;;;;;;;GAOG;AACH;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,SAAS,EAAE,cAAc,EACzB,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,KAAK,CAAC,CAgEhB"}
@@ -10,15 +10,18 @@ import { CameraSource } from '../camera/camera-source.js';
10
10
  import { CameraSystem } from '../camera/camera-system.js';
11
11
  import { World, VisibilityState } from '../ecs/world.js';
12
12
  import 'elics';
13
+ import '../ecs/entity.js';
13
14
  import '../ecs/component-registry.js';
14
15
  import { DomeTexture } from '../environment/dome-texture.js';
15
16
  import { DomeGradient } from '../environment/dome-gradient.js';
16
17
  import { IBLTexture } from '../environment/ibl-texture.js';
17
18
  import { IBLGradient } from '../environment/ibl-gradient.js';
18
19
  import { EnvironmentSystem } from '../environment/environment-system.js';
20
+ import { EnvironmentRaycastSystem } from '../environment-raycast/environment-raycast.js';
21
+ import { EnvironmentRaycastTarget } from '../environment-raycast/raycast-target.js';
19
22
  import '../grab/index.js';
20
23
  import { InputSystem } from '../input/input-system.js';
21
- import { Interactable, Hovered, Pressed } from '../input/state-tags.js';
24
+ import { RayInteractable, PokeInteractable, Hovered, Pressed } from '../input/state-tags.js';
22
25
  import { LevelSystem } from '../level/level-system.js';
23
26
  import { LevelTag } from '../level/level-tag.js';
24
27
  import '@iwsdk/glxf';
@@ -32,6 +35,7 @@ import '../locomotion/slide.js';
32
35
  import '../locomotion/teleport.js';
33
36
  import '../locomotion/turn.js';
34
37
  import { LocomotionSystem } from '../locomotion/locomotion.js';
38
+ import { MCPRuntime } from '../mcp/mcp-runtime.js';
35
39
  import { PhysicsSystem } from '../physics/physics-system.js';
36
40
  import { PhysicsBody } from '../physics/physicsBody.js';
37
41
  import { PhysicsManipulation } from '../physics/physicsManipulation.js';
@@ -41,6 +45,7 @@ import { XRAnchor } from '../scene-understanding/anchor.js';
41
45
  import { XRPlane } from '../scene-understanding/plane.js';
42
46
  import { XRMesh } from '../scene-understanding/mesh.js';
43
47
  import { Transform, TransformSystem } from '../transform/transform.js';
48
+ import '../transform/transform-utils.js';
44
49
  import { Visibility, VisibilitySystem } from '../visibility/visibility.js';
45
50
  import { ReferenceSpaceType, SessionMode, buildSessionInit, normalizeReferenceSpec, resolveReferenceSpaceType } from './xr.js';
46
51
  import { GrabSystem } from '../grab/grab-system.js';
@@ -70,6 +75,7 @@ import { GrabSystem } from '../grab/grab-system.js';
70
75
  * This function powers {@link World.create}. Prefer using that static helper.
71
76
  */
72
77
  function initializeWorld(container, options = {}) {
78
+ var _a;
73
79
  // Create and configure world instance
74
80
  const world = createWorldInstance();
75
81
  // Extract configuration options
@@ -101,6 +107,13 @@ function initializeWorld(container, options = {}) {
101
107
  if (config.xr.offer && config.xr.offer !== 'none') {
102
108
  manageOfferFlow(world, config.xr.offer);
103
109
  }
110
+ // Setup MCP runtime for framework-specific tools (dev only).
111
+ // In production Vite builds, import.meta.env.DEV is false and this entire
112
+ // code path is tree-shaken. In Node.js/tests, import.meta.env is undefined
113
+ // so the check defaults to enabled.
114
+ if (((_a = import.meta.env) === null || _a === void 0 ? void 0 : _a.DEV) !== false) {
115
+ setupMCPRuntime(world);
116
+ }
104
117
  // Return promise that resolves after asset preloading
105
118
  return finalizeInitialization(world, options.assets).then(async (w) => {
106
119
  var _a;
@@ -132,25 +145,27 @@ function createWorldInstance() {
132
145
  * Extract and normalize configuration options
133
146
  */
134
147
  function extractConfiguration(options) {
135
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2;
148
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6;
136
149
  return {
137
150
  cameraFov: (_b = (_a = options.render) === null || _a === void 0 ? void 0 : _a.fov) !== null && _b !== void 0 ? _b : 50,
138
151
  cameraNear: (_d = (_c = options.render) === null || _c === void 0 ? void 0 : _c.near) !== null && _d !== void 0 ? _d : 0.1,
139
152
  cameraFar: (_f = (_e = options.render) === null || _e === void 0 ? void 0 : _e.far) !== null && _f !== void 0 ? _f : 200,
140
153
  defaultLighting: (_h = (_g = options.render) === null || _g === void 0 ? void 0 : _g.defaultLighting) !== null && _h !== void 0 ? _h : true,
154
+ stencil: (_k = (_j = options.render) === null || _j === void 0 ? void 0 : _j.stencil) !== null && _k !== void 0 ? _k : false,
141
155
  xr: {
142
- sessionMode: (_k = (_j = options.xr) === null || _j === void 0 ? void 0 : _j.sessionMode) !== null && _k !== void 0 ? _k : SessionMode.ImmersiveVR,
143
- referenceSpace: (_m = (_l = options.xr) === null || _l === void 0 ? void 0 : _l.referenceSpace) !== null && _m !== void 0 ? _m : ReferenceSpaceType.LocalFloor,
144
- features: (_o = options.xr) === null || _o === void 0 ? void 0 : _o.features,
145
- offer: (_q = (_p = options.xr) === null || _p === void 0 ? void 0 : _p.offer) !== null && _q !== void 0 ? _q : 'always',
156
+ sessionMode: (_m = (_l = options.xr) === null || _l === void 0 ? void 0 : _l.sessionMode) !== null && _m !== void 0 ? _m : SessionMode.ImmersiveVR,
157
+ referenceSpace: (_p = (_o = options.xr) === null || _o === void 0 ? void 0 : _o.referenceSpace) !== null && _p !== void 0 ? _p : ReferenceSpaceType.LocalFloor,
158
+ features: (_q = options.xr) === null || _q === void 0 ? void 0 : _q.features,
159
+ offer: (_s = (_r = options.xr) === null || _r === void 0 ? void 0 : _r.offer) !== null && _s !== void 0 ? _s : 'always',
146
160
  },
147
161
  features: {
148
- locomotion: (_s = (_r = options.features) === null || _r === void 0 ? void 0 : _r.locomotion) !== null && _s !== void 0 ? _s : false,
149
- grabbing: (_u = (_t = options.features) === null || _t === void 0 ? void 0 : _t.grabbing) !== null && _u !== void 0 ? _u : false,
150
- physics: (_w = (_v = options.features) === null || _v === void 0 ? void 0 : _v.physics) !== null && _w !== void 0 ? _w : false,
151
- sceneUnderstanding: (_y = (_x = options.features) === null || _x === void 0 ? void 0 : _x.sceneUnderstanding) !== null && _y !== void 0 ? _y : false,
152
- camera: (_0 = (_z = options.features) === null || _z === void 0 ? void 0 : _z.camera) !== null && _0 !== void 0 ? _0 : false,
153
- spatialUI: (_2 = (_1 = options.features) === null || _1 === void 0 ? void 0 : _1.spatialUI) !== null && _2 !== void 0 ? _2 : true,
162
+ locomotion: (_u = (_t = options.features) === null || _t === void 0 ? void 0 : _t.locomotion) !== null && _u !== void 0 ? _u : false,
163
+ grabbing: (_w = (_v = options.features) === null || _v === void 0 ? void 0 : _v.grabbing) !== null && _w !== void 0 ? _w : false,
164
+ physics: (_y = (_x = options.features) === null || _x === void 0 ? void 0 : _x.physics) !== null && _y !== void 0 ? _y : false,
165
+ sceneUnderstanding: (_0 = (_z = options.features) === null || _z === void 0 ? void 0 : _z.sceneUnderstanding) !== null && _0 !== void 0 ? _0 : false,
166
+ environmentRaycast: (_2 = (_1 = options.features) === null || _1 === void 0 ? void 0 : _1.environmentRaycast) !== null && _2 !== void 0 ? _2 : false,
167
+ camera: (_4 = (_3 = options.features) === null || _3 === void 0 ? void 0 : _3.camera) !== null && _4 !== void 0 ? _4 : false,
168
+ spatialUI: (_6 = (_5 = options.features) === null || _5 === void 0 ? void 0 : _5.spatialUI) !== null && _6 !== void 0 ? _6 : true,
154
169
  },
155
170
  };
156
171
  }
@@ -167,6 +182,7 @@ function setupRendering(sceneContainer, config) {
167
182
  alpha: config.xr.sessionMode === SessionMode.ImmersiveAR,
168
183
  // @ts-ignore
169
184
  multiviewStereo: true,
185
+ stencil: config.stencil,
170
186
  });
171
187
  renderer.setPixelRatio(window.devicePixelRatio);
172
188
  renderer.setSize(window.innerWidth, window.innerHeight);
@@ -238,6 +254,10 @@ function manageOfferFlow(world, mode) {
238
254
  const refSpec = normalizeReferenceSpec(opts.referenceSpace);
239
255
  session.addEventListener('end', onEnd);
240
256
  try {
257
+ // disable built-in occlusion
258
+ world.renderer.xr.getDepthSensingMesh = function () {
259
+ return null;
260
+ };
241
261
  const resolvedType = await resolveReferenceSpaceType(session, refSpec.type, refSpec.required ? [] : refSpec.fallbackOrder);
242
262
  world.renderer.xr.setReferenceSpaceType(resolvedType);
243
263
  await world.renderer.xr.setSession(session);
@@ -272,7 +292,8 @@ function manageOfferFlow(world, mode) {
272
292
  */
273
293
  function registerCoreSystems(world, config) {
274
294
  world
275
- .registerComponent(Interactable)
295
+ .registerComponent(RayInteractable)
296
+ .registerComponent(PokeInteractable)
276
297
  .registerComponent(Hovered)
277
298
  .registerComponent(Pressed)
278
299
  .registerComponent(LevelRoot)
@@ -303,16 +324,24 @@ function registerAdditionalSystems(world) {
303
324
  function registerFeatureSystems(world, config) {
304
325
  const locomotion = config.features.locomotion;
305
326
  const locomotionEnabled = !!locomotion;
306
- const grabbingEnabled = !!config.features.grabbing;
327
+ const grabbing = config.features.grabbing;
328
+ const grabbingEnabled = !!grabbing;
307
329
  const physicsEnabled = !!config.features.physics;
308
330
  const sceneUnderstanding = config.features.sceneUnderstanding;
309
331
  const sceneUnderstandingEnabled = !!sceneUnderstanding;
332
+ const environmentRaycastEnabled = !!config.features.environmentRaycast;
310
333
  const cameraEnabled = !!config.features.camera;
311
334
  const spatialUI = config.features.spatialUI;
312
335
  const spatialUIEnabled = !!spatialUI;
313
336
  if (locomotionEnabled) {
314
337
  const locOpts = typeof locomotion === 'object' && locomotion
315
- ? { useWorker: locomotion.useWorker }
338
+ ? Object.fromEntries(Object.entries({
339
+ useWorker: locomotion.useWorker,
340
+ initialPlayerPosition: locomotion.initialPlayerPosition,
341
+ comfortAssist: locomotion.comfortAssistLevel,
342
+ turningMethod: locomotion.turningMethod,
343
+ enableJumping: locomotion.enableJumping,
344
+ }).filter(([, v]) => v !== undefined))
316
345
  : undefined;
317
346
  world.registerSystem(LocomotionSystem, {
318
347
  priority: -5,
@@ -321,7 +350,12 @@ function registerFeatureSystems(world, config) {
321
350
  }
322
351
  world.registerSystem(InputSystem, { priority: -4 });
323
352
  if (grabbingEnabled) {
324
- world.registerSystem(GrabSystem, { priority: -3 });
353
+ const grabOpts = typeof grabbing === 'object' && grabbing
354
+ ? Object.fromEntries(Object.entries({
355
+ useHandPinchForGrab: grabbing.useHandPinchForGrab,
356
+ }).filter(([, v]) => v !== undefined))
357
+ : undefined;
358
+ world.registerSystem(GrabSystem, { priority: -3, configData: grabOpts });
325
359
  }
326
360
  // Physics runs after Grab so it can respect Pressed overrides
327
361
  if (physicsEnabled) {
@@ -334,7 +368,9 @@ function registerFeatureSystems(world, config) {
334
368
  // Scene Understanding updates plane/mesh/anchor debug after input/physics
335
369
  if (sceneUnderstandingEnabled) {
336
370
  const sceneOpts = typeof sceneUnderstanding === 'object' && sceneUnderstanding
337
- ? { showWireFrame: sceneUnderstanding.showWireFrame }
371
+ ? Object.fromEntries(Object.entries({
372
+ showWireFrame: sceneUnderstanding.showWireFrame,
373
+ }).filter(([, v]) => v !== undefined))
338
374
  : undefined;
339
375
  world
340
376
  .registerComponent(XRPlane)
@@ -345,6 +381,14 @@ function registerFeatureSystems(world, config) {
345
381
  configData: sceneOpts,
346
382
  });
347
383
  }
384
+ // Environment Raycast system - requires hit-test feature
385
+ if (environmentRaycastEnabled) {
386
+ world
387
+ .registerComponent(EnvironmentRaycastTarget)
388
+ .registerSystem(EnvironmentRaycastSystem, {
389
+ priority: -1,
390
+ });
391
+ }
348
392
  // Camera system for video streaming
349
393
  if (cameraEnabled) {
350
394
  world.registerComponent(CameraSource).registerSystem(CameraSystem);
@@ -369,7 +413,9 @@ function registerFeatureSystems(world, config) {
369
413
  configData: {
370
414
  ...(forwardHtmlEvents !== undefined ? { forwardHtmlEvents } : {}),
371
415
  ...(kitsObj ? { kits: kitsObj } : {}),
372
- ...(preferredColorScheme !== undefined ? { preferredColorScheme } : {}),
416
+ ...(preferredColorScheme !== undefined
417
+ ? { preferredColorScheme }
418
+ : {}),
373
419
  },
374
420
  })
375
421
  .registerSystem(ScreenSpaceUISystem)
@@ -418,6 +464,20 @@ function finalizeInitialization(world, assets) {
418
464
  .catch(reject);
419
465
  });
420
466
  }
467
+ /**
468
+ * Setup MCP runtime for framework-specific tools.
469
+ * This creates the MCPRuntime and exposes it on window.FRAMEWORK_MCP_RUNTIME
470
+ * for vite-plugin-dev to route framework-specific tool calls.
471
+ */
472
+ function setupMCPRuntime(world) {
473
+ world.mcpRuntime = new MCPRuntime(world);
474
+ // Expose globally for vite-plugin discovery
475
+ // This allows the vite plugin to route framework-specific MCP tools
476
+ // without having a direct dependency on @iwsdk/core
477
+ if (typeof window !== 'undefined') {
478
+ window.FRAMEWORK_MCP_RUNTIME = world.mcpRuntime;
479
+ }
480
+ }
421
481
 
422
482
  export { initializeWorld };
423
483
  //# sourceMappingURL=world-initializer.js.map