@iwsdk/core 0.5.3 → 1.0.0-rc.0

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 (140) hide show
  1. package/README.md +22 -1
  2. package/dist/asset/asset-manager.d.ts.map +1 -1
  3. package/dist/asset/asset-manager.js +3 -2
  4. package/dist/asset/asset-manager.js.map +1 -1
  5. package/dist/camera/camera-system.d.ts +7 -3
  6. package/dist/camera/camera-system.d.ts.map +1 -1
  7. package/dist/camera/camera-system.js +81 -50
  8. package/dist/camera/camera-system.js.map +1 -1
  9. package/dist/camera/camera-utils.d.ts +5 -0
  10. package/dist/camera/camera-utils.d.ts.map +1 -1
  11. package/dist/camera/camera-utils.js +8 -1
  12. package/dist/camera/camera-utils.js.map +1 -1
  13. package/dist/depth/depth-sensing-system.d.ts +3 -0
  14. package/dist/depth/depth-sensing-system.d.ts.map +1 -1
  15. package/dist/depth/depth-sensing-system.js +55 -1
  16. package/dist/depth/depth-sensing-system.js.map +1 -1
  17. package/dist/ecs/world.d.ts +2 -0
  18. package/dist/ecs/world.d.ts.map +1 -1
  19. package/dist/ecs/world.js +4 -0
  20. package/dist/ecs/world.js.map +1 -1
  21. package/dist/grab/distance-grabbable.d.ts +5 -0
  22. package/dist/grab/distance-grabbable.d.ts.map +1 -1
  23. package/dist/grab/distance-grabbable.js +5 -0
  24. package/dist/grab/distance-grabbable.js.map +1 -1
  25. package/dist/grab/handles.d.ts +6 -0
  26. package/dist/grab/handles.d.ts.map +1 -1
  27. package/dist/grab/handles.js +46 -12
  28. package/dist/grab/handles.js.map +1 -1
  29. package/dist/grab/one-hand-grabbable.d.ts +5 -0
  30. package/dist/grab/one-hand-grabbable.d.ts.map +1 -1
  31. package/dist/grab/one-hand-grabbable.js +5 -0
  32. package/dist/grab/one-hand-grabbable.js.map +1 -1
  33. package/dist/grab/two-hands-grabbable.d.ts +5 -0
  34. package/dist/grab/two-hands-grabbable.d.ts.map +1 -1
  35. package/dist/grab/two-hands-grabbable.js +5 -0
  36. package/dist/grab/two-hands-grabbable.js.map +1 -1
  37. package/dist/index.js +7 -6
  38. package/dist/index.js.map +1 -1
  39. package/dist/init/index.d.ts +2 -2
  40. package/dist/init/index.d.ts.map +1 -1
  41. package/dist/init/session-grant.d.ts +34 -0
  42. package/dist/init/session-grant.d.ts.map +1 -0
  43. package/dist/init/session-grant.js +89 -0
  44. package/dist/init/session-grant.js.map +1 -0
  45. package/dist/init/world-initializer.d.ts +87 -4
  46. package/dist/init/world-initializer.d.ts.map +1 -1
  47. package/dist/init/world-initializer.js +48 -43
  48. package/dist/init/world-initializer.js.map +1 -1
  49. package/dist/init/xr.d.ts +19 -0
  50. package/dist/init/xr.d.ts.map +1 -1
  51. package/dist/init/xr.js +136 -41
  52. package/dist/init/xr.js.map +1 -1
  53. package/dist/input/canvas-pointer-system.d.ts +2 -0
  54. package/dist/input/canvas-pointer-system.d.ts.map +1 -1
  55. package/dist/input/canvas-pointer-system.js +33 -13
  56. package/dist/input/canvas-pointer-system.js.map +1 -1
  57. package/dist/input/input-system.d.ts.map +1 -1
  58. package/dist/input/input-system.js +5 -2
  59. package/dist/input/input-system.js.map +1 -1
  60. package/dist/layers/xr-cylinder-layer.d.ts +2 -1
  61. package/dist/layers/xr-cylinder-layer.d.ts.map +1 -1
  62. package/dist/layers/xr-cylinder-layer.js +2 -1
  63. package/dist/layers/xr-cylinder-layer.js.map +1 -1
  64. package/dist/layers/xr-layer-init.d.ts +19 -0
  65. package/dist/layers/xr-layer-init.d.ts.map +1 -0
  66. package/dist/layers/xr-layer-init.js +20 -0
  67. package/dist/layers/xr-layer-init.js.map +1 -0
  68. package/dist/layers/xr-layer-system.d.ts +41 -1
  69. package/dist/layers/xr-layer-system.d.ts.map +1 -1
  70. package/dist/layers/xr-layer-system.js +506 -132
  71. package/dist/layers/xr-layer-system.js.map +1 -1
  72. package/dist/layers/xr-layer-transform.d.ts +18 -0
  73. package/dist/layers/xr-layer-transform.d.ts.map +1 -0
  74. package/dist/layers/xr-layer-transform.js +115 -0
  75. package/dist/layers/xr-layer-transform.js.map +1 -0
  76. package/dist/layers/xr-quad-layer.d.ts +2 -1
  77. package/dist/layers/xr-quad-layer.d.ts.map +1 -1
  78. package/dist/layers/xr-quad-layer.js +2 -1
  79. package/dist/layers/xr-quad-layer.js.map +1 -1
  80. package/dist/level/level-component-applier.d.ts +2 -0
  81. package/dist/level/level-component-applier.d.ts.map +1 -1
  82. package/dist/level/level-component-applier.js +24 -5
  83. package/dist/level/level-component-applier.js.map +1 -1
  84. package/dist/mcp/ecs-debug-tools.d.ts +4 -1
  85. package/dist/mcp/ecs-debug-tools.d.ts.map +1 -1
  86. package/dist/mcp/ecs-debug-tools.js +113 -10
  87. package/dist/mcp/ecs-debug-tools.js.map +1 -1
  88. package/dist/mcp/index.d.ts +1 -0
  89. package/dist/mcp/index.d.ts.map +1 -1
  90. package/dist/mcp/mcp-runtime.d.ts +2 -0
  91. package/dist/mcp/mcp-runtime.d.ts.map +1 -1
  92. package/dist/mcp/mcp-runtime.js +41 -0
  93. package/dist/mcp/mcp-runtime.js.map +1 -1
  94. package/dist/mcp/ui-debug-tools.d.ts +56 -0
  95. package/dist/mcp/ui-debug-tools.d.ts.map +1 -0
  96. package/dist/mcp/ui-debug-tools.js +412 -0
  97. package/dist/mcp/ui-debug-tools.js.map +1 -0
  98. package/dist/physics/index.js +1 -1
  99. package/dist/physics/physics-runtime.d.ts +22 -0
  100. package/dist/physics/physics-runtime.d.ts.map +1 -0
  101. package/dist/physics/physics-runtime.js +423 -0
  102. package/dist/physics/physics-runtime.js.map +1 -0
  103. package/dist/physics/physics-system.d.ts +84 -108
  104. package/dist/physics/physics-system.d.ts.map +1 -1
  105. package/dist/physics/physics-system.js +686 -555
  106. package/dist/physics/physics-system.js.map +1 -1
  107. package/dist/physics/physics-transport.d.ts +20 -0
  108. package/dist/physics/physics-transport.d.ts.map +1 -0
  109. package/dist/physics/physics-transport.js +111 -0
  110. package/dist/physics/physics-transport.js.map +1 -0
  111. package/dist/physics/physics-worker-protocol.d.ts +144 -0
  112. package/dist/physics/physics-worker-protocol.d.ts.map +1 -0
  113. package/dist/physics/physics-worker-protocol.js +41 -0
  114. package/dist/physics/physics-worker-protocol.js.map +1 -0
  115. package/dist/physics/physics-worker-utils.d.ts +8 -0
  116. package/dist/physics/physics-worker-utils.d.ts.map +1 -0
  117. package/dist/physics/physics-worker-utils.js +12 -0
  118. package/dist/physics/physics-worker-utils.js.map +1 -0
  119. package/dist/physics/physics-worker.d.ts +8 -0
  120. package/dist/physics/physics-worker.d.ts.map +1 -0
  121. package/dist/physics/physics-worker.js +66 -0
  122. package/dist/physics/physics-worker.js.map +1 -0
  123. package/dist/project/normalize.js +7 -1
  124. package/dist/project/normalize.js.map +1 -1
  125. package/dist/project/types.d.ts +7 -1
  126. package/dist/project/types.d.ts.map +1 -1
  127. package/dist/project/validation.js +36 -2
  128. package/dist/project/validation.js.map +1 -1
  129. package/dist/scene-understanding/scene-understanding-system.d.ts +42 -6
  130. package/dist/scene-understanding/scene-understanding-system.d.ts.map +1 -1
  131. package/dist/scene-understanding/scene-understanding-system.js +391 -106
  132. package/dist/scene-understanding/scene-understanding-system.js.map +1 -1
  133. package/dist/schemas/iwsdk-project.v1.schema.json +20 -1
  134. package/dist/ui/follow.d.ts.map +1 -1
  135. package/dist/ui/follow.js +0 -1
  136. package/dist/ui/follow.js.map +1 -1
  137. package/dist/version.d.ts +1 -1
  138. package/dist/version.d.ts.map +1 -1
  139. package/dist/version.js +1 -1
  140. package/package.json +5 -5
@@ -0,0 +1,423 @@
1
+ import HavokPhysics from '@babylonjs/havok';
2
+ import { PHYSICS_PROTOCOL_VERSION, PHYSICS_HEADER_BYTES, PHYSICS_OUTPUT_RECORD_FLOATS, getCapsuleAxisEndpoints, PHYSICS_HEADER_WORDS, PHYSICS_INPUT_RECORD_FLOATS } from './physics-worker-protocol.js';
3
+ import { reusableFloat32View } from './physics-worker-utils.js';
4
+
5
+ /**
6
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
7
+ *
8
+ * This source code is licensed under the MIT license found in the
9
+ * LICENSE file in the root directory of this source tree.
10
+ */
11
+ async function initialize(state, gravity) {
12
+ if (state.destroyed) {
13
+ throw new Error('Physics runtime has been destroyed');
14
+ }
15
+ if (!state.initializePromise) {
16
+ state.initializePromise = (async () => {
17
+ const engine = await HavokPhysics();
18
+ if (state.destroyed) {
19
+ throw new Error('Physics runtime was destroyed during initialization');
20
+ }
21
+ const world = engine.HP_World_Create()[1];
22
+ try {
23
+ engine.HP_World_SetGravity(world, gravity);
24
+ }
25
+ catch (error) {
26
+ engine.HP_World_Release(world);
27
+ throw error;
28
+ }
29
+ state.havok = engine;
30
+ state.havokWorld = world;
31
+ })();
32
+ }
33
+ await state.initializePromise;
34
+ }
35
+ function requireHavok(state) {
36
+ if (!state.havok || !state.havokWorld) {
37
+ throw new Error('Physics runtime received a message before initialization');
38
+ }
39
+ return [state.havok, state.havokWorld];
40
+ }
41
+ function getHeapFloatView(state, engine) {
42
+ state.heapFloatView = reusableFloat32View(state.heapFloatView, engine.HEAPU8.buffer);
43
+ return state.heapFloatView;
44
+ }
45
+ function copyFloat32ToHeap(engine, source) {
46
+ const offset = engine._malloc(source.byteLength);
47
+ new Float32Array(engine.HEAPU8.buffer, offset, source.length).set(source);
48
+ return offset;
49
+ }
50
+ function copyInt32ToHeap(engine, source) {
51
+ const offset = engine._malloc(source.byteLength);
52
+ new Int32Array(engine.HEAPU8.buffer, offset, source.length).set(source);
53
+ return offset;
54
+ }
55
+ function configureShapeMaterial(engine, shape, descriptor) {
56
+ engine.HP_Shape_SetDensity(shape, descriptor.density);
57
+ engine.HP_Shape_SetMaterial(shape, [
58
+ descriptor.friction,
59
+ descriptor.friction,
60
+ descriptor.restitution,
61
+ engine.MaterialCombine.MINIMUM,
62
+ engine.MaterialCombine.MAXIMUM,
63
+ ]);
64
+ return shape;
65
+ }
66
+ function createShape(engine, descriptor) {
67
+ const dimensions = descriptor.dimensions;
68
+ let shape;
69
+ try {
70
+ switch (descriptor.type) {
71
+ case 'Sphere':
72
+ shape = engine.HP_Shape_CreateSphere([0, 0, 0], dimensions[0])[1];
73
+ break;
74
+ case 'Box':
75
+ shape = engine.HP_Shape_CreateBox([0, 0, 0], [0, 0, 0, 1], dimensions)[1];
76
+ break;
77
+ case 'Cylinder':
78
+ shape = engine.HP_Shape_CreateCylinder([0, -dimensions[1] / 2, 0], [0, dimensions[1] / 2, 0], dimensions[0])[1];
79
+ break;
80
+ case 'Capsules': {
81
+ const endpoints = getCapsuleAxisEndpoints(dimensions[0], dimensions[1]);
82
+ if (!endpoints) {
83
+ throw new Error('Capsule dimensions require a positive radius and a total height greater than or equal to twice the radius');
84
+ }
85
+ shape = engine.HP_Shape_CreateCapsule(endpoints[0], endpoints[1], dimensions[0])[1];
86
+ break;
87
+ }
88
+ case 'ConvexHull': {
89
+ if (!descriptor.vertices) {
90
+ throw new Error('Convex hull body is missing its vertex buffer');
91
+ }
92
+ const vertices = new Float32Array(descriptor.vertices);
93
+ const vertexOffset = copyFloat32ToHeap(engine, vertices);
94
+ try {
95
+ shape = engine.HP_Shape_CreateConvexHull(vertexOffset, vertices.length / 3)[1];
96
+ }
97
+ finally {
98
+ engine._free(vertexOffset);
99
+ }
100
+ break;
101
+ }
102
+ case 'TriMesh': {
103
+ if (!descriptor.vertices || !descriptor.indices) {
104
+ throw new Error('Tri-mesh body is missing vertex or index data');
105
+ }
106
+ const vertices = new Float32Array(descriptor.vertices);
107
+ const indices = new Uint32Array(descriptor.indices);
108
+ const vertexOffset = copyFloat32ToHeap(engine, vertices);
109
+ const indexOffset = copyInt32ToHeap(engine, indices);
110
+ try {
111
+ shape = engine.HP_Shape_CreateMesh(vertexOffset, vertices.length / 3, indexOffset, indices.length / 3)[1];
112
+ }
113
+ finally {
114
+ engine._free(vertexOffset);
115
+ engine._free(indexOffset);
116
+ }
117
+ break;
118
+ }
119
+ }
120
+ return configureShapeMaterial(engine, shape, descriptor);
121
+ }
122
+ catch (error) {
123
+ if (shape) {
124
+ engine.HP_Shape_Release(shape);
125
+ }
126
+ throw error;
127
+ }
128
+ }
129
+ function motionTypeForState(engine, state) {
130
+ switch (state) {
131
+ case 'STATIC':
132
+ return engine.MotionType.STATIC;
133
+ case 'KINEMATIC':
134
+ return engine.MotionType.KINEMATIC;
135
+ case 'DYNAMIC':
136
+ default:
137
+ return engine.MotionType.DYNAMIC;
138
+ }
139
+ }
140
+ function removeBody(state, handle) {
141
+ const entry = state.bodies.get(handle);
142
+ if (!entry) {
143
+ return;
144
+ }
145
+ const [engine, world] = requireHavok(state);
146
+ engine.HP_World_RemoveBody(world, entry.body);
147
+ engine.HP_Body_Release(entry.body);
148
+ engine.HP_Shape_Release(entry.shape);
149
+ state.bodies.delete(handle);
150
+ }
151
+ function addBody(state, message) {
152
+ const [engine, world] = requireHavok(state);
153
+ removeBody(state, message.handle);
154
+ const shape = createShape(engine, message.shape);
155
+ let body;
156
+ let addedToWorld = false;
157
+ try {
158
+ body = engine.HP_Body_Create()[1];
159
+ engine.HP_Body_SetShape(body, shape);
160
+ engine.HP_Body_SetQTransform(body, [message.position, message.quaternion]);
161
+ engine.HP_Body_SetLinearDamping(body, message.linearDamping);
162
+ engine.HP_Body_SetAngularDamping(body, message.angularDamping);
163
+ engine.HP_Body_SetGravityFactor(body, message.gravityFactor);
164
+ const shapeMass = engine.HP_Shape_BuildMassProperties(shape);
165
+ const massProperties = shapeMass[0] === engine.Result.RESULT_OK
166
+ ? shapeMass[1]
167
+ : [[0, 0, 0], 1, [1, 1, 1], [0, 0, 0, 1]];
168
+ if (message.centerOfMass.every((value) => value === Infinity)) {
169
+ message.centerOfMass = [...massProperties[0]];
170
+ }
171
+ else {
172
+ massProperties[0] = [...message.centerOfMass];
173
+ }
174
+ engine.HP_Body_SetMassProperties(body, massProperties);
175
+ engine.HP_Body_SetMotionType(body, motionTypeForState(engine, message.state));
176
+ engine.HP_World_AddBody(world, body, false);
177
+ addedToWorld = true;
178
+ state.bodies.set(message.handle, {
179
+ body,
180
+ shape,
181
+ state: message.state,
182
+ transformOffset: engine.HP_Body_GetWorldTransformOffset(body)[1],
183
+ });
184
+ }
185
+ catch (error) {
186
+ if (body) {
187
+ if (addedToWorld) {
188
+ engine.HP_World_RemoveBody(world, body);
189
+ }
190
+ engine.HP_Body_Release(body);
191
+ }
192
+ engine.HP_Shape_Release(shape);
193
+ throw error;
194
+ }
195
+ return message.centerOfMass;
196
+ }
197
+ function applyCommands(state, buffer) {
198
+ const [engine] = requireHavok(state);
199
+ const ints = new Int32Array(buffer);
200
+ const floats = new Float32Array(buffer);
201
+ const commandCount = ints[2 /* PhysicsHeaderIndex.CommandCount */];
202
+ for (let index = 0; index < commandCount; index++) {
203
+ const base = PHYSICS_HEADER_WORDS + index * PHYSICS_INPUT_RECORD_FLOATS;
204
+ const handle = floats[base + 0 /* PhysicsInputOffset.Handle */];
205
+ const flags = floats[base + 1 /* PhysicsInputOffset.Flags */];
206
+ const entry = state.bodies.get(handle);
207
+ if (!entry) {
208
+ continue;
209
+ }
210
+ if (flags &
211
+ (2 /* PhysicsCommandFlag.SetTransform */ | 1 /* PhysicsCommandFlag.SetTargetTransform */)) {
212
+ const position = [
213
+ floats[base + 2 /* PhysicsInputOffset.PositionX */],
214
+ floats[base + 3 /* PhysicsInputOffset.PositionY */],
215
+ floats[base + 4 /* PhysicsInputOffset.PositionZ */],
216
+ ];
217
+ const quaternion = [
218
+ floats[base + 5 /* PhysicsInputOffset.QuaternionX */],
219
+ floats[base + 6 /* PhysicsInputOffset.QuaternionY */],
220
+ floats[base + 7 /* PhysicsInputOffset.QuaternionZ */],
221
+ floats[base + 8 /* PhysicsInputOffset.QuaternionW */],
222
+ ];
223
+ if (flags & 2 /* PhysicsCommandFlag.SetTransform */) {
224
+ engine.HP_Body_SetQTransform(entry.body, [position, quaternion]);
225
+ }
226
+ if (flags & 1 /* PhysicsCommandFlag.SetTargetTransform */) {
227
+ engine.HP_Body_SetTargetQTransform(entry.body, [position, quaternion]);
228
+ }
229
+ }
230
+ if (flags & 4 /* PhysicsCommandFlag.ResetLinearVelocity */) {
231
+ engine.HP_Body_SetLinearVelocity(entry.body, [0, 0, 0]);
232
+ }
233
+ if (flags & 8 /* PhysicsCommandFlag.ResetAngularVelocity */) {
234
+ engine.HP_Body_SetAngularVelocity(entry.body, [0, 0, 0]);
235
+ }
236
+ if (flags & 16 /* PhysicsCommandFlag.ApplyImpulse */) {
237
+ engine.HP_Body_ApplyImpulse(entry.body, [
238
+ floats[base + 9 /* PhysicsInputOffset.ImpulsePointX */],
239
+ floats[base + 10 /* PhysicsInputOffset.ImpulsePointY */],
240
+ floats[base + 11 /* PhysicsInputOffset.ImpulsePointZ */],
241
+ ], [
242
+ floats[base + 12 /* PhysicsInputOffset.ImpulseX */],
243
+ floats[base + 13 /* PhysicsInputOffset.ImpulseY */],
244
+ floats[base + 14 /* PhysicsInputOffset.ImpulseZ */],
245
+ ]);
246
+ }
247
+ if (flags & 32 /* PhysicsCommandFlag.SetLinearVelocity */) {
248
+ engine.HP_Body_SetLinearVelocity(entry.body, [
249
+ floats[base + 15 /* PhysicsInputOffset.LinearVelocityX */],
250
+ floats[base + 16 /* PhysicsInputOffset.LinearVelocityY */],
251
+ floats[base + 17 /* PhysicsInputOffset.LinearVelocityZ */],
252
+ ]);
253
+ }
254
+ if (flags & 64 /* PhysicsCommandFlag.SetAngularVelocity */) {
255
+ engine.HP_Body_SetAngularVelocity(entry.body, [
256
+ floats[base + 18 /* PhysicsInputOffset.AngularVelocityX */],
257
+ floats[base + 19 /* PhysicsInputOffset.AngularVelocityY */],
258
+ floats[base + 20 /* PhysicsInputOffset.AngularVelocityZ */],
259
+ ]);
260
+ }
261
+ if (flags & 128 /* PhysicsCommandFlag.SetGravityFactor */) {
262
+ engine.HP_Body_SetGravityFactor(entry.body, floats[base + 21 /* PhysicsInputOffset.GravityFactor */]);
263
+ }
264
+ if (flags & 256 /* PhysicsCommandFlag.SetLinearDamping */) {
265
+ engine.HP_Body_SetLinearDamping(entry.body, floats[base + 22 /* PhysicsInputOffset.LinearDamping */]);
266
+ }
267
+ if (flags & 512 /* PhysicsCommandFlag.SetAngularDamping */) {
268
+ engine.HP_Body_SetAngularDamping(entry.body, floats[base + 23 /* PhysicsInputOffset.AngularDamping */]);
269
+ }
270
+ }
271
+ }
272
+ function writeQuaternionFromMatrix(heap, matrixBase, output, outputBase) {
273
+ const m11 = heap[matrixBase];
274
+ const m12 = heap[matrixBase + 4];
275
+ const m13 = heap[matrixBase + 8];
276
+ const m21 = heap[matrixBase + 1];
277
+ const m22 = heap[matrixBase + 5];
278
+ const m23 = heap[matrixBase + 9];
279
+ const m31 = heap[matrixBase + 2];
280
+ const m32 = heap[matrixBase + 6];
281
+ const m33 = heap[matrixBase + 10];
282
+ const trace = m11 + m22 + m33;
283
+ let x;
284
+ let y;
285
+ let z;
286
+ let w;
287
+ if (trace > 0) {
288
+ const scale = 0.5 / Math.sqrt(trace + 1);
289
+ w = 0.25 / scale;
290
+ x = (m32 - m23) * scale;
291
+ y = (m13 - m31) * scale;
292
+ z = (m21 - m12) * scale;
293
+ }
294
+ else if (m11 > m22 && m11 > m33) {
295
+ const scale = 2 * Math.sqrt(1 + m11 - m22 - m33);
296
+ w = (m32 - m23) / scale;
297
+ x = 0.25 * scale;
298
+ y = (m12 + m21) / scale;
299
+ z = (m13 + m31) / scale;
300
+ }
301
+ else if (m22 > m33) {
302
+ const scale = 2 * Math.sqrt(1 + m22 - m11 - m33);
303
+ w = (m13 - m31) / scale;
304
+ x = (m12 + m21) / scale;
305
+ y = 0.25 * scale;
306
+ z = (m23 + m32) / scale;
307
+ }
308
+ else {
309
+ const scale = 2 * Math.sqrt(1 + m33 - m11 - m22);
310
+ w = (m21 - m12) / scale;
311
+ x = (m13 + m31) / scale;
312
+ y = (m23 + m32) / scale;
313
+ z = 0.25 * scale;
314
+ }
315
+ output[outputBase + 4 /* PhysicsOutputOffset.QuaternionX */] = x;
316
+ output[outputBase + 5 /* PhysicsOutputOffset.QuaternionY */] = y;
317
+ output[outputBase + 6 /* PhysicsOutputOffset.QuaternionZ */] = z;
318
+ output[outputBase + 7 /* PhysicsOutputOffset.QuaternionW */] = w;
319
+ }
320
+ function writeResults(state, buffer) {
321
+ const [engine, world] = requireHavok(state);
322
+ const ints = new Int32Array(buffer);
323
+ const floats = new Float32Array(buffer);
324
+ const bodyBuffer = engine.HP_World_GetBodyBuffer(world)[1];
325
+ const maxResults = Math.floor((buffer.byteLength - PHYSICS_HEADER_BYTES) /
326
+ (PHYSICS_OUTPUT_RECORD_FLOATS * 4));
327
+ let resultCount = 0;
328
+ for (const [handle, entry] of state.bodies) {
329
+ if (entry.state === 'STATIC') {
330
+ continue;
331
+ }
332
+ if (resultCount === maxResults) {
333
+ ints[4 /* PhysicsHeaderIndex.Status */] |= 1 /* PhysicsExchangeStatus.ResultsTruncated */;
334
+ break;
335
+ }
336
+ const base = PHYSICS_HEADER_WORDS + resultCount * PHYSICS_OUTPUT_RECORD_FLOATS;
337
+ const matrixBase = (bodyBuffer + entry.transformOffset) >> 2;
338
+ const linearVelocity = engine.HP_Body_GetLinearVelocity(entry.body)[1];
339
+ const angularVelocity = engine.HP_Body_GetAngularVelocity(entry.body)[1];
340
+ const heap = getHeapFloatView(state, engine);
341
+ floats[base + 0 /* PhysicsOutputOffset.Handle */] = handle;
342
+ floats[base + 1 /* PhysicsOutputOffset.PositionX */] = heap[matrixBase + 12];
343
+ floats[base + 2 /* PhysicsOutputOffset.PositionY */] = heap[matrixBase + 13];
344
+ floats[base + 3 /* PhysicsOutputOffset.PositionZ */] = heap[matrixBase + 14];
345
+ writeQuaternionFromMatrix(heap, matrixBase, floats, base);
346
+ floats[base + 8 /* PhysicsOutputOffset.LinearVelocityX */] = linearVelocity[0];
347
+ floats[base + 9 /* PhysicsOutputOffset.LinearVelocityY */] = linearVelocity[1];
348
+ floats[base + 10 /* PhysicsOutputOffset.LinearVelocityZ */] = linearVelocity[2];
349
+ floats[base + 11 /* PhysicsOutputOffset.AngularVelocityX */] = angularVelocity[0];
350
+ floats[base + 12 /* PhysicsOutputOffset.AngularVelocityY */] = angularVelocity[1];
351
+ floats[base + 13 /* PhysicsOutputOffset.AngularVelocityZ */] = angularVelocity[2];
352
+ resultCount++;
353
+ }
354
+ ints[3 /* PhysicsHeaderIndex.ResultCount */] = resultCount;
355
+ }
356
+ /** Shared Havok runtime used by both main-thread and worker transports. */
357
+ class PhysicsRuntime {
358
+ constructor() {
359
+ this.state = {
360
+ bodies: new Map(),
361
+ destroyed: false,
362
+ };
363
+ }
364
+ initialize(gravity) {
365
+ return initialize(this.state, gravity);
366
+ }
367
+ setGravity(gravity) {
368
+ const [engine, world] = requireHavok(this.state);
369
+ engine.HP_World_SetGravity(world, gravity);
370
+ }
371
+ addBody(message) {
372
+ return addBody(this.state, message);
373
+ }
374
+ removeBody(handle) {
375
+ removeBody(this.state, handle);
376
+ }
377
+ step(buffer) {
378
+ const ints = new Int32Array(buffer);
379
+ try {
380
+ if (ints[0 /* PhysicsHeaderIndex.Version */] !== PHYSICS_PROTOCOL_VERSION) {
381
+ throw new Error('Physics exchange buffer protocol version mismatch');
382
+ }
383
+ const [engine, world] = requireHavok(this.state);
384
+ applyCommands(this.state, buffer);
385
+ const floats = new Float32Array(buffer);
386
+ const delta = floats[8 /* PhysicsHeaderIndex.Delta */];
387
+ const stepCount = Math.max(0, ints[5 /* PhysicsHeaderIndex.StepCount */]);
388
+ for (let index = 0; index < stepCount; index++) {
389
+ engine.HP_World_SetIdealStepTime(world, delta);
390
+ engine.HP_World_Step(world, delta);
391
+ }
392
+ writeResults(this.state, buffer);
393
+ return { buffer };
394
+ }
395
+ catch (error) {
396
+ ints[4 /* PhysicsHeaderIndex.Status */] |= 2 /* PhysicsExchangeStatus.StepFailed */;
397
+ ints[3 /* PhysicsHeaderIndex.ResultCount */] = 0;
398
+ return {
399
+ buffer,
400
+ error: error instanceof Error ? error.message : String(error),
401
+ };
402
+ }
403
+ }
404
+ destroy() {
405
+ if (this.state.destroyed) {
406
+ return;
407
+ }
408
+ this.state.destroyed = true;
409
+ for (const handle of [...this.state.bodies.keys()]) {
410
+ removeBody(this.state, handle);
411
+ }
412
+ if (this.state.havok && this.state.havokWorld) {
413
+ this.state.havok.HP_World_Release(this.state.havokWorld);
414
+ }
415
+ this.state.havok = undefined;
416
+ this.state.havokWorld = undefined;
417
+ this.state.heapFloatView = undefined;
418
+ this.state.initializePromise = undefined;
419
+ }
420
+ }
421
+
422
+ export { PhysicsRuntime };
423
+ //# sourceMappingURL=physics-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"physics-runtime.js","sources":["../../src/physics/physics-runtime.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}