@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.
- package/README.md +22 -1
- package/dist/asset/asset-manager.d.ts.map +1 -1
- package/dist/asset/asset-manager.js +3 -2
- package/dist/asset/asset-manager.js.map +1 -1
- package/dist/asset/cache-manager.js.map +1 -1
- package/dist/asset/loaders/audio-loader.js.map +1 -1
- package/dist/asset/loaders/cached-asset-load.js.map +1 -1
- package/dist/asset/loaders/gltf-loader.js.map +1 -1
- package/dist/asset/loaders/hdr-texture-loader.js.map +1 -1
- package/dist/asset/loaders/texture-loader.js.map +1 -1
- package/dist/asset/loaders/uikitml-loader.js.map +1 -1
- package/dist/audio/audio-pool.js.map +1 -1
- package/dist/audio/audio-system.js.map +1 -1
- package/dist/audio/audio-utils.js.map +1 -1
- package/dist/audio/audio.js.map +1 -1
- package/dist/camera/camera-source.js.map +1 -1
- package/dist/camera/camera-system.d.ts +7 -3
- package/dist/camera/camera-system.d.ts.map +1 -1
- package/dist/camera/camera-system.js +81 -50
- package/dist/camera/camera-system.js.map +1 -1
- package/dist/camera/camera-utils.d.ts +5 -0
- package/dist/camera/camera-utils.d.ts.map +1 -1
- package/dist/camera/camera-utils.js +8 -1
- package/dist/camera/camera-utils.js.map +1 -1
- package/dist/camera/types.js.map +1 -1
- package/dist/depth/depth-occludable.js.map +1 -1
- package/dist/depth/depth-sensing-system.d.ts +3 -0
- package/dist/depth/depth-sensing-system.d.ts.map +1 -1
- package/dist/depth/depth-sensing-system.js +55 -1
- package/dist/depth/depth-sensing-system.js.map +1 -1
- package/dist/depth/depth-textures.js.map +1 -1
- package/dist/depth/occlusion/preprocessing-pass.js.map +1 -1
- package/dist/depth/occlusion/preprocessing-shader.glsl.js.map +1 -1
- package/dist/ecs/builtin-components.js.map +1 -1
- package/dist/ecs/component-editor-metadata.js.map +1 -1
- package/dist/ecs/component-manifest.js.map +1 -1
- package/dist/ecs/entity.js.map +1 -1
- package/dist/ecs/system.js.map +1 -1
- package/dist/ecs/world.d.ts +2 -0
- package/dist/ecs/world.d.ts.map +1 -1
- package/dist/ecs/world.js +4 -0
- package/dist/ecs/world.js.map +1 -1
- package/dist/environment/dome-gradient.js.map +1 -1
- package/dist/environment/dome-texture.js.map +1 -1
- package/dist/environment/environment-system.js.map +1 -1
- package/dist/environment/gradient-environment.js.map +1 -1
- package/dist/environment/ibl-gradient.js.map +1 -1
- package/dist/environment/ibl-texture.js.map +1 -1
- package/dist/environment/scene-ar-environment.js.map +1 -1
- package/dist/environment-raycast/environment-raycast.js.map +1 -1
- package/dist/environment-raycast/raycast-target.js.map +1 -1
- package/dist/grab/distance-grabbable.d.ts +5 -0
- package/dist/grab/distance-grabbable.d.ts.map +1 -1
- package/dist/grab/distance-grabbable.js +5 -0
- package/dist/grab/distance-grabbable.js.map +1 -1
- package/dist/grab/grab-helpers.js.map +1 -1
- package/dist/grab/grab-system.js.map +1 -1
- package/dist/grab/grab-warnings.js.map +1 -1
- package/dist/grab/grabbed.js.map +1 -1
- package/dist/grab/handles.d.ts +6 -0
- package/dist/grab/handles.d.ts.map +1 -1
- package/dist/grab/handles.js +46 -12
- package/dist/grab/handles.js.map +1 -1
- package/dist/grab/index.js.map +1 -1
- package/dist/grab/one-hand-grabbable.d.ts +5 -0
- package/dist/grab/one-hand-grabbable.d.ts.map +1 -1
- package/dist/grab/one-hand-grabbable.js +5 -0
- package/dist/grab/one-hand-grabbable.js.map +1 -1
- package/dist/grab/pointer-events-patch.js.map +1 -1
- package/dist/grab/two-hands-grabbable.d.ts +5 -0
- package/dist/grab/two-hands-grabbable.d.ts.map +1 -1
- package/dist/grab/two-hands-grabbable.js +5 -0
- package/dist/grab/two-hands-grabbable.js.map +1 -1
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/init/browser-camera.js.map +1 -1
- package/dist/init/index.d.ts +2 -2
- package/dist/init/index.d.ts.map +1 -1
- package/dist/init/player-camera.js.map +1 -1
- package/dist/init/session-grant.d.ts +34 -0
- package/dist/init/session-grant.d.ts.map +1 -0
- package/dist/init/session-grant.js +89 -0
- package/dist/init/session-grant.js.map +1 -0
- package/dist/init/world-initializer.d.ts +87 -4
- package/dist/init/world-initializer.d.ts.map +1 -1
- package/dist/init/world-initializer.js +45 -41
- package/dist/init/world-initializer.js.map +1 -1
- package/dist/init/xr.d.ts +19 -0
- package/dist/init/xr.d.ts.map +1 -1
- package/dist/init/xr.js +136 -41
- package/dist/init/xr.js.map +1 -1
- package/dist/input/canvas-pointer-system.d.ts +2 -0
- package/dist/input/canvas-pointer-system.d.ts.map +1 -1
- package/dist/input/canvas-pointer-system.js +33 -13
- package/dist/input/canvas-pointer-system.js.map +1 -1
- package/dist/input/input-actions.js.map +1 -1
- package/dist/input/input-manager.js.map +1 -1
- package/dist/input/input-system.d.ts.map +1 -1
- package/dist/input/input-system.js +5 -2
- package/dist/input/input-system.js.map +1 -1
- package/dist/input/state-tags.js.map +1 -1
- package/dist/input/stateful-browser-gamepad.js.map +1 -1
- package/dist/input/stateful-keyboard.js.map +1 -1
- package/dist/layers/xr-cylinder-layer.d.ts +2 -1
- package/dist/layers/xr-cylinder-layer.d.ts.map +1 -1
- package/dist/layers/xr-cylinder-layer.js +2 -1
- package/dist/layers/xr-cylinder-layer.js.map +1 -1
- package/dist/layers/xr-layer-init.d.ts +19 -0
- package/dist/layers/xr-layer-init.d.ts.map +1 -0
- package/dist/layers/xr-layer-init.js +20 -0
- package/dist/layers/xr-layer-init.js.map +1 -0
- package/dist/layers/xr-layer-state.js.map +1 -1
- package/dist/layers/xr-layer-system.d.ts +41 -1
- package/dist/layers/xr-layer-system.d.ts.map +1 -1
- package/dist/layers/xr-layer-system.js +506 -132
- package/dist/layers/xr-layer-system.js.map +1 -1
- package/dist/layers/xr-layer-transform.d.ts +18 -0
- package/dist/layers/xr-layer-transform.d.ts.map +1 -0
- package/dist/layers/xr-layer-transform.js +115 -0
- package/dist/layers/xr-layer-transform.js.map +1 -0
- package/dist/layers/xr-quad-layer.d.ts +2 -1
- package/dist/layers/xr-quad-layer.d.ts.map +1 -1
- package/dist/layers/xr-quad-layer.js +2 -1
- package/dist/layers/xr-quad-layer.js.map +1 -1
- package/dist/level/level-component-applier.d.ts +2 -0
- package/dist/level/level-component-applier.d.ts.map +1 -1
- package/dist/level/level-component-applier.js +24 -5
- package/dist/level/level-component-applier.js.map +1 -1
- package/dist/level/level-player-rig.js.map +1 -1
- package/dist/level/level-root.js.map +1 -1
- package/dist/level/level-scene-environment.js.map +1 -1
- package/dist/level/level-scene-json-importer.js.map +1 -1
- package/dist/level/level-scene-material.js.map +1 -1
- package/dist/level/level-scene-object.js.map +1 -1
- package/dist/level/level-scene-primitive.js.map +1 -1
- package/dist/level/level-system.js.map +1 -1
- package/dist/level/level-tag.js.map +1 -1
- package/dist/lighting/light-binding.js.map +1 -1
- package/dist/lighting/light-components.js.map +1 -1
- package/dist/lighting/light-system.js.map +1 -1
- package/dist/locomotion/geometries/beveled-cylinder.js.map +1 -1
- package/dist/locomotion/locomotion-environment.js.map +1 -1
- package/dist/locomotion/locomotion-input-provider.js.map +1 -1
- package/dist/locomotion/locomotion.js.map +1 -1
- package/dist/locomotion/materials/line.js.map +1 -1
- package/dist/locomotion/slide.js.map +1 -1
- package/dist/locomotion/teleport.js.map +1 -1
- package/dist/locomotion/turn.js.map +1 -1
- package/dist/mcp/ecs-debug-tools.d.ts +4 -1
- package/dist/mcp/ecs-debug-tools.d.ts.map +1 -1
- package/dist/mcp/ecs-debug-tools.js +113 -10
- package/dist/mcp/ecs-debug-tools.js.map +1 -1
- package/dist/mcp/index.d.ts +1 -0
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/mcp-runtime.d.ts +2 -0
- package/dist/mcp/mcp-runtime.d.ts.map +1 -1
- package/dist/mcp/mcp-runtime.js +41 -0
- package/dist/mcp/mcp-runtime.js.map +1 -1
- package/dist/mcp/scene-tools.js.map +1 -1
- package/dist/mcp/ui-debug-tools.d.ts +56 -0
- package/dist/mcp/ui-debug-tools.d.ts.map +1 -0
- package/dist/mcp/ui-debug-tools.js +412 -0
- package/dist/mcp/ui-debug-tools.js.map +1 -0
- package/dist/physics/index.js +1 -1
- package/dist/physics/physics-runtime.d.ts +22 -0
- package/dist/physics/physics-runtime.d.ts.map +1 -0
- package/dist/physics/physics-runtime.js +423 -0
- package/dist/physics/physics-runtime.js.map +1 -0
- package/dist/physics/physics-system.d.ts +84 -108
- package/dist/physics/physics-system.d.ts.map +1 -1
- package/dist/physics/physics-system.js +686 -555
- package/dist/physics/physics-system.js.map +1 -1
- package/dist/physics/physics-transport.d.ts +20 -0
- package/dist/physics/physics-transport.d.ts.map +1 -0
- package/dist/physics/physics-transport.js +111 -0
- package/dist/physics/physics-transport.js.map +1 -0
- package/dist/physics/physics-worker-protocol.d.ts +144 -0
- package/dist/physics/physics-worker-protocol.d.ts.map +1 -0
- package/dist/physics/physics-worker-protocol.js +41 -0
- package/dist/physics/physics-worker-protocol.js.map +1 -0
- package/dist/physics/physics-worker-utils.d.ts +8 -0
- package/dist/physics/physics-worker-utils.d.ts.map +1 -0
- package/dist/physics/physics-worker-utils.js +12 -0
- package/dist/physics/physics-worker-utils.js.map +1 -0
- package/dist/physics/physics-worker.d.ts +8 -0
- package/dist/physics/physics-worker.d.ts.map +1 -0
- package/dist/physics/physics-worker.js +66 -0
- package/dist/physics/physics-worker.js.map +1 -0
- package/dist/physics/physicsBody.js.map +1 -1
- package/dist/physics/physicsManipulation.js.map +1 -1
- package/dist/physics/physicsShape.js.map +1 -1
- package/dist/physics/utils.js.map +1 -1
- package/dist/project/normalize.js +7 -1
- package/dist/project/normalize.js.map +1 -1
- package/dist/project/paths.js.map +1 -1
- package/dist/project/types.d.ts +7 -1
- package/dist/project/types.d.ts.map +1 -1
- package/dist/project/types.js.map +1 -1
- package/dist/project/validation.js +36 -2
- package/dist/project/validation.js.map +1 -1
- package/dist/runtime/three.js.map +1 -1
- package/dist/scene-understanding/anchor.js.map +1 -1
- package/dist/scene-understanding/mesh.js.map +1 -1
- package/dist/scene-understanding/plane.js.map +1 -1
- package/dist/scene-understanding/scene-understanding-system.d.ts +42 -6
- package/dist/scene-understanding/scene-understanding-system.d.ts.map +1 -1
- package/dist/scene-understanding/scene-understanding-system.js +391 -106
- package/dist/scene-understanding/scene-understanding-system.js.map +1 -1
- package/dist/schemas/iwsdk-project.v1.schema.json +20 -1
- package/dist/transform/synced-euler.js.map +1 -1
- package/dist/transform/synced-quaternion.js.map +1 -1
- package/dist/transform/synced-vector3.js.map +1 -1
- package/dist/transform/transform-component.js.map +1 -1
- package/dist/transform/transform-utils.js.map +1 -1
- package/dist/transform/transform.js.map +1 -1
- package/dist/ui/document.js.map +1 -1
- package/dist/ui/follow-component.js.map +1 -1
- package/dist/ui/follow.d.ts.map +1 -1
- package/dist/ui/follow.js +0 -1
- package/dist/ui/follow.js.map +1 -1
- package/dist/ui/panel-components.js.map +1 -1
- package/dist/ui/screenspace-component.js.map +1 -1
- package/dist/ui/screenspace.js.map +1 -1
- package/dist/ui/ui.js.map +1 -1
- package/dist/ui/uikitml-asset.js.map +1 -1
- package/dist/ui/uikitml.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/dist/visibility/visibility-component.js.map +1 -1
- package/dist/visibility/visibility.js.map +1 -1
- package/package.json +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"physics-system.js","sources":["../../src/physics/physics-system.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"physics-system.js","sources":["../../src/physics/physics-system.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 { effect } from '@preact/signals-core';\nimport { createSystem, Entity, Grabbed, ne, Types } from '.././index.js';\nimport { Mesh, Object3D, Quaternion, Vector3 } from '../runtime/three.js';\nimport {\n createPhysicsTransport,\n type PhysicsTransport,\n} from './physics-transport.js';\nimport {\n getCapsuleAxisEndpoints,\n PHYSICS_HEADER_WORDS,\n PHYSICS_INPUT_RECORD_FLOATS,\n PHYSICS_OUTPUT_RECORD_FLOATS,\n PHYSICS_PROTOCOL_VERSION,\n PhysicsCommandFlag,\n PhysicsExchangeStatus,\n PhysicsHeaderIndex,\n PhysicsInputOffset,\n PhysicsOutputOffset,\n physicsExchangeByteLength,\n type PhysicsWorkerAddBodyMessage,\n type PhysicsWorkerBodyState,\n type PhysicsWorkerOutputMessage,\n type PhysicsWorkerShapeDescriptor,\n} from './physics-worker-protocol.js';\nimport {\n DEFAULT_ANGULAR_DAMPING,\n DEFAULT_GRAVITY_FACTOR,\n DEFAULT_LINEAR_DAMPING,\n PhysicsBody,\n PhysicsState,\n} from './physicsBody.js';\nimport { PhysicsManipulation } from './physicsManipulation.js';\nimport { PhysicsShape, PhysicsShapeType } from './physicsShape.js';\nimport {\n detectShapeFromGeometry,\n generateMergedGeometry,\n sequentialIndices,\n} from './utils.js';\n\nexport { getCapsuleAxisEndpoints } from './physics-worker-protocol.js';\n\ntype Vector3Input = Vector3 | readonly [number, number, number];\ntype QuaternionInput = Quaternion | readonly [number, number, number, number];\n\n/** Pose passed to {@link PhysicsSystem.setBodyTransform}. */\nexport interface PhysicsBodyTransformPose {\n position: Vector3Input;\n quaternion: QuaternionInput;\n}\n\n/** Options for {@link PhysicsSystem.setBodyTransform}. */\nexport interface PhysicsBodyTransformOptions {\n /**\n * Clear linear and angular velocity after teleporting the body.\n *\n * @default true\n */\n resetVelocity?: boolean;\n}\n\ninterface PendingBodyCommand {\n handle: number;\n flags: number;\n position: [number, number, number];\n quaternion: [number, number, number, number];\n impulsePoint: [number, number, number];\n impulse: [number, number, number];\n linearVelocity: [number, number, number];\n angularVelocity: [number, number, number];\n gravityFactor: number;\n linearDamping: number;\n angularDamping: number;\n}\n\ninterface SerializedShape {\n descriptor: PhysicsWorkerShapeDescriptor;\n transfer: ArrayBuffer[];\n}\n\ninterface BodyPoseSnapshot {\n previousPosition: Vector3;\n currentPosition: Vector3;\n previousQuaternion: Quaternion;\n currentQuaternion: Quaternion;\n}\n\ninterface CompletedExchange {\n buffer: ArrayBuffer;\n ints: Int32Array;\n floats: Float32Array;\n sequence: number;\n}\n\nconst ZERO_VECTOR = [0, 0, 0] as const;\nconst EXCHANGE_BUFFER_COUNT = 2;\nconst INITIAL_RESULT_CAPACITY = 64;\nconst DEFAULT_UPDATE_FREQUENCY = 60;\nconst MAX_UPDATE_FREQUENCY = 240;\nconst MAX_ACCUMULATED_STEPS = 4;\n\nfunction vector3ToArray(value: Vector3Input): [number, number, number] {\n return 'x' in value\n ? [value.x, value.y, value.z]\n : [value[0], value[1], value[2]];\n}\n\nfunction quaternionToArray(\n value: QuaternionInput,\n): [number, number, number, number] {\n return 'w' in value\n ? [value.x, value.y, value.z, value.w]\n : [value[0], value[1], value[2], value[3]];\n}\n\nfunction createPendingCommand(handle: number): PendingBodyCommand {\n return {\n handle,\n flags: 0,\n position: [0, 0, 0],\n quaternion: [0, 0, 0, 1],\n impulsePoint: [0, 0, 0],\n impulse: [0, 0, 0],\n linearVelocity: [0, 0, 0],\n angularVelocity: [0, 0, 0],\n gravityFactor: DEFAULT_GRAVITY_FACTOR,\n linearDamping: DEFAULT_LINEAR_DAMPING,\n angularDamping: DEFAULT_ANGULAR_DAMPING,\n };\n}\n\nfunction isZeroVector(value: ArrayLike<number>): boolean {\n return value[0] === 0 && value[1] === 0 && value[2] === 0;\n}\n\n/**\n * Manages a Havok simulation on either a dedicated worker or the main thread.\n *\n * Per-frame commands and poses travel through a pair of transferable\n * ArrayBuffers.\n * Both execution modes use the same binary protocol and shared Havok runtime.\n * Worker mode alternates ownership of transferable ArrayBuffers, avoiding both\n * structured-clone copies and SharedArrayBuffer's cross-origin-isolation\n * requirement. Shape creation/removal uses infrequent control messages.\n *\n * @remarks\n * - Supports Sphere, Box, Cylinder, Capsule, ConvexHull, TriMesh, and Auto shapes.\n * - Synchronizes dynamic body poses and velocities back to ECS entities.\n * - Sends grab targets, impulses, velocity edits, damping, and gravity changes through one transport contract.\n * - Automatically releases bodies and shapes when entities are removed.\n *\n * @category Physics\n */\nexport class PhysicsSystem extends createSystem(\n {\n physicsEntities: {\n required: [PhysicsBody, PhysicsShape],\n },\n manipluatedEntities: {\n required: [PhysicsBody, PhysicsManipulation],\n where: [ne(PhysicsBody, '_engineBody', 0)],\n },\n gravityOverrides: {\n required: [PhysicsBody, PhysicsShape],\n where: [ne(PhysicsBody, 'gravityFactor', DEFAULT_GRAVITY_FACTOR)],\n },\n linearDampingOverrides: {\n required: [PhysicsBody, PhysicsShape],\n where: [ne(PhysicsBody, 'linearDamping', DEFAULT_LINEAR_DAMPING)],\n },\n angularDampingOverrides: {\n required: [PhysicsBody, PhysicsShape],\n where: [ne(PhysicsBody, 'angularDamping', DEFAULT_ANGULAR_DAMPING)],\n },\n },\n {\n gravity: { type: Types.Vec3, default: [0, -9.81, 0] },\n useWorker: { type: Types.Boolean, default: true },\n updateFrequency: { type: Types.Float32, default: DEFAULT_UPDATE_FREQUENCY },\n interpolation: { type: Types.Boolean, default: true },\n },\n) {\n private transport?: PhysicsTransport;\n private transportReady = false;\n private nextBodyHandle = 1;\n private nextSequence = 1;\n private bodyEntities = new Map<number, Entity>();\n private bodySnapshots = new Map<number, BodyPoseSnapshot>();\n private bodyResultSequenceFloors = new Map<number, number>();\n private failedBodyEntities = new WeakSet<Entity>();\n private pendingCommands = new Map<number, PendingBodyCommand>();\n private commandPool: PendingBodyCommand[] = [];\n private freeExchangeBuffers: ArrayBuffer[] = [];\n private completedExchanges: CompletedExchange[] = [];\n\n private inFlightExchangeCount = 0;\n private stepAccumulator = 0;\n private pendingDebugStepDelta?: number;\n private debugFlushWaiters = new Set<() => void>();\n\n init(): void {\n const initialByteLength = physicsExchangeByteLength(\n 0,\n INITIAL_RESULT_CAPACITY,\n );\n for (let index = 0; index < EXCHANGE_BUFFER_COUNT; index++) {\n this.freeExchangeBuffers.push(new ArrayBuffer(initialByteLength));\n }\n\n try {\n const transport = createPhysicsTransport(\n this.config.useWorker.value as boolean,\n );\n transport.onmessage = (event: MessageEvent<PhysicsWorkerOutputMessage>) =>\n this.handleTransportMessage(event.data);\n transport.onerror = (event) => {\n this.handleTransportFailure(\n `Physics transport error: ${event.message}`,\n );\n };\n transport.onmessageerror = () => {\n this.handleTransportFailure(\n 'Physics transport message could not be decoded',\n );\n };\n this.transport = transport;\n transport.postMessage({\n type: 'init',\n gravity: [...this.config.gravity.value],\n });\n this.cleanupFuncs.push(\n effect(() => {\n const gravity = this.config.gravity.value;\n this.transport?.postMessage({\n type: 'set-gravity',\n gravity: [gravity[0], gravity[1], gravity[2]],\n });\n }),\n );\n } catch (error) {\n this.transport?.terminate();\n this.transport = undefined;\n console.error(\n this.config.useWorker.value\n ? 'Failed to start physics worker. Set features.physics.useWorker to false to run physics on the main thread:'\n : 'Failed to start main-thread physics:',\n error,\n );\n }\n\n this.cleanupFuncs.push(\n this.queries.physicsEntities.subscribe('disqualify', (entity) => {\n this.removeBody(entity);\n }),\n );\n this.subscribeReactiveOverrides();\n\n this.cleanupFuncs.push(() => {\n this.transport?.terminate();\n this.transport = undefined;\n this.transportReady = false;\n this.bodyEntities.clear();\n this.bodySnapshots.clear();\n this.bodyResultSequenceFloors.clear();\n this.failedBodyEntities = new WeakSet<Entity>();\n this.pendingCommands.clear();\n this.freeExchangeBuffers.length = 0;\n this.completedExchanges.length = 0;\n this.stepAccumulator = 0;\n this.pendingDebugStepDelta = undefined;\n this.resolveDebugFlushWaiters(true);\n });\n }\n\n /**\n * Teleport an existing physics body and mirror the pose immediately on its\n * Object3D. The runtime consumes the command on the next available exchange.\n */\n setBodyTransform(\n entity: Entity,\n pose: PhysicsBodyTransformPose,\n options: PhysicsBodyTransformOptions = {},\n ): void {\n if (!entity.hasComponent(PhysicsBody)) {\n return;\n }\n\n const handle = entity.getValue(PhysicsBody, '_engineBody');\n if (!handle) {\n return;\n }\n\n const position = vector3ToArray(pose.position);\n const quaternion = quaternionToArray(pose.quaternion);\n const command = this.getPendingCommand(handle);\n command.flags |= PhysicsCommandFlag.SetTransform;\n command.position = position;\n command.quaternion = quaternion;\n if (this.bodySnapshots.has(handle)) {\n this.bodyResultSequenceFloors.set(handle, this.nextSequence);\n }\n\n if (entity.object3D) {\n entity.object3D.position.set(position[0], position[1], position[2]);\n entity.object3D.quaternion.set(\n quaternion[0],\n quaternion[1],\n quaternion[2],\n quaternion[3],\n );\n entity.object3D.updateMatrixWorld(true);\n this.syncSnapshotToObject(handle, entity.object3D);\n }\n\n if (options.resetVelocity === false) {\n return;\n }\n\n command.flags |=\n PhysicsCommandFlag.ResetLinearVelocity |\n PhysicsCommandFlag.ResetAngularVelocity;\n entity.getVectorView(PhysicsBody, '_linearVelocity').set(ZERO_VECTOR);\n entity.getVectorView(PhysicsBody, '_angularVelocity').set(ZERO_VECTOR);\n }\n\n update(delta: number): void {\n this.applyCompletedExchange();\n\n if (!this.transport) {\n return;\n }\n\n this.queries.physicsEntities.entities.forEach((entity) => {\n this.ensureBody(entity);\n const handle = entity.getValue(PhysicsBody, '_engineBody');\n if (\n handle &&\n entity.object3D &&\n Grabbed.bitmask &&\n entity.hasComponent(Grabbed)\n ) {\n const command = this.getPendingCommand(handle);\n command.flags |= PhysicsCommandFlag.SetTargetTransform;\n command.position[0] = entity.object3D.position.x;\n command.position[1] = entity.object3D.position.y;\n command.position[2] = entity.object3D.position.z;\n command.quaternion[0] = entity.object3D.quaternion.x;\n command.quaternion[1] = entity.object3D.quaternion.y;\n command.quaternion[2] = entity.object3D.quaternion.z;\n command.quaternion[3] = entity.object3D.quaternion.w;\n this.syncSnapshotToObject(handle, entity.object3D);\n }\n });\n\n this.syncReactiveOverrides();\n this.queueManipulations();\n\n if (this.pendingDebugStepDelta !== undefined) {\n this.stepAccumulator = 0;\n this.trySendPendingDebugStep();\n this.renderInterpolatedTransforms(1);\n return;\n }\n\n const stepInterval = this.getStepInterval();\n this.stepAccumulator = Math.min(\n this.stepAccumulator + Math.max(0, delta),\n stepInterval * MAX_ACCUMULATED_STEPS,\n );\n\n if (this.transportReady) {\n const stepCount = Math.min(\n Math.floor(this.stepAccumulator / stepInterval + 1e-9),\n MAX_ACCUMULATED_STEPS,\n );\n if (stepCount > 0 && this.sendExchange(stepInterval, stepCount)) {\n this.stepAccumulator = Math.max(\n 0,\n this.stepAccumulator - stepInterval * stepCount,\n );\n }\n }\n\n const interpolationAlpha = this.config.interpolation.value\n ? Math.min(this.stepAccumulator / stepInterval, 1)\n : 1;\n this.renderInterpolatedTransforms(interpolationAlpha);\n }\n\n /** Prepare one exact-delta physics tick for an ECS debugger step. */\n prepareDebugFrame(delta: number): void {\n this.pendingDebugStepDelta =\n Number.isFinite(delta) && delta > 0 ? delta : this.getStepInterval();\n this.stepAccumulator = 0;\n }\n\n /**\n * Wait until all submitted physics work is reflected in ECS transforms.\n * Used by debugger pause/step so worker and inline execution expose the same\n * settled state at command boundaries.\n */\n async flushDebugFrame(): Promise<void> {\n this.applyCompletedExchange();\n this.trySendPendingDebugStep();\n await this.waitForDebugWork();\n this.applyCompletedExchange();\n\n // Pausing between fixed ticks must commit queued commands without moving\n // simulation time; a zero-step exchange preserves the old inline behavior.\n if (\n this.pendingDebugStepDelta === undefined &&\n this.pendingCommands.size > 0 &&\n this.transportReady &&\n this.sendExchange(0, 0)\n ) {\n await this.waitForDebugWork();\n this.applyCompletedExchange();\n }\n\n this.renderInterpolatedTransforms(1);\n for (const snapshot of this.bodySnapshots.values()) {\n snapshot.previousPosition.copy(snapshot.currentPosition);\n snapshot.previousQuaternion.copy(snapshot.currentQuaternion);\n }\n }\n\n private handleTransportMessage(message: PhysicsWorkerOutputMessage): void {\n switch (message.type) {\n case 'ready':\n this.transportReady = true;\n this.trySendPendingDebugStep();\n break;\n case 'body-created': {\n const entity = this.bodyEntities.get(message.handle);\n if (entity?.hasComponent(PhysicsBody)) {\n entity\n .getVectorView(PhysicsBody, 'centerOfMass')\n .set(message.centerOfMass);\n }\n break;\n }\n case 'step-result':\n this.inFlightExchangeCount = Math.max(\n 0,\n this.inFlightExchangeCount - 1,\n );\n const ints = new Int32Array(message.buffer);\n this.completedExchanges.push({\n buffer: message.buffer,\n ints,\n floats: new Float32Array(message.buffer),\n sequence: ints[PhysicsHeaderIndex.Sequence],\n });\n if (this.pendingDebugStepDelta !== undefined) {\n this.applyCompletedExchange();\n this.trySendPendingDebugStep();\n }\n if (this.inFlightExchangeCount === 0) {\n this.resolveDebugFlushWaiters();\n }\n break;\n case 'error':\n if (message.handle !== undefined) {\n console.error(`Physics runtime: ${message.message}`);\n const entity = this.bodyEntities.get(message.handle);\n if (entity) {\n this.failedBodyEntities.add(entity);\n this.setEngineHandles(entity, 0);\n }\n this.bodyEntities.delete(message.handle);\n this.bodySnapshots.delete(message.handle);\n this.bodyResultSequenceFloors.delete(message.handle);\n this.discardPendingCommand(message.handle);\n } else {\n this.handleTransportFailure(`Physics runtime: ${message.message}`);\n }\n break;\n }\n }\n\n private handleTransportFailure(message: string): void {\n console.error(\n this.config.useWorker.value\n ? `${message}. Set features.physics.useWorker to false to run physics on the main thread.`\n : message,\n );\n this.transportReady = false;\n this.transport?.terminate();\n this.transport = undefined;\n this.inFlightExchangeCount = 0;\n this.pendingDebugStepDelta = undefined;\n this.resolveDebugFlushWaiters();\n }\n\n private async waitForDebugWork(): Promise<void> {\n if (\n this.pendingDebugStepDelta === undefined &&\n this.inFlightExchangeCount === 0\n ) {\n return;\n }\n await new Promise<void>((resolve) => {\n this.debugFlushWaiters.add(resolve);\n });\n }\n\n private resolveDebugFlushWaiters(force = false): void {\n if (\n !force &&\n (this.pendingDebugStepDelta !== undefined ||\n this.inFlightExchangeCount > 0)\n ) {\n return;\n }\n for (const resolve of this.debugFlushWaiters) {\n resolve();\n }\n this.debugFlushWaiters.clear();\n }\n\n private applyCompletedExchange(): void {\n if (this.completedExchanges.length === 0) {\n return;\n }\n\n this.completedExchanges.sort(\n (left, right) => left.sequence - right.sequence,\n );\n for (const exchange of this.completedExchanges) {\n this.applyExchangeBuffer(exchange);\n this.freeExchangeBuffers.push(exchange.buffer);\n }\n this.completedExchanges.length = 0;\n }\n\n private applyExchangeBuffer({ ints, floats }: CompletedExchange): void {\n const status = ints[PhysicsHeaderIndex.Status];\n if (status & PhysicsExchangeStatus.ResultsTruncated) {\n console.warn('Physics result buffer was unexpectedly truncated');\n }\n const resultCount = ints[PhysicsHeaderIndex.ResultCount];\n const sequence = ints[PhysicsHeaderIndex.Sequence];\n const stepCount = Math.max(1, ints[PhysicsHeaderIndex.StepCount]);\n\n for (let index = 0; index < resultCount; index++) {\n const base = PHYSICS_HEADER_WORDS + index * PHYSICS_OUTPUT_RECORD_FLOATS;\n const handle = floats[base + PhysicsOutputOffset.Handle];\n const entity = this.bodyEntities.get(handle);\n if (!entity?.object3D || !entity.hasComponent(PhysicsBody)) {\n continue;\n }\n const sequenceFloor = this.bodyResultSequenceFloors.get(handle);\n if (sequenceFloor !== undefined) {\n if (sequence < sequenceFloor) {\n continue;\n }\n this.bodyResultSequenceFloors.delete(handle);\n }\n\n const linearVelocity = entity.getVectorView(\n PhysicsBody,\n '_linearVelocity',\n );\n linearVelocity[0] = floats[base + PhysicsOutputOffset.LinearVelocityX];\n linearVelocity[1] = floats[base + PhysicsOutputOffset.LinearVelocityY];\n linearVelocity[2] = floats[base + PhysicsOutputOffset.LinearVelocityZ];\n const angularVelocity = entity.getVectorView(\n PhysicsBody,\n '_angularVelocity',\n );\n angularVelocity[0] = floats[base + PhysicsOutputOffset.AngularVelocityX];\n angularVelocity[1] = floats[base + PhysicsOutputOffset.AngularVelocityY];\n angularVelocity[2] = floats[base + PhysicsOutputOffset.AngularVelocityZ];\n\n if (Grabbed.bitmask && entity.hasComponent(Grabbed)) {\n continue;\n }\n\n const snapshot = this.bodySnapshots.get(handle);\n if (!snapshot) {\n continue;\n }\n if (stepCount === 1) {\n snapshot.previousPosition.copy(snapshot.currentPosition);\n snapshot.previousQuaternion.copy(snapshot.currentQuaternion);\n }\n snapshot.currentPosition.set(\n floats[base + PhysicsOutputOffset.PositionX],\n floats[base + PhysicsOutputOffset.PositionY],\n floats[base + PhysicsOutputOffset.PositionZ],\n );\n snapshot.currentQuaternion.set(\n floats[base + PhysicsOutputOffset.QuaternionX],\n floats[base + PhysicsOutputOffset.QuaternionY],\n floats[base + PhysicsOutputOffset.QuaternionZ],\n floats[base + PhysicsOutputOffset.QuaternionW],\n );\n if (stepCount > 1) {\n snapshot.previousPosition.copy(snapshot.currentPosition);\n snapshot.previousQuaternion.copy(snapshot.currentQuaternion);\n }\n }\n }\n\n private renderInterpolatedTransforms(alpha: number): void {\n for (const [handle, snapshot] of this.bodySnapshots) {\n const entity = this.bodyEntities.get(handle);\n if (\n !entity?.object3D ||\n (Grabbed.bitmask && entity.hasComponent(Grabbed))\n ) {\n continue;\n }\n entity.object3D.position.lerpVectors(\n snapshot.previousPosition,\n snapshot.currentPosition,\n alpha,\n );\n entity.object3D.quaternion.slerpQuaternions(\n snapshot.previousQuaternion,\n snapshot.currentQuaternion,\n alpha,\n );\n }\n }\n\n private syncSnapshotToObject(handle: number, object3D: Object3D): void {\n const snapshot = this.bodySnapshots.get(handle);\n if (!snapshot) {\n return;\n }\n snapshot.previousPosition.copy(object3D.position);\n snapshot.currentPosition.copy(object3D.position);\n snapshot.previousQuaternion.copy(object3D.quaternion);\n snapshot.currentQuaternion.copy(object3D.quaternion);\n }\n\n private getStepInterval(): number {\n const configuredFrequency = this.config.updateFrequency.value;\n const frequency =\n Number.isFinite(configuredFrequency) && configuredFrequency > 0\n ? Math.min(configuredFrequency, MAX_UPDATE_FREQUENCY)\n : DEFAULT_UPDATE_FREQUENCY;\n return 1 / frequency;\n }\n\n private sendExchange(delta: number, stepCount = 1): boolean {\n const transport = this.transport;\n const buffer = this.freeExchangeBuffers.pop();\n if (!transport || !buffer) {\n return false;\n }\n\n const resultCapacity = this.bodySnapshots.size;\n\n const requiredByteLength = physicsExchangeByteLength(\n this.pendingCommands.size,\n resultCapacity,\n );\n const exchangeBuffer =\n buffer.byteLength >= requiredByteLength\n ? buffer\n : new ArrayBuffer(requiredByteLength);\n const ints = new Int32Array(exchangeBuffer);\n const floats = new Float32Array(exchangeBuffer);\n ints.fill(0, 0, PHYSICS_HEADER_WORDS);\n ints[PhysicsHeaderIndex.Version] = PHYSICS_PROTOCOL_VERSION;\n const sequence = this.nextSequence++;\n ints[PhysicsHeaderIndex.Sequence] = sequence;\n ints[PhysicsHeaderIndex.CommandCount] = this.pendingCommands.size;\n ints[PhysicsHeaderIndex.StepCount] = stepCount;\n floats[PhysicsHeaderIndex.Delta] = delta;\n\n let commandIndex = 0;\n for (const command of this.pendingCommands.values()) {\n this.writeCommand(floats, commandIndex++, command);\n if (command.flags & PhysicsCommandFlag.SetTransform) {\n this.bodyResultSequenceFloors.set(command.handle, sequence);\n }\n }\n\n try {\n transport.postMessage({ type: 'step', buffer: exchangeBuffer }, [\n exchangeBuffer,\n ]);\n this.inFlightExchangeCount++;\n this.releasePendingCommands();\n return true;\n } catch (error) {\n this.freeExchangeBuffers.push(exchangeBuffer);\n console.error('Failed to post physics exchange buffer:', error);\n return false;\n }\n }\n\n private trySendPendingDebugStep(): void {\n if (this.pendingDebugStepDelta === undefined) {\n return;\n }\n if (!this.transport) {\n this.pendingDebugStepDelta = undefined;\n this.resolveDebugFlushWaiters();\n return;\n }\n if (!this.transportReady) {\n return;\n }\n if (this.sendExchange(this.pendingDebugStepDelta, 1)) {\n this.pendingDebugStepDelta = undefined;\n }\n }\n\n private writeCommand(\n output: Float32Array,\n index: number,\n command: PendingBodyCommand,\n ): void {\n const base = PHYSICS_HEADER_WORDS + index * PHYSICS_INPUT_RECORD_FLOATS;\n output[base + PhysicsInputOffset.Handle] = command.handle;\n output[base + PhysicsInputOffset.Flags] = command.flags;\n output[base + PhysicsInputOffset.PositionX] = command.position[0];\n output[base + PhysicsInputOffset.PositionY] = command.position[1];\n output[base + PhysicsInputOffset.PositionZ] = command.position[2];\n output[base + PhysicsInputOffset.QuaternionX] = command.quaternion[0];\n output[base + PhysicsInputOffset.QuaternionY] = command.quaternion[1];\n output[base + PhysicsInputOffset.QuaternionZ] = command.quaternion[2];\n output[base + PhysicsInputOffset.QuaternionW] = command.quaternion[3];\n output[base + PhysicsInputOffset.ImpulsePointX] = command.impulsePoint[0];\n output[base + PhysicsInputOffset.ImpulsePointY] = command.impulsePoint[1];\n output[base + PhysicsInputOffset.ImpulsePointZ] = command.impulsePoint[2];\n output[base + PhysicsInputOffset.ImpulseX] = command.impulse[0];\n output[base + PhysicsInputOffset.ImpulseY] = command.impulse[1];\n output[base + PhysicsInputOffset.ImpulseZ] = command.impulse[2];\n output[base + PhysicsInputOffset.LinearVelocityX] =\n command.linearVelocity[0];\n output[base + PhysicsInputOffset.LinearVelocityY] =\n command.linearVelocity[1];\n output[base + PhysicsInputOffset.LinearVelocityZ] =\n command.linearVelocity[2];\n output[base + PhysicsInputOffset.AngularVelocityX] =\n command.angularVelocity[0];\n output[base + PhysicsInputOffset.AngularVelocityY] =\n command.angularVelocity[1];\n output[base + PhysicsInputOffset.AngularVelocityZ] =\n command.angularVelocity[2];\n output[base + PhysicsInputOffset.GravityFactor] = command.gravityFactor;\n output[base + PhysicsInputOffset.LinearDamping] = command.linearDamping;\n output[base + PhysicsInputOffset.AngularDamping] = command.angularDamping;\n }\n\n private getPendingCommand(handle: number): PendingBodyCommand {\n let command = this.pendingCommands.get(handle);\n if (!command) {\n command = this.commandPool.pop() ?? createPendingCommand(handle);\n command.handle = handle;\n command.flags = 0;\n command.impulse[0] = 0;\n command.impulse[1] = 0;\n command.impulse[2] = 0;\n this.pendingCommands.set(handle, command);\n }\n return command;\n }\n\n private releasePendingCommands(): void {\n for (const command of this.pendingCommands.values()) {\n command.flags = 0;\n this.commandPool.push(command);\n }\n this.pendingCommands.clear();\n }\n\n private discardPendingCommand(handle: number): void {\n const command = this.pendingCommands.get(handle);\n if (command) {\n command.flags = 0;\n this.commandPool.push(command);\n this.pendingCommands.delete(handle);\n }\n }\n\n private ensureBody(entity: Entity): void {\n if (!this.transport || !entity.object3D) {\n return;\n }\n if (this.failedBodyEntities.has(entity)) {\n return;\n }\n if (entity.getValue(PhysicsBody, '_engineBody')) {\n return;\n }\n\n const serialized = this.serializeShape(entity, entity.object3D);\n if (!serialized) {\n return;\n }\n\n const handle = this.nextBodyHandle++;\n const linearDamping =\n entity.getValue(PhysicsBody, 'linearDamping') ?? DEFAULT_LINEAR_DAMPING;\n const angularDamping =\n entity.getValue(PhysicsBody, 'angularDamping') ?? DEFAULT_ANGULAR_DAMPING;\n const gravityFactor =\n entity.getValue(PhysicsBody, 'gravityFactor') ?? DEFAULT_GRAVITY_FACTOR;\n const centerOfMass = entity.getVectorView(PhysicsBody, 'centerOfMass');\n const message: PhysicsWorkerAddBodyMessage = {\n type: 'add-body',\n handle,\n shape: serialized.descriptor,\n state: entity.getValue(PhysicsBody, 'state') as PhysicsWorkerBodyState,\n position: [\n entity.object3D.position.x,\n entity.object3D.position.y,\n entity.object3D.position.z,\n ],\n quaternion: [\n entity.object3D.quaternion.x,\n entity.object3D.quaternion.y,\n entity.object3D.quaternion.z,\n entity.object3D.quaternion.w,\n ],\n linearDamping,\n angularDamping,\n gravityFactor,\n centerOfMass: [centerOfMass[0], centerOfMass[1], centerOfMass[2]],\n };\n\n this.setEngineHandles(entity, handle);\n PhysicsBody.data._engineGravityFactor[entity.index] = gravityFactor;\n PhysicsBody.data._engineLinearDamping[entity.index] = linearDamping;\n PhysicsBody.data._engineAngularDamping[entity.index] = angularDamping;\n this.bodyEntities.set(handle, entity);\n if (message.state !== PhysicsState.Static) {\n this.bodySnapshots.set(handle, {\n previousPosition: entity.object3D.position.clone(),\n currentPosition: entity.object3D.position.clone(),\n previousQuaternion: entity.object3D.quaternion.clone(),\n currentQuaternion: entity.object3D.quaternion.clone(),\n });\n }\n\n try {\n this.transport.postMessage(message, serialized.transfer);\n } catch (error) {\n this.failedBodyEntities.add(entity);\n this.setEngineHandles(entity, 0);\n this.bodyEntities.delete(handle);\n this.bodySnapshots.delete(handle);\n this.bodyResultSequenceFloors.delete(handle);\n console.error('Failed to create physics body:', error);\n }\n }\n\n private serializeShape(\n entity: Entity,\n object3D: Object3D,\n ): SerializedShape | undefined {\n const dimensionsView = entity.getVectorView(PhysicsShape, 'dimensions');\n let shapeType = entity.getValue(PhysicsShape, 'shape');\n\n if (shapeType === PhysicsShapeType.Auto) {\n const detection = detectShapeFromGeometry(object3D);\n entity.setValue(PhysicsShape, 'shape', detection.shapeType);\n shapeType = detection.shapeType;\n if (detection.dimensions) {\n dimensionsView.set(detection.dimensions);\n }\n }\n\n if (\n shapeType === PhysicsShapeType.Capsules &&\n !getCapsuleAxisEndpoints(dimensionsView[0], dimensionsView[1])\n ) {\n console.warn(\n 'PhysicsSystem: Capsule dimensions require a positive radius and a total height greater than or equal to twice the radius',\n );\n return;\n }\n\n const descriptor: PhysicsWorkerShapeDescriptor = {\n type: shapeType as PhysicsWorkerShapeDescriptor['type'],\n dimensions: [dimensionsView[0], dimensionsView[1], dimensionsView[2]],\n density: entity.getValue(PhysicsShape, 'density') ?? 1,\n restitution: entity.getValue(PhysicsShape, 'restitution') ?? 0,\n friction: entity.getValue(PhysicsShape, 'friction') ?? 0.5,\n };\n const transfer: ArrayBuffer[] = [];\n\n if (\n shapeType === PhysicsShapeType.ConvexHull ||\n shapeType === PhysicsShapeType.TriMesh\n ) {\n const ownsGeometry = !(object3D instanceof Mesh);\n const geometry =\n object3D instanceof Mesh\n ? object3D.geometry\n : generateMergedGeometry(object3D);\n try {\n const positionAttribute = geometry.attributes.position;\n if (!positionAttribute) {\n console.warn(\n `PhysicsSystem: Failed to get vertices for ${shapeType} shape with object3D name ${object3D.name} &id ${object3D.id}`,\n );\n return;\n }\n\n const vertices = Float32Array.from(\n positionAttribute.array as ArrayLike<number>,\n );\n descriptor.vertices = vertices.buffer as ArrayBuffer;\n transfer.push(descriptor.vertices);\n\n if (shapeType === PhysicsShapeType.TriMesh) {\n const sourceIndices =\n geometry.index?.array ?? sequentialIndices(positionAttribute.count);\n const indices = Uint32Array.from(sourceIndices as ArrayLike<number>);\n descriptor.indices = indices.buffer as ArrayBuffer;\n transfer.push(descriptor.indices);\n }\n } finally {\n if (ownsGeometry) {\n geometry.dispose();\n }\n }\n }\n\n return { descriptor, transfer };\n }\n\n private removeBody(entity: Entity): void {\n this.failedBodyEntities.delete(entity);\n const handle = PhysicsBody.data._engineBody[entity.index];\n if (!handle) {\n return;\n }\n\n this.transport?.postMessage({ type: 'remove-body', handle });\n this.bodyEntities.delete(handle);\n this.bodySnapshots.delete(handle);\n this.bodyResultSequenceFloors.delete(handle);\n this.discardPendingCommand(handle);\n this.setEngineHandles(entity, 0);\n }\n\n private setEngineHandles(entity: Entity, handle: number): void {\n if (entity.hasComponent(PhysicsBody)) {\n entity.setValue(PhysicsBody, '_engineBody', handle);\n entity.setValue(PhysicsBody, '_engineOffset', 0);\n } else {\n PhysicsBody.data._engineBody[entity.index] = handle;\n PhysicsBody.data._engineOffset[entity.index] = 0;\n }\n if (entity.hasComponent(PhysicsShape)) {\n entity.setValue(PhysicsShape, '_engineShape', handle);\n } else {\n PhysicsShape.data._engineShape[entity.index] = handle;\n }\n }\n\n private subscribeReactiveOverrides(): void {\n this.cleanupFuncs.push(\n this.queries.gravityOverrides.subscribe('disqualify', (entity) => {\n if (\n entity.hasComponent(PhysicsBody) &&\n entity.hasComponent(PhysicsShape)\n ) {\n this.syncGravityFactor(entity);\n }\n }),\n this.queries.linearDampingOverrides.subscribe('disqualify', (entity) => {\n if (\n entity.hasComponent(PhysicsBody) &&\n entity.hasComponent(PhysicsShape)\n ) {\n this.syncLinearDamping(entity);\n }\n }),\n this.queries.angularDampingOverrides.subscribe('disqualify', (entity) => {\n if (\n entity.hasComponent(PhysicsBody) &&\n entity.hasComponent(PhysicsShape)\n ) {\n this.syncAngularDamping(entity);\n }\n }),\n );\n }\n\n private syncReactiveOverrides(): void {\n this.queries.gravityOverrides.entities.forEach((entity) => {\n this.syncGravityFactor(entity);\n });\n this.queries.linearDampingOverrides.entities.forEach((entity) => {\n this.syncLinearDamping(entity);\n });\n this.queries.angularDampingOverrides.entities.forEach((entity) => {\n this.syncAngularDamping(entity);\n });\n }\n\n private syncGravityFactor(entity: Entity): void {\n const index = entity.index;\n const handle = PhysicsBody.data._engineBody[index];\n if (!handle) {\n return;\n }\n const target = PhysicsBody.data.gravityFactor[index];\n if (PhysicsBody.data._engineGravityFactor[index] === target) {\n return;\n }\n const command = this.getPendingCommand(handle);\n command.flags |= PhysicsCommandFlag.SetGravityFactor;\n command.gravityFactor = target;\n PhysicsBody.data._engineGravityFactor[index] = target;\n }\n\n private syncLinearDamping(entity: Entity): void {\n const index = entity.index;\n const handle = PhysicsBody.data._engineBody[index];\n if (!handle) {\n return;\n }\n const target = PhysicsBody.data.linearDamping[index];\n if (PhysicsBody.data._engineLinearDamping[index] === target) {\n return;\n }\n const command = this.getPendingCommand(handle);\n command.flags |= PhysicsCommandFlag.SetLinearDamping;\n command.linearDamping = target;\n PhysicsBody.data._engineLinearDamping[index] = target;\n }\n\n private syncAngularDamping(entity: Entity): void {\n const index = entity.index;\n const handle = PhysicsBody.data._engineBody[index];\n if (!handle) {\n return;\n }\n const target = PhysicsBody.data.angularDamping[index];\n if (PhysicsBody.data._engineAngularDamping[index] === target) {\n return;\n }\n const command = this.getPendingCommand(handle);\n command.flags |= PhysicsCommandFlag.SetAngularDamping;\n command.angularDamping = target;\n PhysicsBody.data._engineAngularDamping[index] = target;\n }\n\n private queueManipulations(): void {\n this.queries.manipluatedEntities.entities.forEach((entity) => {\n const handle = entity.getValue(PhysicsBody, '_engineBody');\n if (!handle || !entity.object3D) {\n return;\n }\n\n const force = entity.getVectorView(PhysicsManipulation, 'force');\n const linearVelocity = entity.getVectorView(\n PhysicsManipulation,\n 'linearVelocity',\n );\n const angularVelocity = entity.getVectorView(\n PhysicsManipulation,\n 'angularVelocity',\n );\n const hasForce = !isZeroVector(force);\n const hasLinearVelocity = !isZeroVector(linearVelocity);\n const hasAngularVelocity = !isZeroVector(angularVelocity);\n if (!hasForce && !hasLinearVelocity && !hasAngularVelocity) {\n entity.removeComponent(PhysicsManipulation);\n return;\n }\n const command = this.getPendingCommand(handle);\n\n if (hasForce) {\n command.flags |= PhysicsCommandFlag.ApplyImpulse;\n const impulsePosition =\n this.bodySnapshots.get(handle)?.currentPosition ??\n entity.object3D.position;\n command.impulsePoint[0] = impulsePosition.x;\n command.impulsePoint[1] = impulsePosition.y;\n command.impulsePoint[2] = impulsePosition.z;\n command.impulse[0] += force[0];\n command.impulse[1] += force[1];\n command.impulse[2] += force[2];\n }\n if (hasLinearVelocity) {\n command.flags |= PhysicsCommandFlag.SetLinearVelocity;\n command.linearVelocity[0] = linearVelocity[0];\n command.linearVelocity[1] = linearVelocity[1];\n command.linearVelocity[2] = linearVelocity[2];\n }\n if (hasAngularVelocity) {\n command.flags |= PhysicsCommandFlag.SetAngularVelocity;\n command.angularVelocity[0] = angularVelocity[0];\n command.angularVelocity[1] = angularVelocity[1];\n command.angularVelocity[2] = angularVelocity[2];\n }\n\n entity.removeComponent(PhysicsManipulation);\n });\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
import type { PhysicsWorkerInputMessage, PhysicsWorkerOutputMessage } from './physics-worker-protocol.js';
|
|
8
|
+
export interface PhysicsTransportErrorEvent {
|
|
9
|
+
message: string;
|
|
10
|
+
}
|
|
11
|
+
/** Message transport shared by worker and inline physics execution. */
|
|
12
|
+
export interface PhysicsTransport {
|
|
13
|
+
onmessage: ((event: MessageEvent<PhysicsWorkerOutputMessage>) => void) | null;
|
|
14
|
+
onerror: ((event: PhysicsTransportErrorEvent) => void) | null;
|
|
15
|
+
onmessageerror: (() => void) | null;
|
|
16
|
+
postMessage(message: PhysicsWorkerInputMessage, transfer?: Transferable[]): void;
|
|
17
|
+
terminate(): void;
|
|
18
|
+
}
|
|
19
|
+
export declare function createPhysicsTransport(useWorker: boolean): PhysicsTransport;
|
|
20
|
+
//# sourceMappingURL=physics-transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"physics-transport.d.ts","sourceRoot":"","sources":["../../src/physics/physics-transport.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EACV,yBAAyB,EACzB,0BAA0B,EAC3B,MAAM,8BAA8B,CAAC;AAEtC,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,uEAAuE;AACvE,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,CAAC,CAAC,KAAK,EAAE,YAAY,CAAC,0BAA0B,CAAC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IAC9E,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,0BAA0B,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IAC9D,cAAc,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC;IACpC,WAAW,CACT,OAAO,EAAE,yBAAyB,EAClC,QAAQ,CAAC,EAAE,YAAY,EAAE,GACxB,IAAI,CAAC;IACR,SAAS,IAAI,IAAI,CAAC;CACnB;AAsGD,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,OAAO,GAAG,gBAAgB,CAO3E"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
class MainThreadPhysicsTransport {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.onmessage = null;
|
|
10
|
+
this.onerror = null;
|
|
11
|
+
this.onmessageerror = null;
|
|
12
|
+
this.messageQueue = Promise.resolve();
|
|
13
|
+
this.terminated = false;
|
|
14
|
+
}
|
|
15
|
+
postMessage(message) {
|
|
16
|
+
if (this.terminated) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
this.messageQueue = this.messageQueue
|
|
20
|
+
.then(() => this.handleMessage(message))
|
|
21
|
+
.catch((error) => {
|
|
22
|
+
var _a;
|
|
23
|
+
if (!this.terminated) {
|
|
24
|
+
(_a = this.onerror) === null || _a === void 0 ? void 0 : _a.call(this, {
|
|
25
|
+
message: error instanceof Error ? error.message : String(error),
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
terminate() {
|
|
31
|
+
var _a;
|
|
32
|
+
if (this.terminated) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
this.terminated = true;
|
|
36
|
+
(_a = this.runtime) === null || _a === void 0 ? void 0 : _a.destroy();
|
|
37
|
+
this.runtime = undefined;
|
|
38
|
+
this.onmessage = null;
|
|
39
|
+
this.onerror = null;
|
|
40
|
+
this.onmessageerror = null;
|
|
41
|
+
}
|
|
42
|
+
async getRuntime() {
|
|
43
|
+
if (!this.runtime) {
|
|
44
|
+
const { PhysicsRuntime } = await import('./physics-runtime.js');
|
|
45
|
+
if (this.terminated) {
|
|
46
|
+
throw new Error('Physics transport was terminated during startup');
|
|
47
|
+
}
|
|
48
|
+
this.runtime = new PhysicsRuntime();
|
|
49
|
+
}
|
|
50
|
+
return this.runtime;
|
|
51
|
+
}
|
|
52
|
+
emit(message) {
|
|
53
|
+
var _a;
|
|
54
|
+
if (!this.terminated) {
|
|
55
|
+
(_a = this.onmessage) === null || _a === void 0 ? void 0 : _a.call(this, {
|
|
56
|
+
data: message,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
async handleMessage(message) {
|
|
61
|
+
const runtime = await this.getRuntime();
|
|
62
|
+
switch (message.type) {
|
|
63
|
+
case 'init':
|
|
64
|
+
await runtime.initialize(message.gravity);
|
|
65
|
+
this.emit({ type: 'ready' });
|
|
66
|
+
break;
|
|
67
|
+
case 'set-gravity':
|
|
68
|
+
runtime.setGravity(message.gravity);
|
|
69
|
+
break;
|
|
70
|
+
case 'add-body':
|
|
71
|
+
try {
|
|
72
|
+
const centerOfMass = runtime.addBody(message);
|
|
73
|
+
this.emit({
|
|
74
|
+
type: 'body-created',
|
|
75
|
+
handle: message.handle,
|
|
76
|
+
centerOfMass,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
this.emit({
|
|
81
|
+
type: 'error',
|
|
82
|
+
handle: message.handle,
|
|
83
|
+
message: error instanceof Error ? error.message : String(error),
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
break;
|
|
87
|
+
case 'remove-body':
|
|
88
|
+
runtime.removeBody(message.handle);
|
|
89
|
+
break;
|
|
90
|
+
case 'step': {
|
|
91
|
+
const result = runtime.step(message.buffer);
|
|
92
|
+
if (result.error) {
|
|
93
|
+
this.emit({ type: 'error', message: result.error });
|
|
94
|
+
}
|
|
95
|
+
this.emit({ type: 'step-result', buffer: result.buffer });
|
|
96
|
+
break;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
function createPhysicsTransport(useWorker) {
|
|
102
|
+
if (!useWorker) {
|
|
103
|
+
return new MainThreadPhysicsTransport();
|
|
104
|
+
}
|
|
105
|
+
return new Worker(new URL('./physics-worker.js', import.meta.url), {
|
|
106
|
+
type: 'module',
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export { createPhysicsTransport };
|
|
111
|
+
//# sourceMappingURL=physics-transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"physics-transport.js","sources":["../../src/physics/physics-transport.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 { PhysicsRuntime } from './physics-runtime.js';\nimport type {\n PhysicsWorkerInputMessage,\n PhysicsWorkerOutputMessage,\n} from './physics-worker-protocol.js';\n\nexport interface PhysicsTransportErrorEvent {\n message: string;\n}\n\n/** Message transport shared by worker and inline physics execution. */\nexport interface PhysicsTransport {\n onmessage: ((event: MessageEvent<PhysicsWorkerOutputMessage>) => void) | null;\n onerror: ((event: PhysicsTransportErrorEvent) => void) | null;\n onmessageerror: (() => void) | null;\n postMessage(\n message: PhysicsWorkerInputMessage,\n transfer?: Transferable[],\n ): void;\n terminate(): void;\n}\n\nclass MainThreadPhysicsTransport implements PhysicsTransport {\n onmessage:\n | ((event: MessageEvent<PhysicsWorkerOutputMessage>) => void)\n | null = null;\n onerror: ((event: PhysicsTransportErrorEvent) => void) | null = null;\n onmessageerror: (() => void) | null = null;\n\n private runtime?: PhysicsRuntime;\n private messageQueue = Promise.resolve();\n private terminated = false;\n\n postMessage(message: PhysicsWorkerInputMessage): void {\n if (this.terminated) {\n return;\n }\n this.messageQueue = this.messageQueue\n .then(() => this.handleMessage(message))\n .catch((error) => {\n if (!this.terminated) {\n this.onerror?.({\n message: error instanceof Error ? error.message : String(error),\n });\n }\n });\n }\n\n terminate(): void {\n if (this.terminated) {\n return;\n }\n this.terminated = true;\n this.runtime?.destroy();\n this.runtime = undefined;\n this.onmessage = null;\n this.onerror = null;\n this.onmessageerror = null;\n }\n\n private async getRuntime(): Promise<PhysicsRuntime> {\n if (!this.runtime) {\n const { PhysicsRuntime } = await import('./physics-runtime.js');\n if (this.terminated) {\n throw new Error('Physics transport was terminated during startup');\n }\n this.runtime = new PhysicsRuntime();\n }\n return this.runtime;\n }\n\n private emit(message: PhysicsWorkerOutputMessage): void {\n if (!this.terminated) {\n this.onmessage?.({\n data: message,\n } as MessageEvent<PhysicsWorkerOutputMessage>);\n }\n }\n\n private async handleMessage(\n message: PhysicsWorkerInputMessage,\n ): Promise<void> {\n const runtime = await this.getRuntime();\n switch (message.type) {\n case 'init':\n await runtime.initialize(message.gravity);\n this.emit({ type: 'ready' });\n break;\n case 'set-gravity':\n runtime.setGravity(message.gravity);\n break;\n case 'add-body':\n try {\n const centerOfMass = runtime.addBody(message);\n this.emit({\n type: 'body-created',\n handle: message.handle,\n centerOfMass,\n });\n } catch (error) {\n this.emit({\n type: 'error',\n handle: message.handle,\n message: error instanceof Error ? error.message : String(error),\n });\n }\n break;\n case 'remove-body':\n runtime.removeBody(message.handle);\n break;\n case 'step': {\n const result = runtime.step(message.buffer);\n if (result.error) {\n this.emit({ type: 'error', message: result.error });\n }\n this.emit({ type: 'step-result', buffer: result.buffer });\n break;\n }\n }\n }\n}\n\nexport function createPhysicsTransport(useWorker: boolean): PhysicsTransport {\n if (!useWorker) {\n return new MainThreadPhysicsTransport();\n }\n return new Worker(new URL('./physics-worker.js', import.meta.url), {\n type: 'module',\n }) as PhysicsTransport;\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
export declare const PHYSICS_PROTOCOL_VERSION = 1;
|
|
8
|
+
/**
|
|
9
|
+
* The header is deliberately one cache line. Integer fields use an Int32Array
|
|
10
|
+
* view and the delta field uses a Float32Array view over the same buffer.
|
|
11
|
+
*/
|
|
12
|
+
export declare const PHYSICS_HEADER_WORDS = 16;
|
|
13
|
+
export declare const PHYSICS_HEADER_BYTES: number;
|
|
14
|
+
export declare const PHYSICS_INPUT_RECORD_FLOATS = 24;
|
|
15
|
+
export declare const PHYSICS_OUTPUT_RECORD_FLOATS = 14;
|
|
16
|
+
export declare const enum PhysicsHeaderIndex {
|
|
17
|
+
Version = 0,
|
|
18
|
+
Sequence = 1,
|
|
19
|
+
CommandCount = 2,
|
|
20
|
+
ResultCount = 3,
|
|
21
|
+
Status = 4,
|
|
22
|
+
StepCount = 5,
|
|
23
|
+
Delta = 8
|
|
24
|
+
}
|
|
25
|
+
export declare const enum PhysicsExchangeStatus {
|
|
26
|
+
Ok = 0,
|
|
27
|
+
ResultsTruncated = 1,
|
|
28
|
+
StepFailed = 2
|
|
29
|
+
}
|
|
30
|
+
export declare const enum PhysicsCommandFlag {
|
|
31
|
+
SetTargetTransform = 1,
|
|
32
|
+
SetTransform = 2,
|
|
33
|
+
ResetLinearVelocity = 4,
|
|
34
|
+
ResetAngularVelocity = 8,
|
|
35
|
+
ApplyImpulse = 16,
|
|
36
|
+
SetLinearVelocity = 32,
|
|
37
|
+
SetAngularVelocity = 64,
|
|
38
|
+
SetGravityFactor = 128,
|
|
39
|
+
SetLinearDamping = 256,
|
|
40
|
+
SetAngularDamping = 512
|
|
41
|
+
}
|
|
42
|
+
export declare const enum PhysicsInputOffset {
|
|
43
|
+
Handle = 0,
|
|
44
|
+
Flags = 1,
|
|
45
|
+
PositionX = 2,
|
|
46
|
+
PositionY = 3,
|
|
47
|
+
PositionZ = 4,
|
|
48
|
+
QuaternionX = 5,
|
|
49
|
+
QuaternionY = 6,
|
|
50
|
+
QuaternionZ = 7,
|
|
51
|
+
QuaternionW = 8,
|
|
52
|
+
ImpulsePointX = 9,
|
|
53
|
+
ImpulsePointY = 10,
|
|
54
|
+
ImpulsePointZ = 11,
|
|
55
|
+
ImpulseX = 12,
|
|
56
|
+
ImpulseY = 13,
|
|
57
|
+
ImpulseZ = 14,
|
|
58
|
+
LinearVelocityX = 15,
|
|
59
|
+
LinearVelocityY = 16,
|
|
60
|
+
LinearVelocityZ = 17,
|
|
61
|
+
AngularVelocityX = 18,
|
|
62
|
+
AngularVelocityY = 19,
|
|
63
|
+
AngularVelocityZ = 20,
|
|
64
|
+
GravityFactor = 21,
|
|
65
|
+
LinearDamping = 22,
|
|
66
|
+
AngularDamping = 23
|
|
67
|
+
}
|
|
68
|
+
export declare const enum PhysicsOutputOffset {
|
|
69
|
+
Handle = 0,
|
|
70
|
+
PositionX = 1,
|
|
71
|
+
PositionY = 2,
|
|
72
|
+
PositionZ = 3,
|
|
73
|
+
QuaternionX = 4,
|
|
74
|
+
QuaternionY = 5,
|
|
75
|
+
QuaternionZ = 6,
|
|
76
|
+
QuaternionW = 7,
|
|
77
|
+
LinearVelocityX = 8,
|
|
78
|
+
LinearVelocityY = 9,
|
|
79
|
+
LinearVelocityZ = 10,
|
|
80
|
+
AngularVelocityX = 11,
|
|
81
|
+
AngularVelocityY = 12,
|
|
82
|
+
AngularVelocityZ = 13
|
|
83
|
+
}
|
|
84
|
+
export type PhysicsWorkerBodyState = 'STATIC' | 'DYNAMIC' | 'KINEMATIC';
|
|
85
|
+
export type PhysicsWorkerShapeType = 'Sphere' | 'Box' | 'Cylinder' | 'Capsules' | 'ConvexHull' | 'TriMesh';
|
|
86
|
+
export interface PhysicsWorkerShapeDescriptor {
|
|
87
|
+
type: PhysicsWorkerShapeType;
|
|
88
|
+
dimensions: [number, number, number];
|
|
89
|
+
density: number;
|
|
90
|
+
restitution: number;
|
|
91
|
+
friction: number;
|
|
92
|
+
vertices?: ArrayBuffer;
|
|
93
|
+
indices?: ArrayBuffer;
|
|
94
|
+
}
|
|
95
|
+
export interface PhysicsWorkerInitMessage {
|
|
96
|
+
type: 'init';
|
|
97
|
+
gravity: [number, number, number];
|
|
98
|
+
}
|
|
99
|
+
export interface PhysicsWorkerSetGravityMessage {
|
|
100
|
+
type: 'set-gravity';
|
|
101
|
+
gravity: [number, number, number];
|
|
102
|
+
}
|
|
103
|
+
export interface PhysicsWorkerAddBodyMessage {
|
|
104
|
+
type: 'add-body';
|
|
105
|
+
handle: number;
|
|
106
|
+
shape: PhysicsWorkerShapeDescriptor;
|
|
107
|
+
state: PhysicsWorkerBodyState;
|
|
108
|
+
position: [number, number, number];
|
|
109
|
+
quaternion: [number, number, number, number];
|
|
110
|
+
linearDamping: number;
|
|
111
|
+
angularDamping: number;
|
|
112
|
+
gravityFactor: number;
|
|
113
|
+
centerOfMass: [number, number, number];
|
|
114
|
+
}
|
|
115
|
+
export interface PhysicsWorkerRemoveBodyMessage {
|
|
116
|
+
type: 'remove-body';
|
|
117
|
+
handle: number;
|
|
118
|
+
}
|
|
119
|
+
export interface PhysicsWorkerStepMessage {
|
|
120
|
+
type: 'step';
|
|
121
|
+
buffer: ArrayBuffer;
|
|
122
|
+
}
|
|
123
|
+
export type PhysicsWorkerInputMessage = PhysicsWorkerInitMessage | PhysicsWorkerSetGravityMessage | PhysicsWorkerAddBodyMessage | PhysicsWorkerRemoveBodyMessage | PhysicsWorkerStepMessage;
|
|
124
|
+
export interface PhysicsWorkerReadyMessage {
|
|
125
|
+
type: 'ready';
|
|
126
|
+
}
|
|
127
|
+
export interface PhysicsWorkerBodyCreatedMessage {
|
|
128
|
+
type: 'body-created';
|
|
129
|
+
handle: number;
|
|
130
|
+
centerOfMass: [number, number, number];
|
|
131
|
+
}
|
|
132
|
+
export interface PhysicsWorkerStepResultMessage {
|
|
133
|
+
type: 'step-result';
|
|
134
|
+
buffer: ArrayBuffer;
|
|
135
|
+
}
|
|
136
|
+
export interface PhysicsWorkerErrorMessage {
|
|
137
|
+
type: 'error';
|
|
138
|
+
message: string;
|
|
139
|
+
handle?: number;
|
|
140
|
+
}
|
|
141
|
+
export type PhysicsWorkerOutputMessage = PhysicsWorkerReadyMessage | PhysicsWorkerBodyCreatedMessage | PhysicsWorkerStepResultMessage | PhysicsWorkerErrorMessage;
|
|
142
|
+
export declare function physicsExchangeByteLength(commandCount: number, resultCapacity: number): number;
|
|
143
|
+
export declare function getCapsuleAxisEndpoints(radius: number, totalHeight: number): [[number, number, number], [number, number, number]] | null;
|
|
144
|
+
//# sourceMappingURL=physics-worker-protocol.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"physics-worker-protocol.d.ts","sourceRoot":"","sources":["../../src/physics/physics-worker-protocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
const PHYSICS_PROTOCOL_VERSION = 1;
|
|
8
|
+
/**
|
|
9
|
+
* The header is deliberately one cache line. Integer fields use an Int32Array
|
|
10
|
+
* view and the delta field uses a Float32Array view over the same buffer.
|
|
11
|
+
*/
|
|
12
|
+
const PHYSICS_HEADER_WORDS = 16;
|
|
13
|
+
const PHYSICS_HEADER_BYTES = PHYSICS_HEADER_WORDS * 4;
|
|
14
|
+
const PHYSICS_INPUT_RECORD_FLOATS = 24;
|
|
15
|
+
const PHYSICS_OUTPUT_RECORD_FLOATS = 14;
|
|
16
|
+
function physicsExchangeByteLength(commandCount, resultCapacity) {
|
|
17
|
+
return (PHYSICS_HEADER_BYTES +
|
|
18
|
+
Math.max(commandCount * PHYSICS_INPUT_RECORD_FLOATS * 4, resultCapacity * PHYSICS_OUTPUT_RECORD_FLOATS * 4));
|
|
19
|
+
}
|
|
20
|
+
function getCapsuleAxisEndpoints(radius, totalHeight) {
|
|
21
|
+
if (!Number.isFinite(radius) ||
|
|
22
|
+
!Number.isFinite(totalHeight) ||
|
|
23
|
+
radius <= 0 ||
|
|
24
|
+
totalHeight < radius * 2) {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
const halfSegment = totalHeight / 2 - radius;
|
|
28
|
+
if (halfSegment === 0) {
|
|
29
|
+
return [
|
|
30
|
+
[0, 0, 0],
|
|
31
|
+
[0, 0, 0],
|
|
32
|
+
];
|
|
33
|
+
}
|
|
34
|
+
return [
|
|
35
|
+
[0, -halfSegment, 0],
|
|
36
|
+
[0, halfSegment, 0],
|
|
37
|
+
];
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export { PHYSICS_HEADER_BYTES, PHYSICS_HEADER_WORDS, PHYSICS_INPUT_RECORD_FLOATS, PHYSICS_OUTPUT_RECORD_FLOATS, PHYSICS_PROTOCOL_VERSION, getCapsuleAxisEndpoints, physicsExchangeByteLength };
|
|
41
|
+
//# sourceMappingURL=physics-worker-protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"physics-worker-protocol.js","sources":["../../src/physics/physics-worker-protocol.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\nexport const PHYSICS_PROTOCOL_VERSION = 1;\n\n/**\n * The header is deliberately one cache line. Integer fields use an Int32Array\n * view and the delta field uses a Float32Array view over the same buffer.\n */\nexport const PHYSICS_HEADER_WORDS = 16;\nexport const PHYSICS_HEADER_BYTES = PHYSICS_HEADER_WORDS * 4;\n\nexport const PHYSICS_INPUT_RECORD_FLOATS = 24;\nexport const PHYSICS_OUTPUT_RECORD_FLOATS = 14;\n\nexport const enum PhysicsHeaderIndex {\n Version = 0,\n Sequence = 1,\n CommandCount = 2,\n ResultCount = 3,\n Status = 4,\n StepCount = 5,\n Delta = 8,\n}\n\nexport const enum PhysicsExchangeStatus {\n Ok = 0,\n ResultsTruncated = 1 << 0,\n StepFailed = 1 << 1,\n}\n\nexport const enum PhysicsCommandFlag {\n SetTargetTransform = 1 << 0,\n SetTransform = 1 << 1,\n ResetLinearVelocity = 1 << 2,\n ResetAngularVelocity = 1 << 3,\n ApplyImpulse = 1 << 4,\n SetLinearVelocity = 1 << 5,\n SetAngularVelocity = 1 << 6,\n SetGravityFactor = 1 << 7,\n SetLinearDamping = 1 << 8,\n SetAngularDamping = 1 << 9,\n}\n\nexport const enum PhysicsInputOffset {\n Handle = 0,\n Flags = 1,\n PositionX = 2,\n PositionY = 3,\n PositionZ = 4,\n QuaternionX = 5,\n QuaternionY = 6,\n QuaternionZ = 7,\n QuaternionW = 8,\n ImpulsePointX = 9,\n ImpulsePointY = 10,\n ImpulsePointZ = 11,\n ImpulseX = 12,\n ImpulseY = 13,\n ImpulseZ = 14,\n LinearVelocityX = 15,\n LinearVelocityY = 16,\n LinearVelocityZ = 17,\n AngularVelocityX = 18,\n AngularVelocityY = 19,\n AngularVelocityZ = 20,\n GravityFactor = 21,\n LinearDamping = 22,\n AngularDamping = 23,\n}\n\nexport const enum PhysicsOutputOffset {\n Handle = 0,\n PositionX = 1,\n PositionY = 2,\n PositionZ = 3,\n QuaternionX = 4,\n QuaternionY = 5,\n QuaternionZ = 6,\n QuaternionW = 7,\n LinearVelocityX = 8,\n LinearVelocityY = 9,\n LinearVelocityZ = 10,\n AngularVelocityX = 11,\n AngularVelocityY = 12,\n AngularVelocityZ = 13,\n}\n\nexport type PhysicsWorkerBodyState = 'STATIC' | 'DYNAMIC' | 'KINEMATIC';\nexport type PhysicsWorkerShapeType =\n | 'Sphere'\n | 'Box'\n | 'Cylinder'\n | 'Capsules'\n | 'ConvexHull'\n | 'TriMesh';\n\nexport interface PhysicsWorkerShapeDescriptor {\n type: PhysicsWorkerShapeType;\n dimensions: [number, number, number];\n density: number;\n restitution: number;\n friction: number;\n vertices?: ArrayBuffer;\n indices?: ArrayBuffer;\n}\n\nexport interface PhysicsWorkerInitMessage {\n type: 'init';\n gravity: [number, number, number];\n}\n\nexport interface PhysicsWorkerSetGravityMessage {\n type: 'set-gravity';\n gravity: [number, number, number];\n}\n\nexport interface PhysicsWorkerAddBodyMessage {\n type: 'add-body';\n handle: number;\n shape: PhysicsWorkerShapeDescriptor;\n state: PhysicsWorkerBodyState;\n position: [number, number, number];\n quaternion: [number, number, number, number];\n linearDamping: number;\n angularDamping: number;\n gravityFactor: number;\n centerOfMass: [number, number, number];\n}\n\nexport interface PhysicsWorkerRemoveBodyMessage {\n type: 'remove-body';\n handle: number;\n}\n\nexport interface PhysicsWorkerStepMessage {\n type: 'step';\n buffer: ArrayBuffer;\n}\n\nexport type PhysicsWorkerInputMessage =\n | PhysicsWorkerInitMessage\n | PhysicsWorkerSetGravityMessage\n | PhysicsWorkerAddBodyMessage\n | PhysicsWorkerRemoveBodyMessage\n | PhysicsWorkerStepMessage;\n\nexport interface PhysicsWorkerReadyMessage {\n type: 'ready';\n}\n\nexport interface PhysicsWorkerBodyCreatedMessage {\n type: 'body-created';\n handle: number;\n centerOfMass: [number, number, number];\n}\n\nexport interface PhysicsWorkerStepResultMessage {\n type: 'step-result';\n buffer: ArrayBuffer;\n}\n\nexport interface PhysicsWorkerErrorMessage {\n type: 'error';\n message: string;\n handle?: number;\n}\n\nexport type PhysicsWorkerOutputMessage =\n | PhysicsWorkerReadyMessage\n | PhysicsWorkerBodyCreatedMessage\n | PhysicsWorkerStepResultMessage\n | PhysicsWorkerErrorMessage;\n\nexport function physicsExchangeByteLength(\n commandCount: number,\n resultCapacity: number,\n): number {\n return (\n PHYSICS_HEADER_BYTES +\n Math.max(\n commandCount * PHYSICS_INPUT_RECORD_FLOATS * 4,\n resultCapacity * PHYSICS_OUTPUT_RECORD_FLOATS * 4,\n )\n );\n}\n\nexport function getCapsuleAxisEndpoints(\n radius: number,\n totalHeight: number,\n): [[number, number, number], [number, number, number]] | null {\n if (\n !Number.isFinite(radius) ||\n !Number.isFinite(totalHeight) ||\n radius <= 0 ||\n totalHeight < radius * 2\n ) {\n return null;\n }\n const halfSegment = totalHeight / 2 - radius;\n if (halfSegment === 0) {\n return [\n [0, 0, 0],\n [0, 0, 0],\n ];\n }\n return [\n [0, -halfSegment, 0],\n [0, halfSegment, 0],\n ];\n}\n"],"names":[],"mappings":"AAAA;;;;;AAKG;AAEI,MAAM,wBAAwB,GAAG;AAExC;;;AAGG;AACI,MAAM,oBAAoB,GAAG;AAC7B,MAAM,oBAAoB,GAAG,oBAAoB,GAAG;AAEpD,MAAM,2BAA2B,GAAG;AACpC,MAAM,4BAA4B,GAAG;AAiKtC,SAAU,yBAAyB,CACvC,YAAoB,EACpB,cAAsB,EAAA;AAEtB,IAAA,QACE,oBAAoB;AACpB,QAAA,IAAI,CAAC,GAAG,CACN,YAAY,GAAG,2BAA2B,GAAG,CAAC,EAC9C,cAAc,GAAG,4BAA4B,GAAG,CAAC,CAClD;AAEL;AAEM,SAAU,uBAAuB,CACrC,MAAc,EACd,WAAmB,EAAA;AAEnB,IAAA,IACE,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AACxB,QAAA,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC;AAC7B,QAAA,MAAM,IAAI,CAAC;AACX,QAAA,WAAW,GAAG,MAAM,GAAG,CAAC,EACxB;AACA,QAAA,OAAO,IAAI;IACb;AACA,IAAA,MAAM,WAAW,GAAG,WAAW,GAAG,CAAC,GAAG,MAAM;AAC5C,IAAA,IAAI,WAAW,KAAK,CAAC,EAAE;QACrB,OAAO;AACL,YAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACT,YAAA,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;SACV;IACH;IACA,OAAO;AACL,QAAA,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;AACpB,QAAA,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;KACpB;AACH;;;;"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
export declare function reusableFloat32View(current: Float32Array | undefined, buffer: ArrayBufferLike): Float32Array;
|
|
8
|
+
//# sourceMappingURL=physics-worker-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"physics-worker-utils.d.ts","sourceRoot":"","sources":["../../src/physics/physics-worker-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,YAAY,GAAG,SAAS,EACjC,MAAM,EAAE,eAAe,GACtB,YAAY,CAEd"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
function reusableFloat32View(current, buffer) {
|
|
8
|
+
return (current === null || current === void 0 ? void 0 : current.buffer) === buffer ? current : new Float32Array(buffer);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export { reusableFloat32View };
|
|
12
|
+
//# sourceMappingURL=physics-worker-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"physics-worker-utils.js","sources":["../../src/physics/physics-worker-utils.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\nexport function reusableFloat32View(\n current: Float32Array | undefined,\n buffer: ArrayBufferLike,\n): Float32Array {\n return current?.buffer === buffer ? current : new Float32Array(buffer);\n}\n"],"names":[],"mappings":"AAAA;;;;;AAKG;AAEG,SAAU,mBAAmB,CACjC,OAAiC,EACjC,MAAuB,EAAA;IAEvB,OAAO,CAAA,OAAO,KAAA,IAAA,IAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,MAAK,MAAM,GAAG,OAAO,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC;AACxE;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"physics-worker.d.ts","sourceRoot":"","sources":["../../src/physics/physics-worker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|