@iwsdk/core 1.0.0-rc.0 → 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 (132) hide show
  1. package/dist/asset/asset-manager.js.map +1 -1
  2. package/dist/asset/cache-manager.js.map +1 -1
  3. package/dist/asset/loaders/audio-loader.js.map +1 -1
  4. package/dist/asset/loaders/cached-asset-load.js.map +1 -1
  5. package/dist/asset/loaders/gltf-loader.js.map +1 -1
  6. package/dist/asset/loaders/hdr-texture-loader.js.map +1 -1
  7. package/dist/asset/loaders/texture-loader.js.map +1 -1
  8. package/dist/asset/loaders/uikitml-loader.js.map +1 -1
  9. package/dist/audio/audio-pool.js.map +1 -1
  10. package/dist/audio/audio-system.js.map +1 -1
  11. package/dist/audio/audio-utils.js.map +1 -1
  12. package/dist/audio/audio.js.map +1 -1
  13. package/dist/camera/camera-source.js.map +1 -1
  14. package/dist/camera/camera-system.js.map +1 -1
  15. package/dist/camera/camera-utils.js.map +1 -1
  16. package/dist/camera/types.js.map +1 -1
  17. package/dist/depth/depth-occludable.js.map +1 -1
  18. package/dist/depth/depth-sensing-system.js.map +1 -1
  19. package/dist/depth/depth-textures.js.map +1 -1
  20. package/dist/depth/occlusion/preprocessing-pass.js.map +1 -1
  21. package/dist/depth/occlusion/preprocessing-shader.glsl.js.map +1 -1
  22. package/dist/ecs/builtin-components.js.map +1 -1
  23. package/dist/ecs/component-editor-metadata.js.map +1 -1
  24. package/dist/ecs/component-manifest.js.map +1 -1
  25. package/dist/ecs/entity.js.map +1 -1
  26. package/dist/ecs/system.js.map +1 -1
  27. package/dist/ecs/world.js.map +1 -1
  28. package/dist/environment/dome-gradient.js.map +1 -1
  29. package/dist/environment/dome-texture.js.map +1 -1
  30. package/dist/environment/environment-system.js.map +1 -1
  31. package/dist/environment/gradient-environment.js.map +1 -1
  32. package/dist/environment/ibl-gradient.js.map +1 -1
  33. package/dist/environment/ibl-texture.js.map +1 -1
  34. package/dist/environment/scene-ar-environment.js.map +1 -1
  35. package/dist/environment-raycast/environment-raycast.js.map +1 -1
  36. package/dist/environment-raycast/raycast-target.js.map +1 -1
  37. package/dist/grab/distance-grabbable.js.map +1 -1
  38. package/dist/grab/grab-helpers.js.map +1 -1
  39. package/dist/grab/grab-system.js.map +1 -1
  40. package/dist/grab/grab-warnings.js.map +1 -1
  41. package/dist/grab/grabbed.js.map +1 -1
  42. package/dist/grab/handles.js.map +1 -1
  43. package/dist/grab/index.js.map +1 -1
  44. package/dist/grab/one-hand-grabbable.js.map +1 -1
  45. package/dist/grab/pointer-events-patch.js.map +1 -1
  46. package/dist/grab/two-hands-grabbable.js.map +1 -1
  47. package/dist/index.js +3 -3
  48. package/dist/index.js.map +1 -1
  49. package/dist/init/browser-camera.js.map +1 -1
  50. package/dist/init/player-camera.js.map +1 -1
  51. package/dist/init/session-grant.js.map +1 -1
  52. package/dist/init/world-initializer.js +2 -3
  53. package/dist/init/world-initializer.js.map +1 -1
  54. package/dist/init/xr.js.map +1 -1
  55. package/dist/input/canvas-pointer-system.js.map +1 -1
  56. package/dist/input/input-actions.js.map +1 -1
  57. package/dist/input/input-manager.js.map +1 -1
  58. package/dist/input/input-system.js.map +1 -1
  59. package/dist/input/state-tags.js.map +1 -1
  60. package/dist/input/stateful-browser-gamepad.js.map +1 -1
  61. package/dist/input/stateful-keyboard.js.map +1 -1
  62. package/dist/layers/xr-cylinder-layer.js.map +1 -1
  63. package/dist/layers/xr-layer-init.js.map +1 -1
  64. package/dist/layers/xr-layer-state.js.map +1 -1
  65. package/dist/layers/xr-layer-system.js.map +1 -1
  66. package/dist/layers/xr-layer-transform.js.map +1 -1
  67. package/dist/layers/xr-quad-layer.js.map +1 -1
  68. package/dist/level/level-component-applier.js.map +1 -1
  69. package/dist/level/level-player-rig.js.map +1 -1
  70. package/dist/level/level-root.js.map +1 -1
  71. package/dist/level/level-scene-environment.js.map +1 -1
  72. package/dist/level/level-scene-json-importer.js.map +1 -1
  73. package/dist/level/level-scene-material.js.map +1 -1
  74. package/dist/level/level-scene-object.js.map +1 -1
  75. package/dist/level/level-scene-primitive.js.map +1 -1
  76. package/dist/level/level-system.js.map +1 -1
  77. package/dist/level/level-tag.js.map +1 -1
  78. package/dist/lighting/light-binding.js.map +1 -1
  79. package/dist/lighting/light-components.js.map +1 -1
  80. package/dist/lighting/light-system.js.map +1 -1
  81. package/dist/locomotion/geometries/beveled-cylinder.js.map +1 -1
  82. package/dist/locomotion/locomotion-environment.js.map +1 -1
  83. package/dist/locomotion/locomotion-input-provider.js.map +1 -1
  84. package/dist/locomotion/locomotion.js.map +1 -1
  85. package/dist/locomotion/materials/line.js.map +1 -1
  86. package/dist/locomotion/slide.js.map +1 -1
  87. package/dist/locomotion/teleport.js.map +1 -1
  88. package/dist/locomotion/turn.js.map +1 -1
  89. package/dist/mcp/ecs-debug-tools.js.map +1 -1
  90. package/dist/mcp/mcp-runtime.js.map +1 -1
  91. package/dist/mcp/scene-tools.js.map +1 -1
  92. package/dist/mcp/ui-debug-tools.js.map +1 -1
  93. package/dist/physics/physics-runtime.js.map +1 -1
  94. package/dist/physics/physics-system.js.map +1 -1
  95. package/dist/physics/physics-transport.js.map +1 -1
  96. package/dist/physics/physics-worker-protocol.js.map +1 -1
  97. package/dist/physics/physics-worker-utils.js.map +1 -1
  98. package/dist/physics/physics-worker.js.map +1 -1
  99. package/dist/physics/physicsBody.js.map +1 -1
  100. package/dist/physics/physicsManipulation.js.map +1 -1
  101. package/dist/physics/physicsShape.js.map +1 -1
  102. package/dist/physics/utils.js.map +1 -1
  103. package/dist/project/normalize.js.map +1 -1
  104. package/dist/project/paths.js.map +1 -1
  105. package/dist/project/types.js.map +1 -1
  106. package/dist/project/validation.js.map +1 -1
  107. package/dist/runtime/three.js.map +1 -1
  108. package/dist/scene-understanding/anchor.js.map +1 -1
  109. package/dist/scene-understanding/mesh.js.map +1 -1
  110. package/dist/scene-understanding/plane.js.map +1 -1
  111. package/dist/scene-understanding/scene-understanding-system.js.map +1 -1
  112. package/dist/transform/synced-euler.js.map +1 -1
  113. package/dist/transform/synced-quaternion.js.map +1 -1
  114. package/dist/transform/synced-vector3.js.map +1 -1
  115. package/dist/transform/transform-component.js.map +1 -1
  116. package/dist/transform/transform-utils.js.map +1 -1
  117. package/dist/transform/transform.js.map +1 -1
  118. package/dist/ui/document.js.map +1 -1
  119. package/dist/ui/follow-component.js.map +1 -1
  120. package/dist/ui/follow.js.map +1 -1
  121. package/dist/ui/panel-components.js.map +1 -1
  122. package/dist/ui/screenspace-component.js.map +1 -1
  123. package/dist/ui/screenspace.js.map +1 -1
  124. package/dist/ui/ui.js.map +1 -1
  125. package/dist/ui/uikitml-asset.js.map +1 -1
  126. package/dist/ui/uikitml.js.map +1 -1
  127. package/dist/version.d.ts +1 -1
  128. package/dist/version.js +1 -1
  129. package/dist/version.js.map +1 -1
  130. package/dist/visibility/visibility-component.js.map +1 -1
  131. package/dist/visibility/visibility.js.map +1 -1
  132. package/package.json +4 -4
@@ -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":"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"}
@@ -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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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ecs-debug-tools.js","sources":["../../src/mcp/ecs-debug-tools.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ecs-debug-tools.js","sources":["../../src/mcp/ecs-debug-tools.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 { ComponentRegistry } from 'elics';\nimport type { AnyComponent } from 'elics';\nimport type { World } from '../ecs/world.js';\n\n// ---------------------------------------------------------------------------\n// Debug state (module-scoped singleton — only one World per page)\n// ---------------------------------------------------------------------------\n\nconst debugState = {\n paused: false,\n stepResolve: null as (() => void) | null,\n stepReject: null as ((error: Error) => void) | null,\n stepInFlight: false,\n stepDelta: 1 / 72,\n frameCount: 0,\n pausedAtFrame: 0,\n};\n\ninterface DebugFrameSynchronizer {\n prepareDebugFrame?(delta: number): void;\n flushDebugFrame(): Promise<void>;\n}\n\nconst DEBUG_SYNC_TIMEOUT_MS = 5000;\n\nfunction isDebugFrameSynchronizer(\n system: unknown,\n): system is DebugFrameSynchronizer {\n return (\n typeof system === 'object' &&\n system !== null &&\n 'flushDebugFrame' in system &&\n typeof system.flushDebugFrame === 'function'\n );\n}\n\nasync function flushDebugSystems(world: World): Promise<void> {\n await Promise.all(\n world\n .getSystems()\n .map((system) =>\n isDebugFrameSynchronizer(system)\n ? system.flushDebugFrame()\n : Promise.resolve(),\n ),\n );\n}\n\nfunction prepareDebugSystems(world: World, delta: number): void {\n for (const system of world.getSystems()) {\n if (isDebugFrameSynchronizer(system)) {\n system.prepareDebugFrame?.(delta);\n }\n }\n}\n\nasync function flushDebugSystemsWithTimeout(\n world: World,\n operation: string,\n): Promise<void> {\n let timer: ReturnType<typeof setTimeout> | undefined;\n try {\n await Promise.race([\n flushDebugSystems(world),\n new Promise<never>((_, reject) => {\n timer = setTimeout(() => {\n reject(\n new Error(\n `${operation} timed out after ${DEBUG_SYNC_TIMEOUT_MS}ms while waiting for asynchronous systems to settle`,\n ),\n );\n }, DEBUG_SYNC_TIMEOUT_MS);\n }),\n ]);\n } finally {\n if (timer !== undefined) {\n clearTimeout(timer);\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Install debug hook — monkey-patches world.update()\n// ---------------------------------------------------------------------------\n\nlet originalUpdate: ((delta: number, time: number) => void) | null = null;\nlet hookedWorld: World | null = null;\n\nexport function installDebugHook(world: World): void {\n if (hookedWorld === world) {\n return;\n } // already installed\n\n originalUpdate = world.update.bind(world);\n hookedWorld = world;\n\n world.update = (delta: number, time: number): void => {\n debugState.frameCount++;\n\n if (debugState.paused && !debugState.stepResolve) {\n // Skip ECS updates; renderer.render() still runs after this\n return;\n }\n\n if (debugState.paused && debugState.stepResolve) {\n if (debugState.stepInFlight) {\n return;\n }\n // Stepping — use fixed timestep\n const resolve = debugState.stepResolve;\n const reject = debugState.stepReject;\n debugState.stepResolve = null;\n debugState.stepReject = null;\n debugState.stepInFlight = true;\n try {\n prepareDebugSystems(world, debugState.stepDelta);\n originalUpdate!(debugState.stepDelta, time);\n } catch (error) {\n debugState.stepInFlight = false;\n reject?.(error instanceof Error ? error : new Error(String(error)));\n return;\n }\n void flushDebugSystems(world).then(\n () => {\n debugState.stepInFlight = false;\n resolve();\n },\n (error) => {\n debugState.stepInFlight = false;\n reject?.(error instanceof Error ? error : new Error(String(error)));\n },\n );\n return;\n }\n\n originalUpdate!(delta, time);\n };\n}\n\n// ---------------------------------------------------------------------------\n// ecs_pause\n// ---------------------------------------------------------------------------\n\nexport interface EcsPauseResult {\n paused: boolean;\n frame: number;\n systemCount: number;\n}\n\nexport async function ecsPause(world: World): Promise<EcsPauseResult> {\n debugState.paused = true;\n debugState.pausedAtFrame = debugState.frameCount;\n await flushDebugSystemsWithTimeout(world, 'Pause');\n return {\n paused: true,\n frame: debugState.frameCount,\n systemCount: world.getSystems().length,\n };\n}\n\n// ---------------------------------------------------------------------------\n// ecs_resume\n// ---------------------------------------------------------------------------\n\nexport interface EcsResumeResult {\n paused: boolean;\n framesWhilePaused: number;\n}\n\nlet resumeClampInstalled = false;\n\nexport function ecsResume(world: World): EcsResumeResult {\n const framesWhilePaused = debugState.frameCount - debugState.pausedAtFrame;\n debugState.paused = false;\n debugState.stepResolve = null;\n debugState.stepReject = null;\n // Keep stepInFlight set until its asynchronous system flush actually\n // settles. Normal updates can resume, but a later debugger step must not\n // overlap the abandoned exchange.\n\n // Cap first real delta after resume to avoid physics explosions\n if (!resumeClampInstalled && originalUpdate) {\n const currentUpdate = world.update;\n let clampNext = true;\n world.update = (delta: number, time: number): void => {\n if (clampNext) {\n clampNext = false;\n const maxDelta = 1 / 30;\n currentUpdate(Math.min(delta, maxDelta), time);\n // Restore the regular patched update\n world.update = currentUpdate;\n return;\n }\n currentUpdate(delta, time);\n };\n // Only need to do this once per resume\n resumeClampInstalled = true;\n // Reset so the next resume can install again\n setTimeout(() => {\n resumeClampInstalled = false;\n }, 0);\n }\n\n return {\n paused: false,\n framesWhilePaused,\n };\n}\n\n// ---------------------------------------------------------------------------\n// ecs_step\n// ---------------------------------------------------------------------------\n\nexport interface EcsStepParams {\n count?: number;\n delta?: number;\n}\n\nexport interface EcsStepResult {\n framesAdvanced: number;\n totalFrame: number;\n}\n\nexport async function ecsStep(\n _world: World,\n params: Record<string, unknown>,\n): Promise<EcsStepResult> {\n const { count = 1, delta = 1 / 72 } = params as EcsStepParams;\n\n if (!debugState.paused) {\n throw new Error(\n 'Cannot step when ECS is not paused. Call ecs_pause first.',\n );\n }\n\n const frameCount = Math.max(1, Math.min(120, Math.round(count)));\n debugState.stepDelta = delta;\n\n // Per-step timeout: if the render loop isn't running (tab backgrounded,\n // no active XR session, page hidden), the resolve callback from\n // world.update() never fires. A 5s timeout per step prevents the MCP\n // call from hanging indefinitely.\n for (let i = 0; i < frameCount; i++) {\n await new Promise<void>((resolve, reject) => {\n debugState.stepResolve = () => {\n clearTimeout(timer);\n resolve();\n };\n debugState.stepReject = (error) => {\n clearTimeout(timer);\n reject(error);\n };\n const timer = setTimeout(() => {\n debugState.stepResolve = null;\n debugState.stepReject = null;\n // If world.update already started this step, its asynchronous flush is\n // still physically in flight. Leave the guard set so a retry cannot\n // submit another exact step until that work really settles.\n reject(\n new Error(\n `Step timeout after ${DEBUG_SYNC_TIMEOUT_MS}ms — the render loop may not be running. ` +\n `Ensure an XR session is active and the browser tab is visible.`,\n ),\n );\n }, DEBUG_SYNC_TIMEOUT_MS);\n });\n }\n\n return {\n framesAdvanced: frameCount,\n totalFrame: debugState.frameCount,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Component serialization helpers\n// ---------------------------------------------------------------------------\n\nconst VECTOR_TYPES = new Set(['Vec2', 'Vec3', 'Vec4', 'Color']);\nconst MAX_STRING_LENGTH = 200;\nconst MAX_DEPTH = 3;\nconst MAX_TYPED_ARRAY_ELEMENTS = 16;\n\nfunction safeSerialize(\n value: unknown,\n depth: number = 0,\n seen: WeakSet<object> = new WeakSet(),\n): unknown {\n if (value === null || value === undefined) {\n return value;\n }\n\n const type = typeof value;\n if (type === 'number' || type === 'boolean') {\n return value;\n }\n if (type === 'string') {\n return (value as string).length > MAX_STRING_LENGTH\n ? (value as string).slice(0, MAX_STRING_LENGTH) + '...'\n : value;\n }\n if (type === 'function') {\n return '<function>';\n }\n\n if (type !== 'object') {\n return String(value);\n }\n\n const obj = value as Record<string, unknown>;\n\n // Circular reference check\n if (seen.has(obj)) {\n return '<circular>';\n }\n seen.add(obj);\n\n // Depth limit\n if (depth >= MAX_DEPTH) {\n return '<object>';\n }\n\n // TypedArray\n if (ArrayBuffer.isView(obj) && 'length' in obj) {\n const arr = obj as unknown as ArrayLike<number>;\n const len = Math.min(arr.length, MAX_TYPED_ARRAY_ELEMENTS);\n const result = Array.from({ length: len }, (_, i) => arr[i]);\n if (arr.length > MAX_TYPED_ARRAY_ELEMENTS) {\n return { values: result, truncated: true, totalLength: arr.length };\n }\n return result;\n }\n\n // Array\n if (Array.isArray(obj)) {\n return obj\n .slice(0, MAX_TYPED_ARRAY_ELEMENTS)\n .map((item) => safeSerialize(item, depth + 1, seen));\n }\n\n // Three.js sentinel detection — return type tag instead of full object\n if ((obj as any).isObject3D) {\n return `<Object3D:${(obj as any).name || (obj as any).type || 'unnamed'}>`;\n }\n if ((obj as any).isMaterial) {\n return `<Material:${(obj as any).type || 'unknown'}>`;\n }\n if ((obj as any).isTexture) {\n return `<Texture:${(obj as any).name || 'unnamed'}>`;\n }\n if ((obj as any).isBufferGeometry) {\n return `<BufferGeometry>`;\n }\n\n // Plain object\n const result: Record<string, unknown> = {};\n const keys = Object.keys(obj);\n for (const key of keys.slice(0, 20)) {\n result[key] = safeSerialize(obj[key], depth + 1, seen);\n }\n if (keys.length > 20) {\n result['...'] = `${keys.length - 20} more keys`;\n }\n return result;\n}\n\nfunction serializeComponentValue(\n entity: import('elics').Entity,\n component: AnyComponent,\n key: string,\n schemaField: { type: string },\n): unknown {\n const type = schemaField.type;\n\n if (VECTOR_TYPES.has(type)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return Array.from((entity as any).getVectorView(component, key));\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const raw = (entity as any).getValue(component, key);\n\n if (type === 'Entity') {\n if (raw === null) {\n return null;\n }\n const ref = raw as import('elics').Entity;\n return {\n entityIndex: ref.index,\n name: ref.object3D?.name || undefined,\n };\n }\n\n if (type === 'Object') {\n return safeSerialize(raw);\n }\n\n return raw;\n}\n\n// ---------------------------------------------------------------------------\n// ecs_query_entity\n// ---------------------------------------------------------------------------\n\nexport interface EcsQueryEntityParams {\n entityIndex: number;\n components?: string[];\n}\n\nexport interface ComponentData {\n componentId: string;\n description?: string;\n values: Record<string, unknown>;\n}\n\nexport interface EcsQueryEntityResult {\n entityIndex: number;\n active: boolean;\n name?: string;\n components: ComponentData[];\n}\n\nexport function ecsQueryEntity(\n world: World,\n params: Record<string, unknown>,\n): EcsQueryEntityResult {\n const { entityIndex, components } = params as unknown as EcsQueryEntityParams;\n\n if (entityIndex === undefined || entityIndex === null) {\n throw new Error(\n 'entityIndex is required. Use get_scene_hierarchy or ecs_find_entities to discover entity indices.',\n );\n }\n\n const entity = world.entityManager.getEntityByIndex(entityIndex);\n if (!entity) {\n throw new Error(\n `Entity ${entityIndex} not found or has been destroyed. Use get_scene_hierarchy or ecs_find_entities to find active entities.`,\n );\n }\n\n const entityComponents = entity.getComponents();\n\n // Filter to requested components if specified\n let targetComponents = entityComponents;\n if (components && components.length > 0) {\n const filterSet = new Set(components);\n targetComponents = entityComponents.filter((c) => filterSet.has(c.id));\n }\n\n const componentDataList: ComponentData[] = targetComponents.map(\n (component) => {\n const values: Record<string, unknown> = {};\n const schema = component.schema;\n\n for (const key of Object.keys(schema)) {\n values[key] = serializeComponentValue(\n entity,\n component,\n key,\n schema[key],\n );\n }\n\n return {\n componentId: component.id,\n description: component.description,\n values,\n };\n },\n );\n\n return {\n entityIndex: entity.index,\n active: entity.active,\n name: entity.object3D?.name || undefined,\n components: componentDataList,\n };\n}\n\n// ---------------------------------------------------------------------------\n// ecs_find_entities\n// ---------------------------------------------------------------------------\n\nexport interface EcsFindEntitiesParams {\n withComponents?: string[];\n withoutComponents?: string[];\n namePattern?: string;\n limit?: number;\n}\n\nexport interface EntitySummary {\n entityIndex: number;\n name?: string;\n componentIds: string[];\n}\n\nexport interface EcsFindEntitiesResult {\n entities: EntitySummary[];\n total: number;\n limited: boolean;\n}\n\nexport function ecsFindEntities(\n world: World,\n params: Record<string, unknown>,\n): EcsFindEntitiesResult {\n const {\n withComponents,\n withoutComponents,\n namePattern,\n limit = 50,\n } = params as EcsFindEntitiesParams;\n\n // Resolve component names to component objects\n const requiredComponents: AnyComponent[] = [];\n if (withComponents) {\n for (const name of withComponents) {\n const comp = ComponentRegistry.getById(name);\n if (!comp) {\n throw new Error(\n `Component '${name}' not found in registry. Check the component ID.`,\n );\n }\n requiredComponents.push(comp);\n }\n }\n\n const excludedComponents: AnyComponent[] = [];\n if (withoutComponents) {\n for (const name of withoutComponents) {\n const comp = ComponentRegistry.getById(name);\n if (!comp) {\n throw new Error(\n `Component '${name}' not found in registry. Check the component ID.`,\n );\n }\n excludedComponents.push(comp);\n }\n }\n\n let nameRegex: RegExp | null = null;\n if (namePattern) {\n nameRegex = new RegExp(namePattern, 'i');\n }\n\n const maxResults = Math.max(1, Math.min(50, limit));\n const matches: EntitySummary[] = [];\n\n // indexLookup is internal to ELICS (not part of the public API). If an\n // iteration API becomes public, migrate to that instead. For now, direct\n // access is the only way to enumerate all live entities efficiently.\n const lookup = (world.entityManager as any).indexLookup as (\n | import('elics').Entity\n | null\n )[];\n\n for (let i = 0; i < lookup.length; i++) {\n const entity = lookup[i];\n if (!entity || !entity.active) {\n continue;\n }\n\n // Check required components\n let match = true;\n for (const comp of requiredComponents) {\n if (!entityHasDebugComponent(entity, comp)) {\n match = false;\n break;\n }\n }\n if (!match) {\n continue;\n }\n\n // Check excluded components\n for (const comp of excludedComponents) {\n if (entityHasDebugComponent(entity, comp)) {\n match = false;\n break;\n }\n }\n if (!match) {\n continue;\n }\n\n // Check name pattern\n if (nameRegex) {\n const name = entity.object3D?.name;\n if (!name || !nameRegex.test(name)) {\n continue;\n }\n }\n\n const componentIds = entity.getComponents().map((c: AnyComponent) => c.id);\n matches.push({\n entityIndex: entity.index,\n name: entity.object3D?.name || undefined,\n componentIds,\n });\n }\n\n const totalMatches = matches.length;\n const results = matches\n .sort((a, b) => getEntityDebugSortRank(a) - getEntityDebugSortRank(b))\n .slice(0, maxResults);\n\n return {\n entities: results,\n total: totalMatches,\n limited: totalMatches > maxResults,\n };\n}\n\nfunction entityHasDebugComponent(\n entity: import('elics').Entity,\n component: AnyComponent,\n): boolean {\n if (component.bitmask != null) {\n return entity.hasComponent(component);\n }\n return entity.getComponents().some((entry: AnyComponent) => {\n return entry === component || entry.id === component.id;\n });\n}\n\nfunction getEntityDebugSortRank(entity: EntitySummary): number {\n // Keep infrastructure roots discoverable but list mutable level content first.\n // Tools and agents often pick the first match for quick probes; LevelRoot is\n // intentionally reset to identity every frame by LevelSystem.\n if (entity.componentIds.includes('LevelRoot')) {\n return 1;\n }\n return 0;\n}\n\n// ---------------------------------------------------------------------------\n// ecs_list_systems\n// ---------------------------------------------------------------------------\n\nexport interface SystemInfo {\n name: string;\n index: number;\n priority: number;\n isPaused: boolean;\n configKeys: string[];\n queryNames: string[];\n entityCounts: Record<string, number>;\n}\n\nexport interface EcsListSystemsResult {\n systems: SystemInfo[];\n total: number;\n}\n\nexport function ecsListSystems(world: World): EcsListSystemsResult {\n const systems = world.getSystems();\n const result: SystemInfo[] = systems.map((system, index) => {\n const queryNames = Object.keys(system.queries || {});\n const entityCounts: Record<string, number> = {};\n for (const qName of queryNames) {\n entityCounts[qName] = system.queries[qName]?.entities?.size ?? 0;\n }\n return {\n name: system.constructor.name,\n index,\n priority: system.priority,\n isPaused: system.isPaused,\n configKeys: Object.keys(system.config || {}),\n queryNames,\n entityCounts,\n };\n });\n return { systems: result, total: result.length };\n}\n\n// ---------------------------------------------------------------------------\n// ecs_list_components\n// ---------------------------------------------------------------------------\n\nexport interface ComponentInfo {\n id: string;\n description?: string;\n fields: Record<string, { type: string; default: unknown }>;\n}\n\nexport interface EcsListComponentsResult {\n components: ComponentInfo[];\n total: number;\n}\n\nexport function ecsListComponents(): EcsListComponentsResult {\n const all = ComponentRegistry.getAllComponents();\n const result: ComponentInfo[] = all.map((comp) => {\n const fields: Record<string, { type: string; default: unknown }> = {};\n for (const [key, field] of Object.entries(comp.schema)) {\n fields[key] = {\n type: (field as any).type,\n default: (field as any).default,\n };\n }\n return {\n id: comp.id,\n description: comp.description,\n fields,\n };\n });\n return { components: result, total: result.length };\n}\n\n// ---------------------------------------------------------------------------\n// ecs_toggle_system\n// ---------------------------------------------------------------------------\n\nexport interface EcsToggleSystemParams {\n name: string;\n paused?: boolean;\n}\n\nexport interface EcsToggleSystemResult {\n name: string;\n isPaused: boolean;\n}\n\nexport function ecsToggleSystem(\n world: World,\n params: Record<string, unknown>,\n): EcsToggleSystemResult {\n const { name, paused } = params as unknown as EcsToggleSystemParams;\n const systems = world.getSystems();\n const system = systems.find((s) => s.constructor.name === name);\n if (!system) {\n const available = systems.map((s) => s.constructor.name).join(', ');\n throw new Error(\n `System '${name}' not found. Available systems: ${available}`,\n );\n }\n const targetPaused = paused !== undefined ? paused : !system.isPaused;\n if (targetPaused) {\n system.stop();\n } else {\n system.play();\n }\n return { name: system.constructor.name, isPaused: system.isPaused };\n}\n\n// ---------------------------------------------------------------------------\n// ecs_set_component\n// ---------------------------------------------------------------------------\n\nexport interface EcsSetComponentParams {\n entityIndex: number;\n componentId: string;\n field: string;\n value: unknown;\n}\n\nexport interface EcsSetComponentResult {\n entityIndex: number;\n componentId: string;\n field: string;\n previousValue: unknown;\n newValue: unknown;\n}\n\nexport function ecsSetComponent(\n world: World,\n params: Record<string, unknown>,\n): EcsSetComponentResult {\n const { entityIndex, componentId, field, value } =\n params as unknown as EcsSetComponentParams;\n\n const entity = world.entityManager.getEntityByIndex(entityIndex);\n if (!entity) {\n throw new Error(`Entity ${entityIndex} not found.`);\n }\n\n const component = ComponentRegistry.getById(componentId);\n if (!component) {\n throw new Error(`Component '${componentId}' not found in registry.`);\n }\n\n if (!entity.hasComponent(component)) {\n throw new Error(\n `Entity ${entityIndex} does not have component '${componentId}'.`,\n );\n }\n\n const schemaField = component.schema[field];\n if (!schemaField) {\n const available = Object.keys(component.schema).join(', ');\n throw new Error(\n `Field '${field}' not found on '${componentId}'. Available: ${available}`,\n );\n }\n\n // Read previous value using existing serialization helper\n const previousValue = serializeComponentValue(\n entity,\n component,\n field,\n schemaField,\n );\n\n const type = schemaField.type;\n if (VECTOR_TYPES.has(type)) {\n // Vector types: write via getVectorView\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const view = (entity as any).getVectorView(component, field);\n // Value may arrive as a JSON string from MCP clients (e.g. \"[0, 1.2, -1.5]\")\n let arr = value;\n if (typeof arr === 'string') {\n try {\n arr = JSON.parse(arr);\n } catch {\n throw new Error(\n `${type} field '${field}': could not parse value string as JSON array.`,\n );\n }\n }\n if (!Array.isArray(arr) || arr.length !== view.length) {\n throw new Error(\n `${type} field '${field}' requires an array of ${view.length} numbers.`,\n );\n }\n for (let i = 0; i < view.length; i++) {\n view[i] = arr[i];\n }\n } else {\n // Scalar types: use setValue (handles validation, query updates)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (entity as any).setValue(component, field, value);\n }\n\n // Read back new value\n const newValue = serializeComponentValue(\n entity,\n component,\n field,\n schemaField,\n );\n\n return { entityIndex, componentId, field, previousValue, newValue };\n}\n\n// ---------------------------------------------------------------------------\n// ecs_snapshot / ecs_diff\n// ---------------------------------------------------------------------------\n\n// Module-scoped snapshot storage\nconst snapshots = new Map<string, EcsSnapshot>();\nconst DEFAULT_SNAPSHOT_CAPACITY = 2;\nconst MAX_SNAPSHOT_CAPACITY = 20;\nlet snapshotCapacity = DEFAULT_SNAPSHOT_CAPACITY;\nlet nextSnapshotSequence = 0;\n\nfunction nextSnapshotLabel(): string {\n let label: string;\n do {\n label = `snap-${nextSnapshotSequence++}`;\n } while (snapshots.has(label));\n return label;\n}\n\ninterface EntitySnapshot {\n entityIndex: number;\n name?: string;\n components: Record<string, Record<string, unknown>>;\n}\n\nexport interface EcsSnapshot {\n label: string;\n timestamp: number;\n frame: number;\n entities: EntitySnapshot[];\n}\n\nexport interface EcsSnapshotParams {\n label?: string;\n capacity?: number;\n}\n\nexport interface EcsSnapshotResult {\n label: string;\n entityCount: number;\n componentCount: number;\n storedSnapshots: string[];\n snapshotCapacity: number;\n evictedSnapshots: string[];\n}\n\nexport function ecsSnapshot(\n world: World,\n params: Record<string, unknown>,\n): EcsSnapshotResult {\n const { capacity, label: requestedLabel } = params as EcsSnapshotParams;\n const label = requestedLabel ?? nextSnapshotLabel();\n if (capacity !== undefined) {\n if (\n !Number.isInteger(capacity) ||\n capacity < DEFAULT_SNAPSHOT_CAPACITY ||\n capacity > MAX_SNAPSHOT_CAPACITY\n ) {\n throw new Error(\n `Snapshot capacity must be an integer from ${DEFAULT_SNAPSHOT_CAPACITY} to ${MAX_SNAPSHOT_CAPACITY}.`,\n );\n }\n snapshotCapacity = capacity;\n }\n\n // See comment in ecsFindEntities — indexLookup is internal to ELICS.\n const lookup = (world.entityManager as any).indexLookup as (\n | import('elics').Entity\n | null\n )[];\n const entities: EntitySnapshot[] = [];\n let componentCount = 0;\n\n for (let i = 0; i < lookup.length; i++) {\n const entity = lookup[i];\n if (!entity || !entity.active) {\n continue;\n }\n\n const comps = entity.getComponents();\n const components: Record<string, Record<string, unknown>> = {};\n\n for (const comp of comps) {\n const values: Record<string, unknown> = {};\n for (const key of Object.keys(comp.schema)) {\n values[key] = serializeComponentValue(\n entity,\n comp,\n key,\n comp.schema[key],\n );\n }\n components[comp.id] = values;\n componentCount++;\n }\n\n entities.push({\n entityIndex: entity.index,\n name: entity.object3D?.name || undefined,\n components,\n });\n }\n\n const snapshot: EcsSnapshot = {\n label,\n timestamp: performance.now(),\n frame: debugState.frameCount,\n entities,\n };\n\n // Replacing a named snapshot should make the new capture the most recent\n // entry. Map.set() preserves an existing key's insertion order, which could\n // otherwise evict the snapshot we just wrote when capacity is reduced.\n snapshots.delete(label);\n snapshots.set(label, snapshot);\n\n // Map insertion order makes retention deterministic: oldest labels leave\n // first and replaced labels move to the newest position.\n const evictedSnapshots: string[] = [];\n while (snapshots.size > snapshotCapacity) {\n const oldest = snapshots.keys().next().value!;\n snapshots.delete(oldest);\n evictedSnapshots.push(oldest);\n }\n\n return {\n label,\n entityCount: entities.length,\n componentCount,\n storedSnapshots: Array.from(snapshots.keys()),\n snapshotCapacity,\n evictedSnapshots,\n };\n}\n\n// --- ecs_diff ---\n\nexport interface EcsDiffParams {\n from: string;\n to: string;\n}\n\ninterface FieldDiff {\n field: string;\n from: unknown;\n to: unknown;\n}\n\ninterface ComponentDiff {\n componentId: string;\n status: 'changed' | 'added' | 'removed';\n fields?: FieldDiff[];\n}\n\ninterface EntityDiff {\n entityIndex: number;\n name?: string;\n status: 'changed' | 'added' | 'removed';\n components?: ComponentDiff[];\n}\n\nexport interface EcsDiffResult {\n from: string;\n to: string;\n frameDelta: number;\n timeDelta: number;\n entities: EntityDiff[];\n summary: { added: number; removed: number; changed: number };\n}\n\nexport function ecsDiff(\n _world: World,\n params: Record<string, unknown>,\n): EcsDiffResult {\n const { from, to } = params as unknown as EcsDiffParams;\n\n const snapFrom = snapshots.get(from);\n const snapTo = snapshots.get(to);\n if (!snapFrom) {\n throw new Error(\n `Snapshot '${from}' not found. Stored: ${Array.from(snapshots.keys()).join(', ')}`,\n );\n }\n if (!snapTo) {\n throw new Error(\n `Snapshot '${to}' not found. Stored: ${Array.from(snapshots.keys()).join(', ')}`,\n );\n }\n\n // Index by entityIndex\n const fromMap = new Map(snapFrom.entities.map((e) => [e.entityIndex, e]));\n const toMap = new Map(snapTo.entities.map((e) => [e.entityIndex, e]));\n\n const diffs: EntityDiff[] = [];\n let added = 0,\n removed = 0,\n changed = 0;\n\n // Check removed + changed\n for (const [idx, fromEntity] of fromMap) {\n const toEntity = toMap.get(idx);\n if (!toEntity) {\n diffs.push({\n entityIndex: idx,\n name: fromEntity.name,\n status: 'removed',\n });\n removed++;\n continue;\n }\n // Diff components\n const compDiffs: ComponentDiff[] = [];\n const allCompIds = new Set([\n ...Object.keys(fromEntity.components),\n ...Object.keys(toEntity.components),\n ]);\n for (const compId of allCompIds) {\n const fromComp = fromEntity.components[compId];\n const toComp = toEntity.components[compId];\n if (!fromComp) {\n compDiffs.push({ componentId: compId, status: 'added' });\n continue;\n }\n if (!toComp) {\n compDiffs.push({ componentId: compId, status: 'removed' });\n continue;\n }\n // Diff fields\n const fieldDiffs: FieldDiff[] = [];\n for (const field of Object.keys(fromComp)) {\n const fv = JSON.stringify(fromComp[field]);\n const tv = JSON.stringify(toComp[field]);\n if (fv !== tv) {\n fieldDiffs.push({ field, from: fromComp[field], to: toComp[field] });\n }\n }\n // Check for fields added in toComp\n for (const field of Object.keys(toComp)) {\n if (!(field in fromComp)) {\n fieldDiffs.push({\n field,\n from: undefined,\n to: toComp[field],\n });\n }\n }\n if (fieldDiffs.length > 0) {\n compDiffs.push({\n componentId: compId,\n status: 'changed',\n fields: fieldDiffs,\n });\n }\n }\n if (compDiffs.length > 0) {\n diffs.push({\n entityIndex: idx,\n name: fromEntity.name,\n status: 'changed',\n components: compDiffs,\n });\n changed++;\n }\n }\n\n // Check added\n for (const [idx, toEntity] of toMap) {\n if (!fromMap.has(idx)) {\n diffs.push({\n entityIndex: idx,\n name: toEntity.name,\n status: 'added',\n });\n added++;\n }\n }\n\n return {\n from,\n to,\n frameDelta: snapTo.frame - snapFrom.frame,\n timeDelta: snapTo.timestamp - snapFrom.timestamp,\n entities: diffs,\n summary: { added, removed, changed },\n };\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"mcp-runtime.js","sources":["../../src/mcp/mcp-runtime.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mcp-runtime.js","sources":["../../src/mcp/mcp-runtime.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 {\n installDebugHook,\n ecsPause,\n ecsResume,\n ecsStep,\n ecsQueryEntity,\n ecsFindEntities,\n ecsListSystems,\n ecsListComponents,\n ecsToggleSystem,\n ecsSetComponent,\n ecsSnapshot,\n ecsDiff,\n} from './ecs-debug-tools.js';\nimport {\n getObjectTransform,\n getRenderStats,\n getSceneHierarchy,\n} from './scene-tools.js';\nimport { uiInspect } from './ui-debug-tools.js';\n\nconst SUPPORTED_METHODS = [\n 'get_scene_hierarchy',\n 'get_object_transform',\n 'get_render_stats',\n 'ecs_pause',\n 'ecs_resume',\n 'ecs_step',\n 'ecs_query_entity',\n 'ecs_find_entities',\n 'ecs_list_systems',\n 'ecs_list_components',\n 'ecs_toggle_system',\n 'ecs_set_component',\n 'ecs_snapshot',\n 'ecs_diff',\n 'ui_inspect',\n] as const;\ntype SupportedMethod = (typeof SUPPORTED_METHODS)[number];\n\n/**\n * MCP Runtime for IWSDK that provides framework-specific tools.\n * This is set on window.FRAMEWORK_MCP_RUNTIME during World.create()\n * for the vite-plugin-dev to route requests to.\n *\n * @category Runtime\n */\nexport class MCPRuntime {\n constructor(private world: World) {\n installDebugHook(world);\n }\n\n /** Release native XR before the development bridge navigates this page. */\n async prepareForReload(): Promise<void> {\n // Three adopts the session before World finishes reference-space setup.\n // Reload can arrive during that interval as well as after full adoption.\n const session = this.world.session ?? this.world.renderer.xr.getSession();\n if (!session) {\n return;\n }\n // Quest resolves end() before delivering the end event. Navigation must\n // wait for that event so the renderer and compositor can release XR.\n await new Promise<void>((resolve, reject) => {\n const finish = (error?: unknown) => {\n clearTimeout(timer);\n session.removeEventListener('end', ended);\n if (error !== undefined) {\n reject(error);\n } else {\n resolve();\n }\n };\n const ended = () => finish();\n const timer = setTimeout(\n () =>\n finish(new Error('Native XR did not finish ending before reload.')),\n 10000,\n );\n session.addEventListener('end', ended, { once: true });\n void Promise.resolve()\n .then(() => session.end())\n .catch((error) => {\n // The app, device UI, or another command may already be ending XR.\n // Chromium rejects a second end(); the pending end event remains\n // the teardown boundary, with the same deadline as the first call.\n if (error?.name !== 'InvalidStateError') {\n finish(error ?? new Error('Native XR rejected session teardown.'));\n }\n });\n });\n }\n\n /**\n * Returns true if this runtime handles the given method.\n * Used by vite-plugin-dev to route requests appropriately.\n */\n handles(method: string): boolean {\n return SUPPORTED_METHODS.includes(method as SupportedMethod);\n }\n\n /**\n * Dispatch a method call. Returns result or throws an error.\n * @param method - The MCP tool name (e.g., 'get_scene_hierarchy')\n * @param params - Parameters passed to the tool\n * @returns Promise resolving to the tool result\n */\n async dispatch(\n method: string,\n params: Record<string, unknown>,\n ): Promise<unknown> {\n switch (method) {\n case 'get_scene_hierarchy':\n return getSceneHierarchy(this.world, params);\n case 'get_object_transform':\n return getObjectTransform(this.world, params);\n case 'get_render_stats':\n return getRenderStats(this.world);\n case 'ecs_pause':\n return ecsPause(this.world);\n case 'ecs_resume':\n return ecsResume(this.world);\n case 'ecs_step':\n return ecsStep(this.world, params);\n case 'ecs_query_entity':\n return ecsQueryEntity(this.world, params);\n case 'ecs_find_entities':\n return ecsFindEntities(this.world, params);\n case 'ecs_list_systems':\n return ecsListSystems(this.world);\n case 'ecs_list_components':\n return ecsListComponents();\n case 'ecs_toggle_system':\n return ecsToggleSystem(this.world, params);\n case 'ecs_set_component':\n return ecsSetComponent(this.world, params);\n case 'ecs_snapshot':\n return ecsSnapshot(this.world, params);\n case 'ecs_diff':\n return ecsDiff(this.world, params);\n case 'ui_inspect':\n return uiInspect(this.world, params);\n default:\n throw new Error(\n `Unknown IWSDK method '${method}'. Available methods: ${SUPPORTED_METHODS.join(', ')}`,\n );\n }\n }\n}\n"],"names":[],"mappings":"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"}