@iwsdk/core 0.5.3 → 1.0.0-rc.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 (233) hide show
  1. package/README.md +22 -1
  2. package/dist/asset/asset-manager.d.ts.map +1 -1
  3. package/dist/asset/asset-manager.js +3 -2
  4. package/dist/asset/asset-manager.js.map +1 -1
  5. package/dist/asset/cache-manager.js.map +1 -1
  6. package/dist/asset/loaders/audio-loader.js.map +1 -1
  7. package/dist/asset/loaders/cached-asset-load.js.map +1 -1
  8. package/dist/asset/loaders/gltf-loader.js.map +1 -1
  9. package/dist/asset/loaders/hdr-texture-loader.js.map +1 -1
  10. package/dist/asset/loaders/texture-loader.js.map +1 -1
  11. package/dist/asset/loaders/uikitml-loader.js.map +1 -1
  12. package/dist/audio/audio-pool.js.map +1 -1
  13. package/dist/audio/audio-system.js.map +1 -1
  14. package/dist/audio/audio-utils.js.map +1 -1
  15. package/dist/audio/audio.js.map +1 -1
  16. package/dist/camera/camera-source.js.map +1 -1
  17. package/dist/camera/camera-system.d.ts +7 -3
  18. package/dist/camera/camera-system.d.ts.map +1 -1
  19. package/dist/camera/camera-system.js +81 -50
  20. package/dist/camera/camera-system.js.map +1 -1
  21. package/dist/camera/camera-utils.d.ts +5 -0
  22. package/dist/camera/camera-utils.d.ts.map +1 -1
  23. package/dist/camera/camera-utils.js +8 -1
  24. package/dist/camera/camera-utils.js.map +1 -1
  25. package/dist/camera/types.js.map +1 -1
  26. package/dist/depth/depth-occludable.js.map +1 -1
  27. package/dist/depth/depth-sensing-system.d.ts +3 -0
  28. package/dist/depth/depth-sensing-system.d.ts.map +1 -1
  29. package/dist/depth/depth-sensing-system.js +55 -1
  30. package/dist/depth/depth-sensing-system.js.map +1 -1
  31. package/dist/depth/depth-textures.js.map +1 -1
  32. package/dist/depth/occlusion/preprocessing-pass.js.map +1 -1
  33. package/dist/depth/occlusion/preprocessing-shader.glsl.js.map +1 -1
  34. package/dist/ecs/builtin-components.js.map +1 -1
  35. package/dist/ecs/component-editor-metadata.js.map +1 -1
  36. package/dist/ecs/component-manifest.js.map +1 -1
  37. package/dist/ecs/entity.js.map +1 -1
  38. package/dist/ecs/system.js.map +1 -1
  39. package/dist/ecs/world.d.ts +2 -0
  40. package/dist/ecs/world.d.ts.map +1 -1
  41. package/dist/ecs/world.js +4 -0
  42. package/dist/ecs/world.js.map +1 -1
  43. package/dist/environment/dome-gradient.js.map +1 -1
  44. package/dist/environment/dome-texture.js.map +1 -1
  45. package/dist/environment/environment-system.js.map +1 -1
  46. package/dist/environment/gradient-environment.js.map +1 -1
  47. package/dist/environment/ibl-gradient.js.map +1 -1
  48. package/dist/environment/ibl-texture.js.map +1 -1
  49. package/dist/environment/scene-ar-environment.js.map +1 -1
  50. package/dist/environment-raycast/environment-raycast.js.map +1 -1
  51. package/dist/environment-raycast/raycast-target.js.map +1 -1
  52. package/dist/grab/distance-grabbable.d.ts +5 -0
  53. package/dist/grab/distance-grabbable.d.ts.map +1 -1
  54. package/dist/grab/distance-grabbable.js +5 -0
  55. package/dist/grab/distance-grabbable.js.map +1 -1
  56. package/dist/grab/grab-helpers.js.map +1 -1
  57. package/dist/grab/grab-system.js.map +1 -1
  58. package/dist/grab/grab-warnings.js.map +1 -1
  59. package/dist/grab/grabbed.js.map +1 -1
  60. package/dist/grab/handles.d.ts +6 -0
  61. package/dist/grab/handles.d.ts.map +1 -1
  62. package/dist/grab/handles.js +46 -12
  63. package/dist/grab/handles.js.map +1 -1
  64. package/dist/grab/index.js.map +1 -1
  65. package/dist/grab/one-hand-grabbable.d.ts +5 -0
  66. package/dist/grab/one-hand-grabbable.d.ts.map +1 -1
  67. package/dist/grab/one-hand-grabbable.js +5 -0
  68. package/dist/grab/one-hand-grabbable.js.map +1 -1
  69. package/dist/grab/pointer-events-patch.js.map +1 -1
  70. package/dist/grab/two-hands-grabbable.d.ts +5 -0
  71. package/dist/grab/two-hands-grabbable.d.ts.map +1 -1
  72. package/dist/grab/two-hands-grabbable.js +5 -0
  73. package/dist/grab/two-hands-grabbable.js.map +1 -1
  74. package/dist/index.js +4 -3
  75. package/dist/index.js.map +1 -1
  76. package/dist/init/browser-camera.js.map +1 -1
  77. package/dist/init/index.d.ts +2 -2
  78. package/dist/init/index.d.ts.map +1 -1
  79. package/dist/init/player-camera.js.map +1 -1
  80. package/dist/init/session-grant.d.ts +34 -0
  81. package/dist/init/session-grant.d.ts.map +1 -0
  82. package/dist/init/session-grant.js +89 -0
  83. package/dist/init/session-grant.js.map +1 -0
  84. package/dist/init/world-initializer.d.ts +87 -4
  85. package/dist/init/world-initializer.d.ts.map +1 -1
  86. package/dist/init/world-initializer.js +45 -41
  87. package/dist/init/world-initializer.js.map +1 -1
  88. package/dist/init/xr.d.ts +19 -0
  89. package/dist/init/xr.d.ts.map +1 -1
  90. package/dist/init/xr.js +136 -41
  91. package/dist/init/xr.js.map +1 -1
  92. package/dist/input/canvas-pointer-system.d.ts +2 -0
  93. package/dist/input/canvas-pointer-system.d.ts.map +1 -1
  94. package/dist/input/canvas-pointer-system.js +33 -13
  95. package/dist/input/canvas-pointer-system.js.map +1 -1
  96. package/dist/input/input-actions.js.map +1 -1
  97. package/dist/input/input-manager.js.map +1 -1
  98. package/dist/input/input-system.d.ts.map +1 -1
  99. package/dist/input/input-system.js +5 -2
  100. package/dist/input/input-system.js.map +1 -1
  101. package/dist/input/state-tags.js.map +1 -1
  102. package/dist/input/stateful-browser-gamepad.js.map +1 -1
  103. package/dist/input/stateful-keyboard.js.map +1 -1
  104. package/dist/layers/xr-cylinder-layer.d.ts +2 -1
  105. package/dist/layers/xr-cylinder-layer.d.ts.map +1 -1
  106. package/dist/layers/xr-cylinder-layer.js +2 -1
  107. package/dist/layers/xr-cylinder-layer.js.map +1 -1
  108. package/dist/layers/xr-layer-init.d.ts +19 -0
  109. package/dist/layers/xr-layer-init.d.ts.map +1 -0
  110. package/dist/layers/xr-layer-init.js +20 -0
  111. package/dist/layers/xr-layer-init.js.map +1 -0
  112. package/dist/layers/xr-layer-state.js.map +1 -1
  113. package/dist/layers/xr-layer-system.d.ts +41 -1
  114. package/dist/layers/xr-layer-system.d.ts.map +1 -1
  115. package/dist/layers/xr-layer-system.js +506 -132
  116. package/dist/layers/xr-layer-system.js.map +1 -1
  117. package/dist/layers/xr-layer-transform.d.ts +18 -0
  118. package/dist/layers/xr-layer-transform.d.ts.map +1 -0
  119. package/dist/layers/xr-layer-transform.js +115 -0
  120. package/dist/layers/xr-layer-transform.js.map +1 -0
  121. package/dist/layers/xr-quad-layer.d.ts +2 -1
  122. package/dist/layers/xr-quad-layer.d.ts.map +1 -1
  123. package/dist/layers/xr-quad-layer.js +2 -1
  124. package/dist/layers/xr-quad-layer.js.map +1 -1
  125. package/dist/level/level-component-applier.d.ts +2 -0
  126. package/dist/level/level-component-applier.d.ts.map +1 -1
  127. package/dist/level/level-component-applier.js +24 -5
  128. package/dist/level/level-component-applier.js.map +1 -1
  129. package/dist/level/level-player-rig.js.map +1 -1
  130. package/dist/level/level-root.js.map +1 -1
  131. package/dist/level/level-scene-environment.js.map +1 -1
  132. package/dist/level/level-scene-json-importer.js.map +1 -1
  133. package/dist/level/level-scene-material.js.map +1 -1
  134. package/dist/level/level-scene-object.js.map +1 -1
  135. package/dist/level/level-scene-primitive.js.map +1 -1
  136. package/dist/level/level-system.js.map +1 -1
  137. package/dist/level/level-tag.js.map +1 -1
  138. package/dist/lighting/light-binding.js.map +1 -1
  139. package/dist/lighting/light-components.js.map +1 -1
  140. package/dist/lighting/light-system.js.map +1 -1
  141. package/dist/locomotion/geometries/beveled-cylinder.js.map +1 -1
  142. package/dist/locomotion/locomotion-environment.js.map +1 -1
  143. package/dist/locomotion/locomotion-input-provider.js.map +1 -1
  144. package/dist/locomotion/locomotion.js.map +1 -1
  145. package/dist/locomotion/materials/line.js.map +1 -1
  146. package/dist/locomotion/slide.js.map +1 -1
  147. package/dist/locomotion/teleport.js.map +1 -1
  148. package/dist/locomotion/turn.js.map +1 -1
  149. package/dist/mcp/ecs-debug-tools.d.ts +4 -1
  150. package/dist/mcp/ecs-debug-tools.d.ts.map +1 -1
  151. package/dist/mcp/ecs-debug-tools.js +113 -10
  152. package/dist/mcp/ecs-debug-tools.js.map +1 -1
  153. package/dist/mcp/index.d.ts +1 -0
  154. package/dist/mcp/index.d.ts.map +1 -1
  155. package/dist/mcp/mcp-runtime.d.ts +2 -0
  156. package/dist/mcp/mcp-runtime.d.ts.map +1 -1
  157. package/dist/mcp/mcp-runtime.js +41 -0
  158. package/dist/mcp/mcp-runtime.js.map +1 -1
  159. package/dist/mcp/scene-tools.js.map +1 -1
  160. package/dist/mcp/ui-debug-tools.d.ts +56 -0
  161. package/dist/mcp/ui-debug-tools.d.ts.map +1 -0
  162. package/dist/mcp/ui-debug-tools.js +412 -0
  163. package/dist/mcp/ui-debug-tools.js.map +1 -0
  164. package/dist/physics/index.js +1 -1
  165. package/dist/physics/physics-runtime.d.ts +22 -0
  166. package/dist/physics/physics-runtime.d.ts.map +1 -0
  167. package/dist/physics/physics-runtime.js +423 -0
  168. package/dist/physics/physics-runtime.js.map +1 -0
  169. package/dist/physics/physics-system.d.ts +84 -108
  170. package/dist/physics/physics-system.d.ts.map +1 -1
  171. package/dist/physics/physics-system.js +686 -555
  172. package/dist/physics/physics-system.js.map +1 -1
  173. package/dist/physics/physics-transport.d.ts +20 -0
  174. package/dist/physics/physics-transport.d.ts.map +1 -0
  175. package/dist/physics/physics-transport.js +111 -0
  176. package/dist/physics/physics-transport.js.map +1 -0
  177. package/dist/physics/physics-worker-protocol.d.ts +144 -0
  178. package/dist/physics/physics-worker-protocol.d.ts.map +1 -0
  179. package/dist/physics/physics-worker-protocol.js +41 -0
  180. package/dist/physics/physics-worker-protocol.js.map +1 -0
  181. package/dist/physics/physics-worker-utils.d.ts +8 -0
  182. package/dist/physics/physics-worker-utils.d.ts.map +1 -0
  183. package/dist/physics/physics-worker-utils.js +12 -0
  184. package/dist/physics/physics-worker-utils.js.map +1 -0
  185. package/dist/physics/physics-worker.d.ts +8 -0
  186. package/dist/physics/physics-worker.d.ts.map +1 -0
  187. package/dist/physics/physics-worker.js +66 -0
  188. package/dist/physics/physics-worker.js.map +1 -0
  189. package/dist/physics/physicsBody.js.map +1 -1
  190. package/dist/physics/physicsManipulation.js.map +1 -1
  191. package/dist/physics/physicsShape.js.map +1 -1
  192. package/dist/physics/utils.js.map +1 -1
  193. package/dist/project/normalize.js +7 -1
  194. package/dist/project/normalize.js.map +1 -1
  195. package/dist/project/paths.js.map +1 -1
  196. package/dist/project/types.d.ts +7 -1
  197. package/dist/project/types.d.ts.map +1 -1
  198. package/dist/project/types.js.map +1 -1
  199. package/dist/project/validation.js +36 -2
  200. package/dist/project/validation.js.map +1 -1
  201. package/dist/runtime/three.js.map +1 -1
  202. package/dist/scene-understanding/anchor.js.map +1 -1
  203. package/dist/scene-understanding/mesh.js.map +1 -1
  204. package/dist/scene-understanding/plane.js.map +1 -1
  205. package/dist/scene-understanding/scene-understanding-system.d.ts +42 -6
  206. package/dist/scene-understanding/scene-understanding-system.d.ts.map +1 -1
  207. package/dist/scene-understanding/scene-understanding-system.js +391 -106
  208. package/dist/scene-understanding/scene-understanding-system.js.map +1 -1
  209. package/dist/schemas/iwsdk-project.v1.schema.json +20 -1
  210. package/dist/transform/synced-euler.js.map +1 -1
  211. package/dist/transform/synced-quaternion.js.map +1 -1
  212. package/dist/transform/synced-vector3.js.map +1 -1
  213. package/dist/transform/transform-component.js.map +1 -1
  214. package/dist/transform/transform-utils.js.map +1 -1
  215. package/dist/transform/transform.js.map +1 -1
  216. package/dist/ui/document.js.map +1 -1
  217. package/dist/ui/follow-component.js.map +1 -1
  218. package/dist/ui/follow.d.ts.map +1 -1
  219. package/dist/ui/follow.js +0 -1
  220. package/dist/ui/follow.js.map +1 -1
  221. package/dist/ui/panel-components.js.map +1 -1
  222. package/dist/ui/screenspace-component.js.map +1 -1
  223. package/dist/ui/screenspace.js.map +1 -1
  224. package/dist/ui/ui.js.map +1 -1
  225. package/dist/ui/uikitml-asset.js.map +1 -1
  226. package/dist/ui/uikitml.js.map +1 -1
  227. package/dist/version.d.ts +1 -1
  228. package/dist/version.d.ts.map +1 -1
  229. package/dist/version.js +1 -1
  230. package/dist/version.js.map +1 -1
  231. package/dist/visibility/visibility-component.js.map +1 -1
  232. package/dist/visibility/visibility.js.map +1 -1
  233. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"locomotion-input-provider.js","sources":["../../src/locomotion/locomotion-input-provider.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"locomotion-input-provider.js","sources":["../../src/locomotion/locomotion-input-provider.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport type { World } from '../ecs/world.js';\nimport { InputActions } from '../input/input-actions.js';\nimport { Quaternion, Vector2, Vector3 } from '../runtime/index.js';\n\nconst TURN_THRESHOLD = 0.8;\n\nexport type BrowserLocomotionControls =\n | boolean\n | {\n keyboard?: boolean;\n gamepad?: boolean;\n /** Reserved for a future pointer-lock camera adapter. */\n pointerLock?: false;\n };\n\n/**\n * Converts low-level input actions into locomotion intent.\n *\n * Locomotion should not care whether input came from XR controllers, keyboard,\n * browser gamepads, or an app-authored adapter. This provider is the narrow\n * bridge between generic actions and the existing locomotor systems.\n */\nexport class ActionLocomotionInputProvider {\n constructor(private readonly world: World) {}\n\n enableBrowserControls(options: BrowserLocomotionControls): void {\n if (!options) {\n return;\n }\n\n const bindingOptions =\n typeof options === 'object'\n ? {\n keyboard: options.keyboard,\n gamepad: options.gamepad,\n }\n : undefined;\n\n this.world.input.actions.enableDefaultBindings(\n 'browser-first-person',\n bindingOptions,\n );\n }\n\n getMoveAxis(out: Vector2): Vector2 {\n const value = this.world.input.actions.getAxis2D(\n InputActions.LocomotionMove,\n );\n return out.set(value.x, value.y);\n }\n\n getMovementReferenceQuaternion(out: Quaternion): Quaternion {\n if (this.world.session) {\n this.world.player.head.getWorldQuaternion(out);\n } else {\n this.world.camera.getWorldQuaternion(out);\n }\n return out;\n }\n\n getJumpDown(): boolean {\n return this.world.input.actions.getButtonDown(InputActions.LocomotionJump);\n }\n\n getTurnAxis(): number {\n return this.world.input.actions.getAxis1D(InputActions.LocomotionTurn);\n }\n\n getTurnLeftDown(microGestureControlsEnabled: boolean): boolean {\n if (this.isHandMicroGestureMode(microGestureControlsEnabled)) {\n return this.world.input.xr.gamepads.right?.getButtonDownByIdx(5) ?? false;\n }\n\n return this.world.input.actions.getAxis1DEnteringNegative(\n InputActions.LocomotionTurn,\n TURN_THRESHOLD,\n );\n }\n\n getTurnRightDown(microGestureControlsEnabled: boolean): boolean {\n if (this.isHandMicroGestureMode(microGestureControlsEnabled)) {\n return this.world.input.xr.gamepads.right?.getButtonDownByIdx(6) ?? false;\n }\n\n return this.world.input.actions.getAxis1DEnteringPositive(\n InputActions.LocomotionTurn,\n TURN_THRESHOLD,\n );\n }\n\n shouldShowTurnSignals(microGestureControlsEnabled: boolean): boolean {\n return this.isHandMicroGestureMode(microGestureControlsEnabled);\n }\n\n getTeleportActive(\n pointerBusy: boolean,\n microGestureControlsEnabled: boolean,\n ): boolean {\n if (pointerBusy) {\n return false;\n }\n\n if (this.world.input.xr.isPrimary('hand', 'right')) {\n return (\n microGestureControlsEnabled &&\n !(this.world.input.xr.gamepads.right?.getButtonDownByIdx(9) ?? false)\n );\n }\n\n return this.world.input.actions.getButtonPressed(\n InputActions.LocomotionTeleportAim,\n );\n }\n\n getTeleportCommit(microGestureControlsEnabled: boolean): boolean {\n if (this.world.input.xr.isPrimary('hand', 'right')) {\n return (\n microGestureControlsEnabled &&\n (this.world.input.xr.gamepads.right?.getButtonDownByIdx(9) ?? false)\n );\n }\n\n return this.world.input.actions.getButtonUp(\n InputActions.LocomotionTeleportAim,\n );\n }\n\n getTeleportRay(origin: Vector3, direction: Vector3): boolean {\n if (!this.world.session) {\n return false;\n }\n\n this.world.player.raySpaces.right.getWorldPosition(origin);\n this.world.player.raySpaces.right.getWorldDirection(direction);\n return true;\n }\n\n private isHandMicroGestureMode(\n microGestureControlsEnabled: boolean,\n ): boolean {\n return (\n microGestureControlsEnabled &&\n this.world.input.xr.isPrimary('hand', 'right')\n );\n }\n}\n\nexport function getRequiredInputProvider(\n systemName: string,\n value: unknown,\n): ActionLocomotionInputProvider {\n if (value instanceof ActionLocomotionInputProvider) {\n return value;\n }\n\n throw new Error(\n `${systemName} must be registered through LocomotionSystem so locomotion subsystems share one input provider.`,\n );\n}\n"],"names":[],"mappings":";;AAAA;;;;;AAKG;AAMH,MAAM,cAAc,GAAG,GAAG;AAW1B;;;;;;AAMG;MACU,6BAA6B,CAAA;AACxC,IAAA,WAAA,CAA6B,KAAY,EAAA;QAAZ,IAAA,CAAA,KAAK,GAAL,KAAK;IAAU;AAE5C,IAAA,qBAAqB,CAAC,OAAkC,EAAA;QACtD,IAAI,CAAC,OAAO,EAAE;YACZ;QACF;AAEA,QAAA,MAAM,cAAc,GAClB,OAAO,OAAO,KAAK;AACjB,cAAE;gBACE,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;AACzB;cACD,SAAS;AAEf,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,qBAAqB,CAC5C,sBAAsB,EACtB,cAAc,CACf;IACH;AAEA,IAAA,WAAW,CAAC,GAAY,EAAA;AACtB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAC9C,YAAY,CAAC,cAAc,CAC5B;AACD,QAAA,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IAClC;AAEA,IAAA,8BAA8B,CAAC,GAAe,EAAA;AAC5C,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;YACtB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC;QAChD;aAAO;YACL,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,GAAG,CAAC;QAC3C;AACA,QAAA,OAAO,GAAG;IACZ;IAEA,WAAW,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC,cAAc,CAAC;IAC5E;IAEA,WAAW,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC,cAAc,CAAC;IACxE;AAEA,IAAA,eAAe,CAAC,2BAAoC,EAAA;;AAClD,QAAA,IAAI,IAAI,CAAC,sBAAsB,CAAC,2BAA2B,CAAC,EAAE;YAC5D,OAAO,CAAA,EAAA,GAAA,MAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,0CAAE,kBAAkB,CAAC,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,KAAK;QAC3E;AAEA,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,yBAAyB,CACvD,YAAY,CAAC,cAAc,EAC3B,cAAc,CACf;IACH;AAEA,IAAA,gBAAgB,CAAC,2BAAoC,EAAA;;AACnD,QAAA,IAAI,IAAI,CAAC,sBAAsB,CAAC,2BAA2B,CAAC,EAAE;YAC5D,OAAO,CAAA,EAAA,GAAA,MAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,0CAAE,kBAAkB,CAAC,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,KAAK;QAC3E;AAEA,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,yBAAyB,CACvD,YAAY,CAAC,cAAc,EAC3B,cAAc,CACf;IACH;AAEA,IAAA,qBAAqB,CAAC,2BAAoC,EAAA;AACxD,QAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,2BAA2B,CAAC;IACjE;IAEA,iBAAiB,CACf,WAAoB,EACpB,2BAAoC,EAAA;;QAEpC,IAAI,WAAW,EAAE;AACf,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;AAClD,YAAA,QACE,2BAA2B;gBAC3B,EAAE,MAAA,CAAA,EAAA,GAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,kBAAkB,CAAC,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,KAAK,CAAC;QAEzE;AAEA,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAC9C,YAAY,CAAC,qBAAqB,CACnC;IACH;AAEA,IAAA,iBAAiB,CAAC,2BAAoC,EAAA;;AACpD,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;AAClD,YAAA,QACE,2BAA2B;iBAC1B,CAAA,EAAA,GAAA,MAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,kBAAkB,CAAC,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,KAAK,CAAC;QAExE;AAEA,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CACzC,YAAY,CAAC,qBAAqB,CACnC;IACH;IAEA,cAAc,CAAC,MAAe,EAAE,SAAkB,EAAA;AAChD,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;AACvB,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC;AAC1D,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,iBAAiB,CAAC,SAAS,CAAC;AAC9D,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,sBAAsB,CAC5B,2BAAoC,EAAA;AAEpC,QAAA,QACE,2BAA2B;AAC3B,YAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC;IAElD;AACD;AAEK,SAAU,wBAAwB,CACtC,UAAkB,EAClB,KAAc,EAAA;AAEd,IAAA,IAAI,KAAK,YAAY,6BAA6B,EAAE;AAClD,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,MAAM,IAAI,KAAK,CACb,GAAG,UAAU,CAAA,+FAAA,CAAiG,CAC/G;AACH;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"locomotion.js","sources":["../../src/locomotion/locomotion.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"locomotion.js","sources":["../../src/locomotion/locomotion.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { Locomotor, LocomotorConfig } from '@iwsdk/locomotor';\nimport { Types } from '../ecs/component.js';\nimport { Entity } from '../ecs/entity.js';\nimport { createSystem } from '../ecs/system.js';\nimport { Vector3 } from '../runtime/index.js';\nimport { LocomotionEnvironment } from './locomotion-environment.js';\nimport {\n ActionLocomotionInputProvider,\n type BrowserLocomotionControls,\n} from './locomotion-input-provider.js';\nimport { SlideSystem } from './slide.js';\nimport { TeleportSystem } from './teleport.js';\nimport { TurnSystem, TurningMethod } from './turn.js';\n\nexport { LocomotionEnvironment } from './locomotion-environment.js';\n\n/**\n * Physics‑driven locomotion (slide, teleport, turn) backed by the {@link @iwsdk/locomotor!Locomotor} engine.\n *\n * @remarks\n * - Enable this system via {@link WorldOptions.features.enableLocomotion}.\n * - Add {@link LocomotionEnvironment} to level meshes to make them walkable.\n * - For moving platforms, use `EnvironmentType.KINEMATIC` and keep transforms updated.\n * - In hand‑tracking mode, micro‑gesture controls can toggle turn/teleport using swipe gestures.\n *\n * @category Locomotion\n * @example\n * ```ts\n * world.registerSystem(LocomotionSystem, {\n * configData: { turningAngle: 45, slidingSpeed: 4.5 }\n * });\n * ```\n */\nexport class LocomotionSystem extends createSystem(\n {\n envs: { required: [LocomotionEnvironment] },\n },\n {\n /** Starting player position before the first update. */\n initialPlayerPosition: { type: Types.Vec3, default: [0, 0, 0] },\n /** Run the locomotion engine in a WebWorker for better main‑thread perf. */\n useWorker: { type: Types.Boolean, default: true },\n /** Comfort vignette strength forwarded to SlideSystem. */\n comfortAssist: { type: Types.Float32, default: 0.5 },\n /** Maximum sliding speed (m/s). */\n slidingSpeed: { type: Types.Float32, default: 5 },\n /** Turning mode: snap vs smooth. */\n turningMethod: { type: Types.Int8, default: TurningMethod.SnapTurn },\n /** Degrees per snap turn. */\n turningAngle: { type: Types.Float32, default: 45 },\n /** Degrees per second for smooth turning. */\n turningSpeed: { type: Types.Float32, default: 180 },\n /** Parabolic ray gravity for teleport guide (negative). */\n rayGravity: { type: Types.Float32, default: -0.4 },\n /** Max drop allowed when projecting the player onto walkable surfaces. */\n maxDropDistance: { type: Types.Float32, default: 5.0 },\n /** Jump apex height in meters. */\n jumpHeight: { type: Types.Float32, default: 1.5 },\n /** Minimum seconds between jumps. */\n jumpCooldown: { type: Types.Float32, default: 0.1 },\n /** Whether jumping is enabled. */\n enableJumping: { type: Types.Boolean, default: true },\n /** Optional browser bindings for action-backed first-person locomotion. */\n browserControls: { type: Types.Object, default: false },\n },\n) {\n private locomotor!: Locomotor;\n private inputProvider!: ActionLocomotionInputProvider;\n\n private teleportSystem?: TeleportSystem;\n private slideSystem?: SlideSystem;\n private turnSystem!: TurnSystem;\n private microGestureControlsEnabled = false;\n private requestedPlayerPosition?: Vector3;\n\n /** Place the locomotion origin at an authored virtual-environment position. */\n setPlayerPosition(position: Vector3): void {\n this.requestedPlayerPosition ??= new Vector3();\n this.requestedPlayerPosition.copy(position);\n this.config.initialPlayerPosition.value = position.toArray();\n this.player.position.copy(position);\n if (this.locomotor?.isInitialized()) {\n this.locomotor.teleport(position);\n }\n }\n\n init() {\n // Apply the configured starting position synchronously. Native scene\n // loading captures the current player transform as its restoration\n // baseline, while the locomotor finishes initializing asynchronously.\n this.player.position.fromArray(\n this.config.initialPlayerPosition.value as number[],\n );\n this.cleanupFuncs.push(\n this.world.onAuthoredPlayerPosition((position) => {\n this.setPlayerPosition(position);\n }),\n );\n this.inputProvider = new ActionLocomotionInputProvider(this.world);\n this.inputProvider.enableBrowserControls(\n this.config.browserControls.value as BrowserLocomotionControls,\n );\n\n this.world.registerSystem(TurnSystem, {\n configData: {\n turningMethod: this.config.turningMethod.value,\n turningAngle: this.config.turningAngle.value,\n turningSpeed: this.config.turningSpeed.value,\n microGestureControlsEnabled: false,\n inputProvider: this.inputProvider,\n },\n });\n this.turnSystem = this.world.getSystem(TurnSystem)!;\n this.initLocomotor().then(() => {\n this.cleanupFuncs.push(\n this.config.rayGravity.subscribe((value) => {\n this.locomotor.updateConfig({ rayGravity: value });\n if (this.teleportSystem) {\n this.teleportSystem.config.rayGravity.value = value;\n }\n }),\n this.config.slidingSpeed.subscribe((value) => {\n if (this.slideSystem) {\n this.slideSystem.config.maxSpeed.value = value;\n }\n }),\n this.config.comfortAssist.subscribe((value) => {\n if (this.slideSystem) {\n this.slideSystem.config.comfortAssist.value = value;\n }\n }),\n this.config.turningMethod.subscribe((value) => {\n this.turnSystem.config.turningMethod.value = value;\n }),\n this.config.turningAngle.subscribe((value) => {\n this.turnSystem.config.turningAngle.value = value;\n }),\n this.config.turningSpeed.subscribe((value) => {\n this.turnSystem.config.turningSpeed.value = value;\n }),\n this.config.maxDropDistance.subscribe((value) => {\n this.locomotor.updateConfig({ maxDropDistance: value });\n }),\n this.config.jumpHeight.subscribe((value) => {\n this.locomotor.updateConfig({ jumpHeight: value });\n }),\n this.config.jumpCooldown.subscribe((value) => {\n this.locomotor.updateConfig({ jumpCooldown: value });\n }),\n this.config.enableJumping.subscribe((value) => {\n if (this.slideSystem) {\n this.slideSystem.config.enableJumping.value = value;\n }\n }),\n );\n });\n\n // Register the env query subscriptions on cleanupFuncs (the config\n // subscriptions above are already registered) so they're released when the\n // LocomotionSystem is torn down.\n this.cleanupFuncs.push(\n this.queries.envs.subscribe('qualify', (entity) => {\n this.addEnvironmentToEngine(entity);\n }),\n this.queries.envs.subscribe('disqualify', (entity) => {\n this.removeEnvironmentFromEngine(entity);\n }),\n );\n }\n\n private async initLocomotor(): Promise<void> {\n // Create Locomotor with configuration\n const locomotorConfig: LocomotorConfig = {\n initialPlayerPosition:\n this.requestedPlayerPosition?.clone() ??\n new Vector3().fromArray(\n this.config.initialPlayerPosition.value as number[],\n ),\n rayGravity: this.config.rayGravity.value as number,\n maxDropDistance: this.config.maxDropDistance.value as number,\n jumpHeight: this.config.jumpHeight.value as number,\n jumpCooldown: this.config.jumpCooldown.value as number,\n useWorker: this.config.useWorker.value as boolean,\n };\n\n this.locomotor = new Locomotor(locomotorConfig);\n await this.locomotor.initialize();\n if (this.requestedPlayerPosition != null) {\n this.locomotor.teleport(this.requestedPlayerPosition);\n this.player.position.copy(this.requestedPlayerPosition);\n }\n\n // Register subsystems with locomotor\n this.world.registerSystem(TeleportSystem, {\n configData: {\n rayGravity: this.config.rayGravity.value,\n locomotor: this.locomotor,\n inputProvider: this.inputProvider,\n microGestureControlsEnabled: false,\n },\n });\n this.world.registerSystem(SlideSystem, {\n configData: {\n maxSpeed: this.config.slidingSpeed.value,\n comfortAssist: this.config.comfortAssist.value,\n enableJumping: this.config.enableJumping.value,\n locomotor: this.locomotor,\n inputProvider: this.inputProvider,\n },\n });\n\n this.teleportSystem = this.world.getSystem(TeleportSystem);\n this.slideSystem = this.world.getSystem(SlideSystem);\n\n // Add any existing environments to the engine\n for (const entity of this.queries.envs.entities) {\n this.addEnvironmentToEngine(entity);\n }\n }\n\n private addEnvironmentToEngine(entity: Entity): void {\n if (!this.locomotor?.isInitialized()) {\n return;\n }\n if (entity.getValue(LocomotionEnvironment, '_initialized')) {\n return; // Already initialized\n }\n\n const envGroup = entity.object3D;\n if (!envGroup?.isObject3D) {\n return;\n }\n\n const envType = entity.getValue(LocomotionEnvironment, 'type');\n\n if (envType !== null) {\n try {\n // Add environment through Locomotor - returns handle\n const envHandle = this.locomotor.addEnvironment(envGroup, envType);\n\n // Store the generated handle for tracking\n entity.setValue(LocomotionEnvironment, '_envHandle', envHandle);\n entity.setValue(LocomotionEnvironment, '_initialized', true);\n } catch (error) {\n console.error('Failed to add environment to locomotion engine:', error);\n }\n }\n }\n\n private removeEnvironmentFromEngine(entity: Entity): void {\n if (!this.locomotor) {\n return;\n }\n const envHandle = entity.getValue(LocomotionEnvironment, '_envHandle');\n if (envHandle === 0) {\n return; // Not initialized or invalid handle\n } else if (envHandle !== null) {\n this.locomotor.removeEnvironment(envHandle);\n }\n }\n\n update(delta: number): void {\n if (!this.locomotor) {\n return;\n }\n this.locomotor.updateKinematicEnvironments();\n this.locomotor.update(delta);\n this.player.position.copy(this.locomotor.position);\n\n // Toggle micro-gesture controls in hand-tracking mode\n if (this.input.xr.isPrimary('hand', 'right')) {\n const gp = this.input.xr.gamepads.right;\n if (gp) {\n // Swipe up (7) enables; swipe down (8) disables\n if (gp.getButtonDownByIdx(7)) {\n if (!this.microGestureControlsEnabled) {\n this.microGestureControlsEnabled = true;\n if (this.turnSystem) {\n this.turnSystem.config.microGestureControlsEnabled.value = true;\n }\n if (this.teleportSystem) {\n this.teleportSystem.config.microGestureControlsEnabled.value = true;\n }\n }\n } else if (gp.getButtonDownByIdx(8)) {\n if (this.microGestureControlsEnabled) {\n this.microGestureControlsEnabled = false;\n if (this.turnSystem) {\n this.turnSystem.config.microGestureControlsEnabled.value = false;\n }\n if (this.teleportSystem) {\n this.teleportSystem.config.microGestureControlsEnabled.value = false;\n }\n }\n }\n }\n }\n }\n\n destroy(): void {\n super.destroy();\n if (this.locomotor) {\n this.locomotor.terminate();\n }\n this.world.unregisterSystem(TurnSystem);\n if (this.teleportSystem) {\n this.world.unregisterSystem(TeleportSystem);\n }\n if (this.slideSystem) {\n this.world.unregisterSystem(SlideSystem);\n }\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"line.js","sources":["../../../src/locomotion/materials/line.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"line.js","sources":["../../../src/locomotion/materials/line.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport {\n Color,\n ShaderLib,\n ShaderMaterial,\n UniformsLib,\n UniformsUtils,\n Vector3,\n} from '../../runtime/three.js';\n\n// @ts-ignore\nUniformsLib.linee = {\n linewidth: { value: 1 },\n color: { value: new Color(0xffffff) },\n startPoint: { value: new Vector3() },\n endPoint: { value: new Vector3() },\n};\n\nShaderLib['linee'] = {\n uniforms: UniformsUtils.merge([\n UniformsLib.common,\n UniformsLib.fog,\n // @ts-ignore\n UniformsLib.linee,\n ]),\n\n vertexShader: /* glsl */ `\n\t\t#include <common>\n\t\t#include <color_pars_vertex>\n\t\t#include <fog_pars_vertex>\n\t\t#include <logdepthbuf_pars_vertex>\n\t\t#include <clipping_planes_pars_vertex>\n\n\t\tuniform float linewidth;\n\t\tuniform vec3 startPoint;\n\t\tuniform vec3 endPoint;\n\t\tvarying float vDistanceAlpha;\n\n\t\tattribute vec3 instanceStart;\n\t\tattribute vec3 instanceEnd;\n\n\t\tattribute vec3 instanceColorStart;\n\t\tattribute vec3 instanceColorEnd;\n\n\t\tvarying vec4 worldPos;\n\t\tvarying vec3 worldStart;\n\t\tvarying vec3 worldEnd;\n\n\t\tvoid trimSegment( const in vec4 start, inout vec4 end ) {\n\n\t\t\t// trim end segment so it terminates between the camera plane and the near plane\n\n\t\t\t// conservative estimate of the near plane\n\t\t\tfloat a = projectionMatrix[ 2 ][ 2 ]; // 3nd entry in 3th column\n\t\t\tfloat b = projectionMatrix[ 3 ][ 2 ]; // 3nd entry in 4th column\n\t\t\tfloat nearEstimate = - 0.5 * b / a;\n\n\t\t\tfloat alpha = ( nearEstimate - start.z ) / ( end.z - start.z );\n\n\t\t\tend.xyz = mix( start.xyz, end.xyz, alpha );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\t#ifdef USE_COLOR\n\n\t\t\t\tvColor.xyz = ( position.y < 0.5 ) ? instanceColorStart : instanceColorEnd;\n\n\t\t\t#endif\n\n\t\t\t// camera space\n\t\t\tvec4 start = modelViewMatrix * vec4( instanceStart, 1.0 );\n\t\t\tvec4 end = modelViewMatrix * vec4( instanceEnd, 1.0 );\n\n\n\t\t\tworldStart = start.xyz;\n\t\t\tworldEnd = end.xyz;\n\n\t\t\tvec3 currentPosition = (position.y < 0.5) ? instanceStart : instanceEnd;\n \tfloat distanceToStart = length(currentPosition - startPoint);\n\t\t\tfloat startAlpha = smoothstep(0.0, 0.8, distanceToStart);\n \tfloat distanceToEnd = length(currentPosition - endPoint);\n\t\t\tfloat endAlpha = smoothstep(0.5, 2.0, distanceToEnd);\n \t// Compute vDistanceAlpha using smoothstep\n \tvDistanceAlpha = min(startAlpha, endAlpha);\n\t\t\t\n\n\t\t\t// special case for perspective projection, and segments that terminate either in, or behind, the camera plane\n\t\t\t// clearly the gpu firmware has a way of addressing this issue when projecting into ndc space\n\t\t\t// but we need to perform ndc-space calculations in the shader, so we must address this issue directly\n\t\t\t// perhaps there is a more elegant solution -- WestLangley\n\n\t\t\tbool perspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 ); // 4th entry in the 3rd column\n\n\t\t\tif ( perspective ) {\n\n\t\t\t\tif ( start.z < 0.0 && end.z >= 0.0 ) {\n\n\t\t\t\t\ttrimSegment( start, end );\n\n\t\t\t\t} else if ( end.z < 0.0 && start.z >= 0.0 ) {\n\n\t\t\t\t\ttrimSegment( end, start );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// clip space\n\t\t\tvec4 clipStart = projectionMatrix * start;\n\t\t\tvec4 clipEnd = projectionMatrix * end;\n\n\t\t\t// ndc space\n\t\t\tvec3 ndcStart = clipStart.xyz / clipStart.w;\n\t\t\tvec3 ndcEnd = clipEnd.xyz / clipEnd.w;\n\n\t\t\t// direction\n\t\t\tvec2 dir = ndcEnd.xy - ndcStart.xy;\n\t\t\tdir = normalize( dir );\n\n\t\t\tvec3 worldDir = normalize( end.xyz - start.xyz );\n\t\t\tvec3 tmpFwd = normalize( mix( start.xyz, end.xyz, 0.5 ) );\n\t\t\tvec3 worldUp = normalize( cross( worldDir, tmpFwd ) );\n\t\t\tvec3 worldFwd = cross( worldDir, worldUp );\n\t\t\tworldPos = position.y < 0.5 ? start: end;\n\n\t\t\t// height offset\n\t\t\tfloat hw = linewidth * 0.5;\n\t\t\tworldPos.xyz += position.x < 0.0 ? hw * worldUp : - hw * worldUp;\n\n\t\t\t// don't extend the line if we're rendering dashes because we\n\t\t\t// won't be rendering the endcaps\n\n\t\t\t// cap extension\n\t\t\tworldPos.xyz += position.y < 0.5 ? - hw * worldDir : hw * worldDir;\n\n\t\t\t// add width to the box\n\t\t\tworldPos.xyz += worldFwd * hw;\n\n\t\t\t// endcaps\n\t\t\tif ( position.y > 1.0 || position.y < 0.0 ) {\n\n\t\t\t\tworldPos.xyz -= worldFwd * 2.0 * hw;\n\n\t\t\t}\n\n\n\t\t\t// project the worldpos\n\t\t\tvec4 clip = projectionMatrix * worldPos;\n\n\t\t\t// shift the depth of the projected points so the line\n\t\t\t// segments overlap neatly\n\t\t\tvec3 clipPose = ( position.y < 0.5 ) ? ndcStart : ndcEnd;\n\t\t\tclip.z = clipPose.z * clip.w;\n\n\t\t\tgl_Position = clip;\n\n\t\t\tvec4 mvPosition = ( position.y < 0.5 ) ? start : end; // this is an approximation\n\n\t\t\t#include <logdepthbuf_vertex>\n\t\t\t#include <clipping_planes_vertex>\n\t\t\t#include <fog_vertex>\n\n\t\t}\n\t\t`,\n\n fragmentShader: /* glsl */ `\n\t\tuniform float linewidth;\n\n\t\tvarying vec4 worldPos;\n\t\tvarying vec3 worldStart;\n\t\tvarying vec3 worldEnd;\n\t\tvarying float vDistanceAlpha;\n\n\t\t#include <common>\n\t\t#include <color_pars_fragment>\n\t\t#include <fog_pars_fragment>\n\t\t#include <logdepthbuf_pars_fragment>\n\t\t#include <clipping_planes_pars_fragment>\n\n\t\tvec2 closestLineToLine(vec3 p1, vec3 p2, vec3 p3, vec3 p4) {\n\n\t\t\tfloat mua;\n\t\t\tfloat mub;\n\n\t\t\tvec3 p13 = p1 - p3;\n\t\t\tvec3 p43 = p4 - p3;\n\n\t\t\tvec3 p21 = p2 - p1;\n\n\t\t\tfloat d1343 = dot( p13, p43 );\n\t\t\tfloat d4321 = dot( p43, p21 );\n\t\t\tfloat d1321 = dot( p13, p21 );\n\t\t\tfloat d4343 = dot( p43, p43 );\n\t\t\tfloat d2121 = dot( p21, p21 );\n\n\t\t\tfloat denom = d2121 * d4343 - d4321 * d4321;\n\n\t\t\tfloat numer = d1343 * d4321 - d1321 * d4343;\n\n\t\t\tmua = numer / denom;\n\t\t\tmua = clamp( mua, 0.0, 1.0 );\n\t\t\tmub = ( d1343 + d4321 * ( mua ) ) / d4343;\n\t\t\tmub = clamp( mub, 0.0, 1.0 );\n\n\t\t\treturn vec2( mua, mub );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\t#include <clipping_planes_fragment>\n\n\t\t\t// Find the closest points on the view ray and the line segment\n\t\t\tvec3 rayEnd = normalize( worldPos.xyz ) * 1e5;\n\t\t\tvec3 lineDir = worldEnd - worldStart;\n\t\t\tvec2 params = closestLineToLine( worldStart, worldEnd, vec3( 0.0, 0.0, 0.0 ), rayEnd );\n\n\t\t\tvec3 p1 = worldStart + lineDir * params.x;\n\t\t\tvec3 p2 = rayEnd * params.y;\n\t\t\tvec3 delta = p1 - p2;\n\t\t\tfloat len = length( delta );\n\t\t\tfloat norm = len / linewidth;\n\n\t\t\tif ( norm > 0.5 ) {\n\t\t\t\tdiscard;\n\t\t\t}\n\n\t\t\t#include <logdepthbuf_fragment>\n\n\t\t\tgl_FragColor = vec4( 1.0, 1.0, 1.0, vDistanceAlpha );\n\n\t\t\t#include <tonemapping_fragment>\n\t\t\t#include <colorspace_fragment>\n\t\t\t#include <fog_fragment>\n\t\t\t#include <premultiplied_alpha_fragment>\n\n\t\t}\n\t\t`,\n};\n\nclass LineMaterial extends ShaderMaterial {\n isLineMaterial = true;\n // Compatibility flags with three/examples LineMaterial API\n // worldUnits is effectively always true in this shader, but we accept the flag to avoid warnings\n private _worldUnits: boolean = true;\n constructor(parameters: any) {\n super({\n // @ts-ignore\n type: 'LineMaterial',\n uniforms: UniformsUtils.clone(ShaderLib['linee'].uniforms),\n\n vertexShader: ShaderLib['linee'].vertexShader,\n fragmentShader: ShaderLib['linee'].fragmentShader,\n\n clipping: true, // required for clipping support\n });\n\n this.setValues(parameters);\n }\n\n get color() {\n return this.uniforms.diffuse.value;\n }\n\n set color(value) {\n this.uniforms.diffuse.value = value;\n }\n\n // @ts-ignore\n get linewidth() {\n return this.uniforms.linewidth.value;\n }\n\n // @ts-ignore\n set linewidth(value) {\n if (!this.uniforms.linewidth) {\n return;\n }\n this.uniforms.linewidth.value = value;\n }\n\n get dashed() {\n return 'USE_DASH' in this.defines;\n }\n\n set dashed(value) {\n if ((value === true) !== this.dashed) {\n this.needsUpdate = true;\n }\n\n if (value === true) {\n this.defines.USE_DASH = '';\n } else {\n delete this.defines.USE_DASH;\n }\n }\n\n // @ts-ignore\n get opacity() {\n return this.uniforms.opacity.value;\n }\n\n set opacity(value) {\n if (!this.uniforms) {\n return;\n }\n this.uniforms.opacity.value = value;\n }\n\n // --- Compatibility API ---\n // Accept and expose `worldUnits` so Material.setValues doesn't warn.\n // Our implementation measures linewidth in world space, so this is a no-op.\n get worldUnits(): boolean {\n return this._worldUnits;\n }\n set worldUnits(v: boolean) {\n this._worldUnits = !!v;\n }\n\n // Note: `vertexColors` is a property on ShaderMaterial; we rely on three's behavior.\n}\n\nexport { LineMaterial };\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"slide.js","sources":["../../src/locomotion/slide.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slide.js","sources":["../../src/locomotion/slide.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { Locomotor } from '@iwsdk/locomotor';\nimport { Types } from '../ecs/component.js';\nimport { createSystem } from '../ecs/system.js';\nimport {\n BackSide,\n Color,\n CylinderGeometry,\n MathUtils,\n Mesh,\n Quaternion,\n ShaderMaterial,\n Vector2,\n Vector3,\n} from '../runtime/index.js';\nimport {\n ActionLocomotionInputProvider,\n getRequiredInputProvider,\n} from './locomotion-input-provider.js';\n\nconst { lerp } = MathUtils;\n\nconst vertexShader = `\n\tvarying vec2 vUv;\n\n\tvoid main() {\n\t\tvUv = uv;\n\t\tvec4 modelPosition = modelMatrix * vec4(position, 1.0);\n\t\tvec4 viewPosition = viewMatrix * modelPosition;\n\t\tvec4 projectedPosition = projectionMatrix * viewPosition;\n\n\t\tgl_Position = projectedPosition;\n\t}\n`;\n\nconst fragmentShader = `\n\tuniform vec3 uColor;\n\tuniform float uAlpha;\n\tvarying vec2 vUv;\n\n\tvoid main() {\n\t\tgl_FragColor = vec4(uColor, uAlpha * vUv.y);\n\t}\n`;\n\nconst createVignette = (radius: number, colorRep: number = 0x000000) => {\n const vignette = new Mesh(\n new CylinderGeometry(radius, radius * 0.5, 0.3, 16, 1, true),\n new ShaderMaterial({\n vertexShader: vertexShader,\n fragmentShader: fragmentShader,\n uniforms: {\n uColor: { value: new Color(colorRep) },\n uAlpha: { value: 0 },\n },\n depthTest: false,\n side: BackSide,\n transparent: true,\n }),\n );\n vignette.frustumCulled = false;\n vignette.renderOrder = 999;\n vignette.rotateX(Math.PI / 2);\n vignette.position.z = -0.15;\n return vignette;\n};\n\n/**\n * Analog stick sliding locomotion with optional comfort vignette and jump.\n *\n * @remarks\n * - Reads left controller thumbstick for planar movement relative to head yaw.\n * - Applies a dynamic peripheral vignette based on input magnitude scaled by\n * `comfortAssist` to reduce motion sickness.\n * - Triggers jump when the locomotion jump action is pressed.\n *\n * @category Locomotion\n */\nexport class SlideSystem extends createSystem(\n {},\n {\n /** Locomotor engine shared across locomotion systems. */\n locomotor: { type: Types.Object, default: undefined },\n /** Action-backed input provider shared across locomotion systems. */\n inputProvider: { type: Types.Object, default: undefined },\n /** Maximum linear speed in meters/second. */\n maxSpeed: { type: Types.Float32, default: 5 },\n /** Comfort vignette strength [0..1]; 0 disables vignetting. */\n comfortAssist: { type: Types.Float32, default: 0.5 },\n /** Whether jumping is enabled. */\n enableJumping: { type: Types.Boolean, default: true },\n },\n) {\n private movementVector = new Vector3();\n private movementDirection = new Quaternion();\n private input2D = new Vector2();\n private isMoving = false;\n private vignette = createVignette(0.3);\n private vignetteAlphaTarget = 0;\n private locomotor!: Locomotor;\n private inputProvider!: ActionLocomotionInputProvider;\n\n init() {\n this.locomotor = this.config.locomotor.value as Locomotor;\n this.inputProvider = getRequiredInputProvider(\n 'SlideSystem',\n this.config.inputProvider.value,\n );\n this.camera.add(this.vignette);\n }\n\n destroy(): void {\n this.vignette.removeFromParent();\n }\n\n update(delta: number): void {\n this.vignetteAlphaTarget = 0;\n\n // Handle jump input\n if (this.config.enableJumping.value && this.inputProvider.getJumpDown()) {\n this.locomotor.jump();\n }\n\n this.inputProvider.getMoveAxis(this.input2D);\n {\n this.movementVector.set(this.input2D.x, 0, this.input2D.y);\n const inputValue = Math.min(this.input2D.length(), 1);\n if (inputValue > 0) {\n this.inputProvider.getMovementReferenceQuaternion(\n this.movementDirection,\n );\n this.movementVector.applyQuaternion(this.movementDirection);\n this.movementVector.y = 0;\n this.movementVector\n .normalize()\n .multiplyScalar(inputValue * (this.config.maxSpeed.value as number));\n this.locomotor.slide(this.movementVector);\n this.vignetteAlphaTarget =\n inputValue * (this.config.comfortAssist.value as number);\n } else {\n if (this.isMoving) {\n // Stop movement by sending zero vector\n this.movementVector.set(0, 0, 0);\n this.locomotor.slide(this.movementVector);\n }\n }\n\n this.isMoving = inputValue > 0;\n this.vignette.material.uniforms.uAlpha.value = lerp(\n this.vignette.material.uniforms.uAlpha.value,\n this.vignetteAlphaTarget,\n delta * 10,\n );\n }\n }\n}\n"],"names":[],"mappings":";;;;;;AAAA;;;;;AAKG;AAqBH,MAAM,EAAE,IAAI,EAAE,GAAG,SAAS;AAE1B,MAAM,YAAY,GAAG;;;;;;;;;;;CAWpB;AAED,MAAM,cAAc,GAAG;;;;;;;;CAQtB;AAED,MAAM,cAAc,GAAG,CAAC,MAAc,EAAE,QAAA,GAAmB,QAAQ,KAAI;IACrE,MAAM,QAAQ,GAAG,IAAI,IAAI,CACvB,IAAI,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,EAC5D,IAAI,cAAc,CAAC;AACjB,QAAA,YAAY,EAAE,YAAY;AAC1B,QAAA,cAAc,EAAE,cAAc;AAC9B,QAAA,QAAQ,EAAE;YACR,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE;AACtC,YAAA,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;AACrB,SAAA;AACD,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,WAAW,EAAE,IAAI;AAClB,KAAA,CAAC,CACH;AACD,IAAA,QAAQ,CAAC,aAAa,GAAG,KAAK;AAC9B,IAAA,QAAQ,CAAC,WAAW,GAAG,GAAG;IAC1B,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;AAC7B,IAAA,QAAQ,CAAC,QAAQ,CAAC,CAAC,GAAG,KAAK;AAC3B,IAAA,OAAO,QAAQ;AACjB,CAAC;AAED;;;;;;;;;;AAUG;MACU,WAAY,SAAQ,YAAY,CAC3C,EAAE,EACF;;IAEE,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;;IAErD,aAAa,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;;IAEzD,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE;;IAE7C,aAAa,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE;;IAEpD,aAAa,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;CACtD,CACF,CAAA;AAdD,IAAA,WAAA,GAAA;;AAeU,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,OAAO,EAAE;AAC9B,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,UAAU,EAAE;AACpC,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,OAAO,EAAE;QACvB,IAAA,CAAA,QAAQ,GAAG,KAAK;AAChB,QAAA,IAAA,CAAA,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC;QAC9B,IAAA,CAAA,mBAAmB,GAAG,CAAC;IAyDjC;IArDE,IAAI,GAAA;QACF,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAkB;AACzD,QAAA,IAAI,CAAC,aAAa,GAAG,wBAAwB,CAC3C,aAAa,EACb,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAChC;QACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;IAChC;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE;IAClC;AAEA,IAAA,MAAM,CAAC,KAAa,EAAA;AAClB,QAAA,IAAI,CAAC,mBAAmB,GAAG,CAAC;;AAG5B,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,EAAE;AACvE,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;QACvB;QAEA,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;QAC5C;AACE,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAC1D,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACrD,YAAA,IAAI,UAAU,GAAG,CAAC,EAAE;gBAClB,IAAI,CAAC,aAAa,CAAC,8BAA8B,CAC/C,IAAI,CAAC,iBAAiB,CACvB;gBACD,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,iBAAiB,CAAC;AAC3D,gBAAA,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC;AACzB,gBAAA,IAAI,CAAC;AACF,qBAAA,SAAS;qBACT,cAAc,CAAC,UAAU,GAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAgB,CAAC;gBACtE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;AACzC,gBAAA,IAAI,CAAC,mBAAmB;oBACtB,UAAU,GAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAgB;YAC5D;iBAAO;AACL,gBAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;;oBAEjB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;oBAChC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;gBAC3C;YACF;AAEA,YAAA,IAAI,CAAC,QAAQ,GAAG,UAAU,GAAG,CAAC;AAC9B,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CACjD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAC5C,IAAI,CAAC,mBAAmB,EACxB,KAAK,GAAG,EAAE,CACX;QACH;IACF;AACD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"teleport.js","sources":["../../src/locomotion/teleport.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"teleport.js","sources":["../../src/locomotion/teleport.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { Locomotor, sampleParabolicCurve } from '@iwsdk/locomotor';\nimport { Line2 } from 'three/examples/jsm/lines/Line2.js';\nimport { LineGeometry } from 'three/examples/jsm/lines/LineGeometry.js';\nimport { Types } from '../ecs/component.js';\nimport { createSystem } from '../ecs/system.js';\nimport {\n Color,\n Mesh,\n MeshBasicMaterial,\n RingGeometry,\n Vector3,\n} from '../runtime/index.js';\nimport {\n ActionLocomotionInputProvider,\n getRequiredInputProvider,\n} from './locomotion-input-provider.js';\nimport { LineMaterial } from './materials/line.js';\n\nconst Colors = {\n valid: new Color(0xffffff),\n invalid: new Color(0xed4337),\n};\n\nconst Scales = {\n valid: new Vector3(1, 1, 1),\n invalid: new Vector3(0.5, 0.5, 0.5),\n};\n\n/**\n * Arc‑based teleportation with surface validation and hand/controller input.\n *\n * @remarks\n * - Uses locomotor ray hit tests and only allows targets with upward normals.\n * - In hand‑tracking mode, optional micro‑gestures can control activation\n * (e.g., thumb tap to confirm).\n * - Draws a curved parabolic guide and landing marker with visual feedback.\n *\n * @category Locomotion\n */\nexport class TeleportSystem extends createSystem(\n {},\n {\n /** Downward acceleration for the parabolic guide (negative). */\n rayGravity: { type: Types.Float32, default: -0.4 },\n /** Locomotor engine used for hit testing and teleport execution. */\n locomotor: { type: Types.Object, default: undefined },\n /** Action-backed input provider shared across locomotion systems. */\n inputProvider: { type: Types.Object, default: undefined },\n /** Enable hand‑tracking micro‑gesture flow for activation/confirm. */\n microGestureControlsEnabled: { type: Types.Boolean, default: false },\n },\n) {\n private rayOrigin = new Vector3();\n private rayDirection = new Vector3();\n private markers!: Vector3[];\n private targetValid = false;\n private teleportMarker!: Mesh;\n private markerMat!: MeshBasicMaterial;\n private line!: Line2;\n private teleportWasActive = false;\n private locomotor!: Locomotor;\n private inputProvider!: ActionLocomotionInputProvider;\n\n init() {\n this.locomotor = this.config.locomotor.value as Locomotor;\n this.inputProvider = getRequiredInputProvider(\n 'TeleportSystem',\n this.config.inputProvider.value,\n );\n this.markerMat = new MeshBasicMaterial();\n this.teleportMarker = new Mesh(\n new RingGeometry(0.12, 0.15).translate(0, 0, 0.02),\n this.markerMat,\n );\n this.scene.add(this.teleportMarker);\n\n this.markers = [];\n for (let i = 0; i < 20; i++) {\n this.markers.push(new Vector3(0, i, 0));\n }\n const geometry = new LineGeometry().setFromPoints(this.markers);\n const mat = new LineMaterial({\n color: 0xffffff,\n linewidth: 0.01,\n worldUnits: true,\n vertexColors: true,\n alphaToCoverage: false,\n transparent: true,\n });\n\n this.line = new Line2(geometry, mat as any);\n this.line.frustumCulled = false;\n this.scene.add(this.line);\n this.line.visible = false;\n this.teleportMarker.visible = false;\n }\n\n destroy(): void {\n this.teleportMarker.removeFromParent();\n this.line.removeFromParent();\n // Note: No need to remove raycastTarget as we use locomotor's hit test target\n }\n\n update(): void {\n // Get hit test target from locomotor\n const hitTestTarget = this.locomotor.hitTestTarget;\n const hitTestNormal = this.locomotor.hitTestNormal;\n\n // Validate target: must have hit AND normal must be mostly upward-facing (> 0.7)\n this.targetValid = hitTestTarget.visible && hitTestNormal.y > 0.7;\n\n const pointerBusy = this.input.xr.multiPointers.right.getRayBusy();\n let teleportActive = this.inputProvider.getTeleportActive(\n pointerBusy,\n this.config.microGestureControlsEnabled.value,\n );\n\n if (teleportActive) {\n if (\n !this.inputProvider.getTeleportRay(this.rayOrigin, this.rayDirection)\n ) {\n teleportActive = false;\n }\n }\n\n if (teleportActive) {\n if (!this.teleportWasActive) {\n this.line.visible = true;\n this.teleportMarker.visible = true;\n }\n\n const minY = Math.max(\n this.player.position.y,\n this.teleportMarker.position.y,\n );\n\n sampleParabolicCurve(\n this.rayOrigin,\n this.rayDirection,\n minY,\n this.config.rayGravity.value,\n this.markers,\n 1,\n );\n\n this.line.geometry.setFromPoints(this.markers);\n this.line.material.uniforms.startPoint.value.copy(this.markers[0]);\n this.line.material.uniforms.endPoint.value.copy(\n this.markers[this.markers.length - 1],\n );\n\n // Request hit test from locomotor\n this.locomotor.requestHitTest(this.rayOrigin, this.rayDirection);\n\n // Update teleport marker to follow hit test target\n this.teleportMarker.position.lerp(hitTestTarget.position, 0.2);\n this.teleportMarker.quaternion.slerp(hitTestTarget.quaternion, 0.2);\n this.markerMat.color.lerp(\n this.targetValid ? Colors.valid : Colors.invalid,\n 0.2,\n );\n this.teleportMarker.scale.lerp(\n this.targetValid ? Scales.valid : Scales.invalid,\n 0.2,\n );\n } else if (this.teleportWasActive) {\n if (\n this.targetValid &&\n this.inputProvider.getTeleportCommit(\n this.config.microGestureControlsEnabled.value,\n )\n ) {\n // Teleport to the hit test target position\n this.locomotor.teleport(this.teleportMarker.position);\n }\n this.line.visible = false;\n this.teleportMarker.visible = false;\n }\n\n this.teleportWasActive = teleportActive;\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"turn.js","sources":["../../src/locomotion/turn.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"turn.js","sources":["../../src/locomotion/turn.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { Types } from '../ecs/component.js';\nimport { createSystem } from '../ecs/system.js';\nimport { Group, Mesh, Vector3 } from '../runtime/index.js';\nimport { BeveledCylinderGeometry } from './geometries/beveled-cylinder.js';\nimport {\n ActionLocomotionInputProvider,\n getRequiredInputProvider,\n} from './locomotion-input-provider.js';\n\nconst unitVector = new Vector3(1, 1, 1);\n\nexport enum TurningMethod {\n SnapTurn = 1,\n SmoothTurn = 2,\n}\n\n/**\n * Player yaw rotation via snap or smooth turning.\n *\n * @remarks\n * - When snap turning is active, visual turn signals render on the right ray\n * and respond to thumbstick left/right or hand micro‑gestures (if enabled).\n * - Smooth turning applies a continuous yaw at `turningSpeed` degrees/second.\n *\n * @category Locomotion\n */\nexport class TurnSystem extends createSystem(\n {},\n {\n /** Choose snap or smooth turning. */\n turningMethod: { type: Types.Int8, default: TurningMethod.SnapTurn },\n /** Degrees to rotate per snap. */\n turningAngle: { type: Types.Float32, default: 45 },\n /** Degrees per second when smooth turning. */\n turningSpeed: { type: Types.Float32, default: 180 },\n /** Enable swipe‑gesture turning in hand‑tracking mode. */\n microGestureControlsEnabled: { type: Types.Boolean, default: false },\n /** Action-backed input provider shared across locomotion systems. */\n inputProvider: { type: Types.Object, default: undefined },\n },\n) {\n private turnSignals = new Group();\n private leftSignal = new Mesh(\n new BeveledCylinderGeometry(0.004, 0.012, 0.022, 4, 0.004).rotateZ(\n Math.PI / 2,\n ),\n );\n private rightSignal = new Mesh(\n new BeveledCylinderGeometry(0.004, 0.012, 0.022, 4, 0.004).rotateZ(\n -Math.PI / 2,\n ),\n );\n private playerHeadPosition = new Vector3();\n private inputProvider!: ActionLocomotionInputProvider;\n\n init() {\n this.inputProvider = getRequiredInputProvider(\n 'TurnSystem',\n this.config.inputProvider.value,\n );\n this.turnSignals.add(this.leftSignal, this.rightSignal);\n this.leftSignal.position.set(-0.015, 0.02, 0);\n this.rightSignal.position.set(0.055, 0.02, 0);\n this.cleanupFuncs.push(\n this.config.turningMethod.subscribe((value) => {\n if (value === TurningMethod.SmoothTurn) {\n this.turnSignals.removeFromParent();\n } else {\n this.player.raySpaces.right.add(this.turnSignals);\n }\n }),\n );\n }\n\n destroy(): void {\n super.destroy();\n this.turnSignals.removeFromParent();\n }\n\n update(delta: number): void {\n if (this.config.turningMethod.value === TurningMethod.SmoothTurn) {\n this.updateSmooth(delta);\n } else {\n this.updateSnap(delta);\n }\n }\n\n private updateSmooth(delta: number): void {\n const turnAxis = this.inputProvider.getTurnAxis();\n const turningSpeedRadian = (this.config.turningSpeed.value / 180) * Math.PI;\n if (turnAxis !== 0) {\n this.player.rotateY(-turnAxis * turningSpeedRadian * delta);\n }\n }\n\n private updateSnap(delta: number): void {\n const turningAngleRadian = (this.config.turningAngle.value / 180) * Math.PI;\n const showSignals = this.inputProvider.shouldShowTurnSignals(\n this.config.microGestureControlsEnabled.value,\n );\n this.turnSignals.visible = showSignals;\n if (showSignals) {\n this.player.head.getWorldPosition(this.playerHeadPosition);\n this.turnSignals.lookAt(this.playerHeadPosition);\n } else {\n this.turnSignals.visible = false;\n }\n\n const turningLeft = this.inputProvider.getTurnLeftDown(\n this.config.microGestureControlsEnabled.value,\n );\n const turningRight = this.inputProvider.getTurnRightDown(\n this.config.microGestureControlsEnabled.value,\n );\n\n if (turningLeft) {\n this.player.rotateY(turningAngleRadian);\n if (this.turnSignals.visible) {\n this.leftSignal.scale.setScalar(1.5);\n }\n } else if (turningRight) {\n this.player.rotateY(-turningAngleRadian);\n if (this.turnSignals.visible) {\n this.rightSignal.scale.setScalar(1.5);\n }\n }\n if (this.turnSignals.visible) {\n this.leftSignal.scale.lerp(unitVector, 5 * delta);\n this.rightSignal.scale.lerp(unitVector, 5 * delta);\n }\n }\n}\n"],"names":[],"mappings":"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"}
@@ -11,7 +11,7 @@ export interface EcsPauseResult {
11
11
  frame: number;
12
12
  systemCount: number;
13
13
  }
14
- export declare function ecsPause(world: World): EcsPauseResult;
14
+ export declare function ecsPause(world: World): Promise<EcsPauseResult>;
15
15
  export interface EcsResumeResult {
16
16
  paused: boolean;
17
17
  framesWhilePaused: number;
@@ -122,12 +122,15 @@ export interface EcsSnapshot {
122
122
  }
123
123
  export interface EcsSnapshotParams {
124
124
  label?: string;
125
+ capacity?: number;
125
126
  }
126
127
  export interface EcsSnapshotResult {
127
128
  label: string;
128
129
  entityCount: number;
129
130
  componentCount: number;
130
131
  storedSnapshots: string[];
132
+ snapshotCapacity: number;
133
+ evictedSnapshots: string[];
131
134
  }
132
135
  export declare function ecsSnapshot(world: World, params: Record<string, unknown>): EcsSnapshotResult;
133
136
  export interface EcsDiffParams {
@@ -1 +1 @@
1
- {"version":3,"file":"ecs-debug-tools.d.ts","sourceRoot":"","sources":["../../src/mcp/ecs-debug-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ecs-debug-tools.d.ts","sourceRoot":"","sources":["../../src/mcp/ecs-debug-tools.ts"],"names":[],"mappings":"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"}
@@ -12,10 +12,52 @@ import { ComponentRegistry } from 'elics';
12
12
  const debugState = {
13
13
  paused: false,
14
14
  stepResolve: null,
15
+ stepReject: null,
16
+ stepInFlight: false,
15
17
  stepDelta: 1 / 72,
16
18
  frameCount: 0,
17
19
  pausedAtFrame: 0,
18
20
  };
21
+ const DEBUG_SYNC_TIMEOUT_MS = 5000;
22
+ function isDebugFrameSynchronizer(system) {
23
+ return (typeof system === 'object' &&
24
+ system !== null &&
25
+ 'flushDebugFrame' in system &&
26
+ typeof system.flushDebugFrame === 'function');
27
+ }
28
+ async function flushDebugSystems(world) {
29
+ await Promise.all(world
30
+ .getSystems()
31
+ .map((system) => isDebugFrameSynchronizer(system)
32
+ ? system.flushDebugFrame()
33
+ : Promise.resolve()));
34
+ }
35
+ function prepareDebugSystems(world, delta) {
36
+ var _a;
37
+ for (const system of world.getSystems()) {
38
+ if (isDebugFrameSynchronizer(system)) {
39
+ (_a = system.prepareDebugFrame) === null || _a === void 0 ? void 0 : _a.call(system, delta);
40
+ }
41
+ }
42
+ }
43
+ async function flushDebugSystemsWithTimeout(world, operation) {
44
+ let timer;
45
+ try {
46
+ await Promise.race([
47
+ flushDebugSystems(world),
48
+ new Promise((_, reject) => {
49
+ timer = setTimeout(() => {
50
+ reject(new Error(`${operation} timed out after ${DEBUG_SYNC_TIMEOUT_MS}ms while waiting for asynchronous systems to settle`));
51
+ }, DEBUG_SYNC_TIMEOUT_MS);
52
+ }),
53
+ ]);
54
+ }
55
+ finally {
56
+ if (timer !== undefined) {
57
+ clearTimeout(timer);
58
+ }
59
+ }
60
+ }
19
61
  // ---------------------------------------------------------------------------
20
62
  // Install debug hook — monkey-patches world.update()
21
63
  // ---------------------------------------------------------------------------
@@ -34,19 +76,40 @@ function installDebugHook(world) {
34
76
  return;
35
77
  }
36
78
  if (debugState.paused && debugState.stepResolve) {
79
+ if (debugState.stepInFlight) {
80
+ return;
81
+ }
37
82
  // Stepping — use fixed timestep
38
- originalUpdate(debugState.stepDelta, time);
39
83
  const resolve = debugState.stepResolve;
84
+ const reject = debugState.stepReject;
40
85
  debugState.stepResolve = null;
41
- resolve();
86
+ debugState.stepReject = null;
87
+ debugState.stepInFlight = true;
88
+ try {
89
+ prepareDebugSystems(world, debugState.stepDelta);
90
+ originalUpdate(debugState.stepDelta, time);
91
+ }
92
+ catch (error) {
93
+ debugState.stepInFlight = false;
94
+ reject === null || reject === void 0 ? void 0 : reject(error instanceof Error ? error : new Error(String(error)));
95
+ return;
96
+ }
97
+ void flushDebugSystems(world).then(() => {
98
+ debugState.stepInFlight = false;
99
+ resolve();
100
+ }, (error) => {
101
+ debugState.stepInFlight = false;
102
+ reject === null || reject === void 0 ? void 0 : reject(error instanceof Error ? error : new Error(String(error)));
103
+ });
42
104
  return;
43
105
  }
44
106
  originalUpdate(delta, time);
45
107
  };
46
108
  }
47
- function ecsPause(world) {
109
+ async function ecsPause(world) {
48
110
  debugState.paused = true;
49
111
  debugState.pausedAtFrame = debugState.frameCount;
112
+ await flushDebugSystemsWithTimeout(world, 'Pause');
50
113
  return {
51
114
  paused: true,
52
115
  frame: debugState.frameCount,
@@ -58,6 +121,10 @@ function ecsResume(world) {
58
121
  const framesWhilePaused = debugState.frameCount - debugState.pausedAtFrame;
59
122
  debugState.paused = false;
60
123
  debugState.stepResolve = null;
124
+ debugState.stepReject = null;
125
+ // Keep stepInFlight set until its asynchronous system flush actually
126
+ // settles. Normal updates can resume, but a later debugger step must not
127
+ // overlap the abandoned exchange.
61
128
  // Cap first real delta after resume to avoid physics explosions
62
129
  if (!resumeClampInstalled && originalUpdate) {
63
130
  const currentUpdate = world.update;
@@ -96,18 +163,25 @@ async function ecsStep(_world, params) {
96
163
  // no active XR session, page hidden), the resolve callback from
97
164
  // world.update() never fires. A 5s timeout per step prevents the MCP
98
165
  // call from hanging indefinitely.
99
- const STEP_TIMEOUT_MS = 5000;
100
166
  for (let i = 0; i < frameCount; i++) {
101
167
  await new Promise((resolve, reject) => {
102
168
  debugState.stepResolve = () => {
103
169
  clearTimeout(timer);
104
170
  resolve();
105
171
  };
172
+ debugState.stepReject = (error) => {
173
+ clearTimeout(timer);
174
+ reject(error);
175
+ };
106
176
  const timer = setTimeout(() => {
107
177
  debugState.stepResolve = null;
108
- reject(new Error(`Step timeout after ${STEP_TIMEOUT_MS}ms — the render loop may not be running. ` +
178
+ debugState.stepReject = null;
179
+ // If world.update already started this step, its asynchronous flush is
180
+ // still physically in flight. Leave the guard set so a retry cannot
181
+ // submit another exact step until that work really settles.
182
+ reject(new Error(`Step timeout after ${DEBUG_SYNC_TIMEOUT_MS}ms — the render loop may not be running. ` +
109
183
  `Ensure an XR session is active and the browser tab is visible.`));
110
- }, STEP_TIMEOUT_MS);
184
+ }, DEBUG_SYNC_TIMEOUT_MS);
111
185
  });
112
186
  }
113
187
  return {
@@ -464,9 +538,29 @@ function ecsSetComponent(world, params) {
464
538
  // ---------------------------------------------------------------------------
465
539
  // Module-scoped snapshot storage
466
540
  const snapshots = new Map();
541
+ const DEFAULT_SNAPSHOT_CAPACITY = 2;
542
+ const MAX_SNAPSHOT_CAPACITY = 20;
543
+ let snapshotCapacity = DEFAULT_SNAPSHOT_CAPACITY;
544
+ let nextSnapshotSequence = 0;
545
+ function nextSnapshotLabel() {
546
+ let label;
547
+ do {
548
+ label = `snap-${nextSnapshotSequence++}`;
549
+ } while (snapshots.has(label));
550
+ return label;
551
+ }
467
552
  function ecsSnapshot(world, params) {
468
553
  var _a;
469
- const { label = `snap-${snapshots.size}` } = params;
554
+ const { capacity, label: requestedLabel } = params;
555
+ const label = requestedLabel !== null && requestedLabel !== void 0 ? requestedLabel : nextSnapshotLabel();
556
+ if (capacity !== undefined) {
557
+ if (!Number.isInteger(capacity) ||
558
+ capacity < DEFAULT_SNAPSHOT_CAPACITY ||
559
+ capacity > MAX_SNAPSHOT_CAPACITY) {
560
+ throw new Error(`Snapshot capacity must be an integer from ${DEFAULT_SNAPSHOT_CAPACITY} to ${MAX_SNAPSHOT_CAPACITY}.`);
561
+ }
562
+ snapshotCapacity = capacity;
563
+ }
470
564
  // See comment in ecsFindEntities — indexLookup is internal to ELICS.
471
565
  const lookup = world.entityManager.indexLookup;
472
566
  const entities = [];
@@ -498,17 +592,26 @@ function ecsSnapshot(world, params) {
498
592
  frame: debugState.frameCount,
499
593
  entities,
500
594
  };
501
- // Evict oldest if at capacity
502
- if (snapshots.size >= 2 && !snapshots.has(label)) {
595
+ // Replacing a named snapshot should make the new capture the most recent
596
+ // entry. Map.set() preserves an existing key's insertion order, which could
597
+ // otherwise evict the snapshot we just wrote when capacity is reduced.
598
+ snapshots.delete(label);
599
+ snapshots.set(label, snapshot);
600
+ // Map insertion order makes retention deterministic: oldest labels leave
601
+ // first and replaced labels move to the newest position.
602
+ const evictedSnapshots = [];
603
+ while (snapshots.size > snapshotCapacity) {
503
604
  const oldest = snapshots.keys().next().value;
504
605
  snapshots.delete(oldest);
606
+ evictedSnapshots.push(oldest);
505
607
  }
506
- snapshots.set(label, snapshot);
507
608
  return {
508
609
  label,
509
610
  entityCount: entities.length,
510
611
  componentCount,
511
612
  storedSnapshots: Array.from(snapshots.keys()),
613
+ snapshotCapacity,
614
+ evictedSnapshots,
512
615
  };
513
616
  }
514
617
  function ecsDiff(_world, params) {