@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.
- 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/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/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/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/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/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/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/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 +7 -6
- package/dist/index.js.map +1 -1
- package/dist/init/index.d.ts +2 -2
- package/dist/init/index.d.ts.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 +48 -43
- 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-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/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-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/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/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/project/normalize.js +7 -1
- package/dist/project/normalize.js.map +1 -1
- package/dist/project/types.d.ts +7 -1
- package/dist/project/types.d.ts.map +1 -1
- package/dist/project/validation.js +36 -2
- package/dist/project/validation.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/ui/follow.d.ts.map +1 -1
- package/dist/ui/follow.js +0 -1
- package/dist/ui/follow.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/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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"}
|