babylon-box3d 0.6.0 → 0.7.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.
@@ -0,0 +1,312 @@
1
+ /**
2
+ * Type definitions for the Box3D WebAssembly module used by the Babylon.js Box3DPlugin.
3
+ *
4
+ * The module exposes a flat, handle based C API (see src/box3d_shim.c). Bodies, shape descriptions and joints
5
+ * are integer slots. Vectors and quaternions are passed as individual floats. Functions that return more than one
6
+ * value write into the scratch buffer returned by `_bx_Scratch()` (64 floats), read it through `HEAPF32`.
7
+ *
8
+ * World positions cross in doubles: the entry points that take one take doubles, and those that give one back also
9
+ * write it as doubles, to `_bx_ScratchF64()` or to a double buffer beside their float records (read through
10
+ * `HEAPF64`). The `-f64` builds (BOX3D_DOUBLE_PRECISION) hold positions in doubles, so a body far from the origin moves
11
+ * as it does near it; the default builds hold floats, and their doubles are those floats widened.
12
+ */
13
+
14
+ export interface Box3DModuleOptions {
15
+ /** Resolves the location of box3d.wasm (and other runtime files). */
16
+ locateFile?: (file: string, prefix: string) => string;
17
+ /** Called with progress and error messages by the emscripten runtime. */
18
+ print?: (text: string) => void;
19
+ printErr?: (text: string) => void;
20
+ /** Supplies a pre-fetched wasm binary instead of fetching it. */
21
+ wasmBinary?: ArrayBuffer;
22
+ }
23
+
24
+ /** Emscripten heap views. Do not cache them: they are replaced when the memory grows. */
25
+ export interface Box3DHeap {
26
+ HEAPF32: Float32Array;
27
+ HEAPF64: Float64Array;
28
+ HEAP32: Int32Array;
29
+ HEAPU32: Uint32Array;
30
+ HEAPU8: Uint8Array;
31
+ }
32
+
33
+ /** All exported shim functions. Slots are integers, 0 is the null slot. */
34
+ export interface Box3DExports {
35
+ _malloc(bytes: number): number;
36
+ _free(ptr: number): void;
37
+ _bx_Scratch(): number;
38
+ /** 16 doubles: world positions given back, see `_bx_Body_GetTransform`. */
39
+ _bx_ScratchF64(): number;
40
+ /** 1 in an `-f64` build, which holds world positions in doubles. */
41
+ _bx_IsDoublePrecision(): number;
42
+ _bx_Alloc(bytes: number): number;
43
+ _bx_Free(ptr: number): void;
44
+ /** major * 10000 + minor * 100 + revision */
45
+ _bx_GetVersion(): number;
46
+
47
+ // world
48
+ /** Workers this build can put on a step, counting the calling thread: 1 unless this is the threaded module. */
49
+ _bx_GetMaxWorkers(): number;
50
+ /** workerCount counts the calling thread and is clamped to _bx_GetMaxWorkers(); box3d builds its threads here. */
51
+ _bx_CreateWorld(gx: number, gy: number, gz: number, workerCount: number): number;
52
+ _bx_World_GetWorkerCount(world: number): number;
53
+ _bx_DestroyWorld(world: number): void;
54
+ _bx_World_Step(world: number, dt: number, subSteps: number): void;
55
+ _bx_World_SetGravity(world: number, gx: number, gy: number, gz: number): void;
56
+ _bx_World_SetMaximumLinearSpeed(world: number, speed: number): void;
57
+ _bx_World_GetMaximumLinearSpeed(world: number): number;
58
+ _bx_World_EnableSleeping(world: number, flag: number): void;
59
+ _bx_World_EnableContinuous(world: number, flag: number): void;
60
+ _bx_World_SetContactTuning(world: number, hertz: number, dampingRatio: number, contactSpeed: number): void;
61
+ _bx_World_Explode(world: number, px: number, py: number, pz: number, radius: number, falloff: number, impulsePerArea: number): void;
62
+ _bx_World_GetAwakeBodyCount(world: number): number;
63
+ /** Joint force/torque threshold events from the last step (0 with the default thresholds). */
64
+ _bx_World_GetJointEventCount(world: number): number;
65
+ /** The most the world's step stack has held at once, in bytes. */
66
+ _bx_World_GetStackUsed(world: number): number;
67
+ /** scratch: [bodyCount, shapeCount, contactCount, jointCount, islandCount, stepMs, collideMs, solveMs] */
68
+ _bx_World_GetStats(world: number): void;
69
+
70
+ // events (records are copied into flat float buffers, see the shim for the strides)
71
+ _bx_MoveEventsPtr(): number;
72
+ _bx_ContactEventsPtr(): number;
73
+ _bx_SensorEventsPtr(): number;
74
+ _bx_World_GetMoveEvents(world: number): number;
75
+ _bx_World_GetContactEvents(world: number): number;
76
+ _bx_World_GetSensorEvents(world: number): number;
77
+
78
+ // bodies (type: 0 static, 1 kinematic, 2 dynamic)
79
+ _bx_CreateBody(world: number, type: number, px: number, py: number, pz: number, qx: number, qy: number, qz: number, qw: number, isAwake: number): number;
80
+ _bx_DestroyBody(body: number): void;
81
+ _bx_Body_SetType(body: number, type: number): void;
82
+ _bx_Body_GetType(body: number): number;
83
+ _bx_Body_SetTransform(body: number, px: number, py: number, pz: number, qx: number, qy: number, qz: number, qw: number): void;
84
+ /** scratch: [px, py, pz, qx, qy, qz, qw] as floats; scratchF64: [px, py, pz] as the build holds them */
85
+ _bx_Body_GetTransform(body: number): void;
86
+ _bx_Body_SetTargetTransform(body: number, px: number, py: number, pz: number, qx: number, qy: number, qz: number, qw: number, dt: number): void;
87
+ _bx_Body_SetLinearVelocity(body: number, x: number, y: number, z: number): void;
88
+ /** scratch: [x, y, z] */
89
+ _bx_Body_GetLinearVelocity(body: number): void;
90
+ _bx_Body_SetAngularVelocity(body: number, x: number, y: number, z: number): void;
91
+ /** scratch: [x, y, z] */
92
+ _bx_Body_GetAngularVelocity(body: number): void;
93
+ _bx_Body_SetLinearDamping(body: number, damping: number): void;
94
+ _bx_Body_GetLinearDamping(body: number): number;
95
+ _bx_Body_SetAngularDamping(body: number, damping: number): void;
96
+ _bx_Body_GetAngularDamping(body: number): number;
97
+ _bx_Body_SetGravityScale(body: number, scale: number): void;
98
+ _bx_Body_GetGravityScale(body: number): number;
99
+ _bx_Body_ApplyForce(body: number, fx: number, fy: number, fz: number, px: number, py: number, pz: number): void;
100
+ _bx_Body_ApplyForceToCenter(body: number, fx: number, fy: number, fz: number): void;
101
+ _bx_Body_ApplyTorque(body: number, x: number, y: number, z: number): void;
102
+ _bx_Body_ApplyLinearImpulse(body: number, ix: number, iy: number, iz: number, px: number, py: number, pz: number): void;
103
+ _bx_Body_ApplyLinearImpulseToCenter(body: number, ix: number, iy: number, iz: number): void;
104
+ _bx_Body_ApplyAngularImpulse(body: number, x: number, y: number, z: number): void;
105
+ _bx_Body_SetAwake(body: number, awake: number): void;
106
+ _bx_Body_IsAwake(body: number): number;
107
+ _bx_Body_EnableSleep(body: number, flag: number): void;
108
+ _bx_Body_SetBullet(body: number, flag: number): void;
109
+ /** Continuous collision for this body alone, on by default; the world's switch still applies. */
110
+ _bx_Body_EnableContinuous(body: number, flag: number): void;
111
+ _bx_Body_IsContinuousEnabled(body: number): number;
112
+ /**
113
+ * Crushable contacts for the body's shape `index`: each of its contacts pushes with at most `maxForce` newtons,
114
+ * and a plastic one (1) keeps its overlap instead of pushing out. A `maxForce` of zero or less makes it rigid.
115
+ */
116
+ _bx_Body_SetShapeCrush(body: number, index: number, maxForce: number, plastic: number): void;
117
+ /** scratch: [maxForce, plastic] for the body's shape `index`, zeros when it is rigid or there is no such shape. */
118
+ _bx_Body_GetShapeCrush(body: number, index: number): void;
119
+ /**
120
+ * Every touching contact manifold on the body, as the body feels it, written from `_bx_BodyContactsPtr`: 48 floats
121
+ * each, [shapeIndex, otherBody, otherShapeIndex, otherShapeDesc, normal xyz (the push on this body), friction impulse
122
+ * xyz on this body, twist impulse, pointCount], then 4 points of 9: [x, y, z, separation, normalImpulse (last
123
+ * substep), totalNormalImpulse (Box3D's, summed over every solver pass: nonzero means it carried load),
124
+ * normalVelocity, triangleIndex, material]. Returns the record count.
125
+ */
126
+ _bx_Body_GetContacts(body: number): number;
127
+ _bx_BodyContactsPtr(): number;
128
+ /** The points of the records `_bx_Body_GetContacts` wrote, as doubles: 12 a record, [x, y, z] for each of its 4. */
129
+ _bx_BodyContactPointsF64Ptr(): number;
130
+ /** Per-shape handles: each changes one shape, resets only its contacts, and keeps every shape's index. */
131
+ /** Replaces shape `index` with the hull of `pointCount` points (xyz floats at `points`) in the body's frame; 1 if done. */
132
+ _bx_Body_SetShapeHull(body: number, index: number, points: number, pointCount: number): number;
133
+ /** Moves shape `index` (a hull, sphere or capsule) by (dx, dy, dz) in the body's frame; 1 if done. */
134
+ _bx_Body_TranslateShape(body: number, index: number, dx: number, dy: number, dz: number): number;
135
+ _bx_Body_SetShapeFilter(body: number, index: number, categoryBits: number, maskBits: number, groupIndex: number): void;
136
+ /** Removes shape `index`; the other shapes keep their indices. */
137
+ _bx_Body_RemoveShape(body: number, index: number): void;
138
+ _bx_Body_HasShape(body: number, index: number): number;
139
+ /** scratch: [kind (0 sphere, 1 capsule, 2 hull, -1 none), vertexCount, aabb min xyz, aabb max xyz] in the body's frame */
140
+ _bx_Body_GetShapeInfo(body: number, index: number): void;
141
+ _bx_Body_AllowFastRotation(body: number, flag: number): void;
142
+ _bx_Body_SetMotionLocks(body: number, lx: number, ly: number, lz: number, ax: number, ay: number, az: number): void;
143
+ /** scratch: [minx, miny, minz, maxx, maxy, maxz] */
144
+ _bx_Body_GetAABB(body: number): void;
145
+ /** scratch: [mass, cx, cy, cz, ixx, iyy, izz, ixy, ixz, iyz] */
146
+ _bx_Body_GetMassData(body: number): void;
147
+ _bx_Body_SetMassData(body: number, mass: number, cx: number, cy: number, cz: number, ixx: number, iyy: number, izz: number): void;
148
+ /** Full symmetric inertia tensor about the center of mass. */
149
+ _bx_Body_SetMassDataFull(
150
+ body: number,
151
+ mass: number,
152
+ cx: number,
153
+ cy: number,
154
+ cz: number,
155
+ ixx: number,
156
+ iyy: number,
157
+ izz: number,
158
+ ixy: number,
159
+ ixz: number,
160
+ iyz: number
161
+ ): void;
162
+ /** scratch: [lx, ly, lz, ax, ay, az], 1 where the motion is locked */
163
+ _bx_Body_GetMotionLocks(body: number): void;
164
+ /** Mass data the body's shapes would give it whatever its type (Box3D keeps mass 0 on static and kinematic bodies). */
165
+ _bx_Body_ComputeShapeMassData(body: number): void;
166
+ _bx_Body_ApplyMassFromShapes(body: number): void;
167
+ _bx_Body_GetShapeCount(body: number): number;
168
+ /**
169
+ * Gives the body a feature key (an integer from 1 to 2^44 - 1; 0 takes it off) and each of its shapes, now and when
170
+ * it is next shaped, (key << 20) | its index. New contacts are made, continuous collision sweeps and a closest
171
+ * cast's ties are broken in the order of these keys, so keyed statics pair the same whatever order they were made in.
172
+ */
173
+ _bx_Body_SetFeatureKey(body: number, key: number): void;
174
+ _bx_Body_GetFeatureKey(body: number): number;
175
+ /** Shape `index`'s own feature key, as Box3D orders by it (exact up to 2^53). */
176
+ _bx_Body_GetShapeFeatureKey(body: number, index: number): number;
177
+ /** Begin/end touch events and hit events on the body's shapes, enabled separately. */
178
+ _bx_Body_SetEventFlags(body: number, contactEvents: number, hitEvents: number): void;
179
+ /** Bit 1: begin/end touch events, bit 2: hit events. */
180
+ _bx_Body_GetEventFlags(body: number): number;
181
+ /** Enables both begin/end touch and hit events. */
182
+ _bx_Body_EnableContactEvents(body: number, flag: number): void;
183
+ /** Replaces every shape on the body with an instance of the description (0 removes all shapes). */
184
+ _bx_Body_SetShape(body: number, desc: number): void;
185
+ /** Applies changed description properties (1 filter, 2 material, 4 density) to live shapes without rebuilding them. */
186
+ _bx_Body_SyncShapeDesc(body: number, desc: number, what: number): void;
187
+ /** Total number of box3d shapes the shim has created, to tell a rebuild from an in place update. */
188
+ _bx_GetShapeBuildCount(): number;
189
+ /** Live shape descriptions, including meshes baked for container children. */
190
+ _bx_GetShapeDescCount(): number;
191
+ /** Slot lookups the shim rejected (a handle used after it was destroyed, or a loader and a wasm from different builds). */
192
+ _bx_GetRejectedSlotCount(): number;
193
+ _bx_Body_GetShapeDesc(body: number): number;
194
+
195
+ // shape descriptions
196
+ _bx_ShapeDesc_CreateSphere(cx: number, cy: number, cz: number, radius: number): number;
197
+ _bx_ShapeDesc_CreateCapsule(ax: number, ay: number, az: number, bx: number, by: number, bz: number, radius: number): number;
198
+ _bx_ShapeDesc_CreateBox(hx: number, hy: number, hz: number, px: number, py: number, pz: number, qx: number, qy: number, qz: number, qw: number): number;
199
+ _bx_ShapeDesc_CreateCylinder(height: number, radius: number, sides: number, px: number, py: number, pz: number, qx: number, qy: number, qz: number, qw: number): number;
200
+ /** points: pointer to pointCount * 3 floats */
201
+ _bx_ShapeDesc_CreateHull(points: number, pointCount: number): number;
202
+ /** vertices: vertexCount * 3 floats, indices: triangleCount * 3 int32 */
203
+ _bx_ShapeDesc_CreateMesh(vertices: number, vertexCount: number, indices: number, triangleCount: number, sx: number, sy: number, sz: number, clockwise: number, weld: number): number;
204
+ /** heights: countX * countZ floats indexed [z * countX + x]; materials: one byte a cell, (countX - 1) * (countZ - 1),
205
+ * or 0 for none; local offset (ox, oy, oz) */
206
+ _bx_ShapeDesc_CreateHeightField(heights: number, materials: number, countX: number, countZ: number, sx: number, sy: number, sz: number, clockwise: number, ox: number, oy: number, oz: number): number;
207
+ /**
208
+ * Where a mesh or height field description's data starts, and how many bytes it has (0 for any other description).
209
+ * Box3D keeps either as one block addressed by offsets, with no pointers in it, so the bytes can be copied to another
210
+ * instance of the same build (one with no world, on a worker) and made into a shape there with
211
+ * `_bx_ShapeDesc_CreateMeshFromBytes` or `_bx_ShapeDesc_CreateHeightFieldFromBytes`.
212
+ */
213
+ _bx_ShapeDesc_GetGeometryBytes(desc: number): number;
214
+ _bx_ShapeDesc_GetGeometryByteCount(desc: number): number;
215
+ /** A mesh description from a copy of a mesh block put at `bytes`, with the description's scale. 0 if it is not one. */
216
+ _bx_ShapeDesc_CreateMeshFromBytes(bytes: number, byteCount: number, sx: number, sy: number, sz: number): number;
217
+ /** A height field description from a copy of a height field block put at `bytes`, with a local offset. 0 if it is not one. */
218
+ _bx_ShapeDesc_CreateHeightFieldFromBytes(bytes: number, byteCount: number, ox: number, oy: number, oz: number): number;
219
+ _bx_ShapeDesc_CreateContainer(): number;
220
+ _bx_ShapeDesc_AddChild(parent: number, child: number, px: number, py: number, pz: number, qx: number, qy: number, qz: number, qw: number, sx: number, sy: number, sz: number): void;
221
+ _bx_ShapeDesc_RemoveChild(parent: number, index: number): void;
222
+ _bx_ShapeDesc_GetChildCount(desc: number): number;
223
+ _bx_ShapeDesc_GetKind(desc: number): number;
224
+ _bx_ShapeDesc_SetMaterial(desc: number, friction: number, restitution: number): void;
225
+ _bx_ShapeDesc_GetFriction(desc: number): number;
226
+ _bx_ShapeDesc_GetRestitution(desc: number): number;
227
+ _bx_ShapeDesc_SetDensity(desc: number, density: number): void;
228
+ _bx_ShapeDesc_GetDensity(desc: number): number;
229
+ _bx_ShapeDesc_SetFilter(desc: number, categoryBits: number, maskBits: number): void;
230
+ _bx_ShapeDesc_GetCategoryBits(desc: number): number;
231
+ _bx_ShapeDesc_GetMaskBits(desc: number): number;
232
+ _bx_ShapeDesc_SetGroup(desc: number, groupIndex: number): void;
233
+ _bx_ShapeDesc_SetRollingResistance(desc: number, value: number): void;
234
+ _bx_ShapeDesc_SetSensor(desc: number, flag: number): void;
235
+ _bx_ShapeDesc_IsSensor(desc: number): number;
236
+ /**
237
+ * 1 (the default): a static shape made from this description looks for its own pairs on the next step. 0: it never
238
+ * enters the broad phase's move buffer and waits for a moving shape to find it, which saves the step stack it would
239
+ * reserve and pairs a static made late on the same step as one made at the start. Off on a container, it is off for
240
+ * every shape made from its children.
241
+ */
242
+ _bx_ShapeDesc_SetInvokeContactCreation(desc: number, flag: number): void;
243
+ _bx_ShapeDesc_GetInvokeContactCreation(desc: number): number;
244
+ /** scratch: [minx, miny, minz, maxx, maxy, maxz] */
245
+ _bx_ShapeDesc_GetAABB(desc: number): void;
246
+ _bx_ShapeDesc_Destroy(desc: number): void;
247
+ _bx_ShapeDesc_BuildDebugGeometry(desc: number): number;
248
+ _bx_DebugPositionsPtr(): number;
249
+ _bx_DebugIndicesPtr(): number;
250
+ _bx_DebugIndexCount(): number;
251
+
252
+ // joints (type: 0 weld, 1 spherical, 2 revolute, 3 prismatic, 4 distance, 5 filter, 6 wheel, 7 parallel)
253
+ /** Frames are read from scratch[0..13], type specific parameters from scratch[14..]. */
254
+ _bx_CreateJoint(world: number, type: number, bodyA: number, bodyB: number, collideConnected: number, param: number): number;
255
+ _bx_DestroyJoint(joint: number): void;
256
+ _bx_Joint_IsValid(joint: number): number;
257
+ _bx_Joint_SetCollideConnected(joint: number, flag: number): void;
258
+ _bx_Joint_SetConstraintTuning(joint: number, hertz: number, dampingRatio: number): void;
259
+ _bx_Joint_WakeBodies(joint: number): void;
260
+ _bx_Joint_EnableLimit(joint: number, flag: number): void;
261
+ _bx_Joint_SetLimits(joint: number, lower: number, upper: number): void;
262
+ _bx_Joint_SetTwistLimits(joint: number, enable: number, lower: number, upper: number): void;
263
+ _bx_Joint_EnableMotor(joint: number, flag: number): void;
264
+ _bx_Joint_SetMotorSpeed(joint: number, speed: number): void;
265
+ /** Spherical joints: target relative angular velocity in joint frame A, with a torque limit. */
266
+ _bx_Joint_SetSphericalMotor(joint: number, enable: number, x: number, y: number, z: number, maxTorque: number): void;
267
+ /** Re-converts a spherical motor target to world space, call once per step while the target is non-zero. */
268
+ _bx_Joint_UpdateMotorFrame(joint: number): void;
269
+ /** Spherical joints: target rotation of the spring, frame B relative to frame A. */
270
+ _bx_Joint_SetSphericalTarget(joint: number, qx: number, qy: number, qz: number, qw: number): void;
271
+ _bx_Joint_SetMaxMotorForce(joint: number, force: number): void;
272
+ _bx_Joint_EnableSpring(joint: number, flag: number): void;
273
+ _bx_Joint_SetSpring(joint: number, hertz: number, dampingRatio: number): void;
274
+ _bx_Joint_SetTarget(joint: number, target: number): void;
275
+ _bx_Joint_GetPosition(joint: number): number;
276
+ /** Reads frame A from scratch[0..6] and pivot B from scratch[7..9], writes the frame B rotation to scratch[10..13]. */
277
+ _bx_ComputeAlignedFrameB(bodyA: number, bodyB: number): void;
278
+ _bx_WheelJoint_SetSpinMotorSpeed(joint: number, speed: number): void;
279
+ _bx_WheelJoint_SetMaxSpinTorque(joint: number, torque: number): void;
280
+ _bx_WheelJoint_EnableSpinMotor(joint: number, flag: number): void;
281
+ _bx_WheelJoint_SetTargetSteeringAngle(joint: number, radians: number): void;
282
+ _bx_WheelJoint_SetSuspension(joint: number, hertz: number, dampingRatio: number): void;
283
+
284
+ // queries
285
+ _bx_RayHitsPtr(): number;
286
+ /** The hit points of the last ray or shape cast, as doubles: [x, y, z] a hit, beside `_bx_RayHitsPtr`'s records. */
287
+ _bx_RayHitPointsF64Ptr(): number;
288
+ /** Returns the hit count; hits are 11 floats each: [px, py, pz, nx, ny, nz, fraction, bodySlot, shapeDesc, triangleIndex, shapeIndex] */
289
+ _bx_World_CastRay(world: number, ox: number, oy: number, oz: number, dx: number, dy: number, dz: number, categoryBits: number, maskBits: number, ignoreBody: number, hitSensors: number, closestOnly: number): number;
290
+ /**
291
+ * Casts the hull of `count` points (xyz floats at `points`, relative to the origin) grown by `radius` along
292
+ * (dx, dy, dz). Hits are written as `_bx_World_CastRay` writes them, the fraction being where the surfaces touch.
293
+ */
294
+ _bx_World_CastShape(world: number, ox: number, oy: number, oz: number, points: number, count: number, radius: number, dx: number, dy: number, dz: number, categoryBits: number, maskBits: number, ignoreBody: number, closestOnly: number): number;
295
+ /** Every shape the hull of the points grown by `radius` overlaps, written from `_bx_OverlapsPtr` as [bodySlot, shapeIndex, shapeDesc]. */
296
+ _bx_World_OverlapShape(world: number, ox: number, oy: number, oz: number, points: number, count: number, radius: number, categoryBits: number, maskBits: number, ignoreBody: number): number;
297
+ _bx_OverlapsPtr(): number;
298
+ /** Shape `index`'s geometry in the body's frame, from `_bx_GeometryPtr`: sphere [c, r], capsule [c1, c2, r], or hull points. Returns the float count. */
299
+ _bx_Body_GetShapeGeometry(body: number, index: number): number;
300
+ _bx_GeometryPtr(): number;
301
+ }
302
+
303
+ export type Box3DModule = Box3DExports & Box3DHeap;
304
+
305
+ /**
306
+ * Instantiates the Box3D WebAssembly module.
307
+ * @param options emscripten module options, `locateFile` is needed when the wasm is not next to the script
308
+ * @returns the resolved module, pass it to `new Box3DPlugin(true, module)`
309
+ */
310
+ declare function Box3D(options?: Box3DModuleOptions): Promise<Box3DModule>;
311
+
312
+ export default Box3D;
@@ -0,0 +1,2 @@
1
+ async function Box3D(moduleArg={}){var Module=moduleArg;var ENVIRONMENT_IS_WEB=!!globalThis.window;var ENVIRONMENT_IS_WORKER=!!globalThis.WorkerGlobalScope;var ENVIRONMENT_IS_NODE=globalThis.process?.versions?.node&&globalThis.process?.type!="renderer";var programArgs=[];var thisProgram="./this.program";var _scriptName=import.meta.url;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){try{scriptDirectory=new URL(".",_scriptName).href}catch{}{if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=async url=>{var response=await fetch(url,{credentials:"same-origin"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+" : "+response.url)}}}else{}var out=console.log.bind(console);var err=console.error.bind(console);var wasmBinary;var ABORT=false;class EmscriptenEH{}class EmscriptenSjLj extends EmscriptenEH{}var runtimeInitialized=false;function getMemoryBuffer(){return wasmMemory.buffer}function updateMemoryViews(){if(HEAP8?.buffer?.resizable)return;var b=getMemoryBuffer();HEAP8=new Int8Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b);HEAP64=new BigInt64Array(b)}function preRun(){var preRun=Module["preRun"];if(preRun){if(typeof preRun=="function")preRun=[preRun];onPreRuns.push(...preRun)}callRuntimeCallbacks(onPreRuns)}function initRuntime(){runtimeInitialized=true;wasmExports["__wasm_call_ctors"]()}function postRun(){var postRun=Module["postRun"];if(postRun){if(typeof postRun=="function")postRun=[postRun];onPostRuns.push(...postRun)}callRuntimeCallbacks(onPostRuns)}function abort(what){Module["onAbort"]?.(what);what=`Aborted(${what})`;err(what);ABORT=true;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);throw e}var wasmBinaryFile;function findWasmBinary(){if(Module["locateFile"]){return locateFile("box3d.wasm")}return new URL("box3d.wasm",import.meta.url).href}function getBinarySync(file){if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary){try{var response=fetch(binaryFile,{credentials:"same-origin"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){var imports={env:wasmImports,wasi_snapshot_preview1:wasmImports};return imports}async function createWasm(){function receiveInstance(instance){wasmExports=instance.exports;assignWasmExports(wasmExports);updateMemoryViews();return wasmExports}function receiveInstantiationResult(result){return receiveInstance(result["instance"])}var info=getWasmImports();var instantiateWasm=Module["instantiateWasm"];if(instantiateWasm){return new Promise(resolve=>{instantiateWasm(info,inst=>resolve(receiveInstance(inst)))})}wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var HEAP8;var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPostRuns=[];var onPreRuns=[];var noExitRuntime=true;var _emscripten_get_now=()=>performance.now();var _emscripten_date_now=()=>Date.now();var nowIsMonotonic=1;var checkWasiClock=clock_id=>clock_id>=0&&clock_id<=3;var INT53_MAX=9007199254740992;var INT53_MIN=-9007199254740992;var bigintToI53Checked=num=>num<INT53_MIN||num>INT53_MAX?NaN:Number(num);var HEAP64;function _clock_time_get(clk_id,ignored_precision,ptime){ignored_precision=bigintToI53Checked(ignored_precision);if(!checkWasiClock(clk_id)){return 28}var now;if(clk_id===0){now=_emscripten_date_now()}else if(nowIsMonotonic){now=_emscripten_get_now()}else{return 52}var nsec=Math.round(now*1e3*1e3);HEAP64[ptime>>3]=BigInt(nsec);return 0}var getHeapMax=()=>2147483648;var alignMemory=(size,alignment)=>Math.ceil(size/alignment)*alignment;var growMemory=size=>{var oldHeapSize=wasmMemory.buffer.byteLength;var pages=(size-oldHeapSize+65535)/65536|0;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}};var HEAPU8;var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignMemory(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}return false};var printCharBuffers=[null,[],[]];var UTF8Decoder=globalThis.TextDecoder&&new TextDecoder;var findStringEnd=(heapOrArray,idx,maxBytesToRead,ignoreNul)=>{var maxIdx=idx+maxBytesToRead;if(ignoreNul)return maxIdx;while(heapOrArray[idx]&&!(idx>=maxIdx))++idx;return idx};var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead,ignoreNul)=>{var endPtr=findStringEnd(heapOrArray,idx,maxBytesToRead,ignoreNul);if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx<endPtr){var u0=heapOrArray[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heapOrArray[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heapOrArray[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heapOrArray[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}return str};var printChar=(stream,curr)=>{var buffer=printCharBuffers[stream];if(!curr||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer));buffer.length=0}else{buffer.push(curr)}};var HEAPU32;var _fd_write=(fd,iov,iovcnt,pnum)=>{var num=0;for(var i=0;i<iovcnt;i++){var ptr=HEAPU32[iov>>2];var len=HEAPU32[iov+4>>2];iov+=8;for(var j=0;j<len;j++){printChar(fd,HEAPU8[ptr+j])}num+=len}HEAPU32[pnum>>2]=num;return 0};var HEAPF32;var HEAPF64;var HEAP32;{if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(Module["print"])out=Module["print"];if(Module["printErr"])err=Module["printErr"];if(Module["arguments"])programArgs=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];var preInit=Module["preInit"];if(preInit){if(typeof preInit=="function")Module["preInit"]=preInit=[preInit];while(preInit.length>0){preInit.shift()()}}}var _free,_bx_Scratch,_bx_Alloc,_malloc,_bx_Free,_bx_GetVersion,_bx_ScratchF64,_bx_IsDoublePrecision,_bx_GetRejectedSlotCount,_bx_GetMaxWorkers,_bx_CreateWorld,_bx_World_GetWorkerCount,_bx_DestroyWorld,_bx_ShapeDesc_Destroy,_bx_World_Step,_bx_World_SetGravity,_bx_World_SetMaximumLinearSpeed,_bx_World_GetMaximumLinearSpeed,_bx_World_EnableSleeping,_bx_World_EnableContinuous,_bx_World_SetContactTuning,_bx_World_Explode,_bx_World_GetAwakeBodyCount,_bx_World_GetJointEventCount,_bx_World_GetStackUsed,_bx_World_GetStats,_bx_MoveEventsPtr,_bx_ContactEventsPtr,_bx_SensorEventsPtr,_bx_World_GetMoveEvents,_bx_World_GetContactEvents,_bx_World_GetSensorEvents,_bx_CreateBody,_bx_DestroyBody,_bx_Body_SetType,_bx_Body_GetType,_bx_Body_SetTransform,_bx_Body_GetTransform,_bx_Body_SetTargetTransform,_bx_Body_SetLinearVelocity,_bx_Body_GetLinearVelocity,_bx_Body_SetAngularVelocity,_bx_Body_GetAngularVelocity,_bx_Body_SetLinearDamping,_bx_Body_GetLinearDamping,_bx_Body_SetAngularDamping,_bx_Body_GetAngularDamping,_bx_Body_SetGravityScale,_bx_Body_GetGravityScale,_bx_Body_ApplyForce,_bx_Body_ApplyForceToCenter,_bx_Body_ApplyTorque,_bx_Body_ApplyLinearImpulse,_bx_Body_ApplyLinearImpulseToCenter,_bx_Body_ApplyAngularImpulse,_bx_Body_SetAwake,_bx_Body_IsAwake,_bx_Body_EnableSleep,_bx_Body_SetBullet,_bx_Body_EnableContinuous,_bx_Body_IsContinuousEnabled,_bx_Body_SetShapeCrush,_bx_Body_GetShapeCrush,_bx_BodyContactsPtr,_bx_BodyContactPointsF64Ptr,_bx_Body_GetContacts,_bx_Body_AllowFastRotation,_bx_Body_SetMotionLocks,_bx_Body_GetAABB,_bx_Body_ComputeShapeMassData,_bx_Body_GetMassData,_bx_Body_SetMassDataFull,_bx_Body_SetMassData,_bx_Body_GetMotionLocks,_bx_Body_ApplyMassFromShapes,_bx_Body_GetShapeCount,_bx_Body_SetFeatureKey,_bx_Body_GetFeatureKey,_bx_Body_GetShapeFeatureKey,_bx_Body_SetEventFlags,_bx_Body_GetEventFlags,_bx_Body_EnableContactEvents,_bx_ShapeDesc_CreateSphere,_bx_ShapeDesc_CreateCapsule,_bx_ShapeDesc_CreateBox,_bx_ShapeDesc_CreateCylinder,_bx_ShapeDesc_CreateHull,_bx_ShapeDesc_CreateMesh,_bx_ShapeDesc_CreateHeightField,_bx_ShapeDesc_GetGeometryBytes,_bx_ShapeDesc_GetGeometryByteCount,_bx_ShapeDesc_CreateMeshFromBytes,_bx_ShapeDesc_CreateHeightFieldFromBytes,_bx_ShapeDesc_CreateContainer,_bx_ShapeDesc_AddChild,_bx_ShapeDesc_RemoveChild,_bx_ShapeDesc_GetChildCount,_bx_ShapeDesc_GetKind,_bx_ShapeDesc_SetMaterial,_bx_ShapeDesc_GetFriction,_bx_ShapeDesc_GetRestitution,_bx_ShapeDesc_SetDensity,_bx_ShapeDesc_GetDensity,_bx_ShapeDesc_SetFilter,_bx_ShapeDesc_GetCategoryBits,_bx_ShapeDesc_GetMaskBits,_bx_ShapeDesc_SetGroup,_bx_ShapeDesc_SetRollingResistance,_bx_ShapeDesc_SetSensor,_bx_ShapeDesc_IsSensor,_bx_ShapeDesc_SetInvokeContactCreation,_bx_ShapeDesc_GetInvokeContactCreation,_bx_ShapeDesc_GetAABB,_bx_GetShapeBuildCount,_bx_GetShapeDescCount,_bx_Body_SetShape,_bx_Body_SetShapeHull,_bx_Body_TranslateShape,_bx_Body_SetShapeFilter,_bx_Body_RemoveShape,_bx_Body_HasShape,_bx_Body_GetShapeInfo,_bx_Body_SyncShapeDesc,_bx_Body_GetShapeDesc,_bx_ShapeDesc_BuildDebugGeometry,_bx_DebugPositionsPtr,_bx_DebugIndicesPtr,_bx_DebugIndexCount,_bx_CreateJoint,_bx_DestroyJoint,_bx_Joint_IsValid,_bx_Joint_SetCollideConnected,_bx_Joint_SetConstraintTuning,_bx_Joint_WakeBodies,_bx_Joint_EnableLimit,_bx_Joint_SetLimits,_bx_Joint_SetTwistLimits,_bx_Joint_EnableMotor,_bx_Joint_UpdateMotorFrame,_bx_Joint_SetSphericalMotor,_bx_Joint_SetSphericalTarget,_bx_Joint_SetMotorSpeed,_bx_Joint_SetMaxMotorForce,_bx_Joint_EnableSpring,_bx_Joint_SetSpring,_bx_Joint_SetTarget,_bx_Joint_GetPosition,_bx_ComputeAlignedFrameB,_bx_WheelJoint_SetSpinMotorSpeed,_bx_WheelJoint_SetMaxSpinTorque,_bx_WheelJoint_EnableSpinMotor,_bx_WheelJoint_SetTargetSteeringAngle,_bx_WheelJoint_SetSuspension,_bx_RayHitsPtr,_bx_RayHitPointsF64Ptr,_bx_World_CastRay,_bx_World_CastShape,_bx_OverlapsPtr,_bx_World_OverlapShape,_bx_GeometryPtr,_bx_Body_GetShapeGeometry,memory,__indirect_function_table,wasmMemory;function assignWasmExports(wasmExports){_free=Module["_free"]=wasmExports["free"];_bx_Scratch=Module["_bx_Scratch"]=wasmExports["bx_Scratch"];_bx_Alloc=Module["_bx_Alloc"]=wasmExports["bx_Alloc"];_malloc=Module["_malloc"]=wasmExports["malloc"];_bx_Free=Module["_bx_Free"]=wasmExports["bx_Free"];_bx_GetVersion=Module["_bx_GetVersion"]=wasmExports["bx_GetVersion"];_bx_ScratchF64=Module["_bx_ScratchF64"]=wasmExports["bx_ScratchF64"];_bx_IsDoublePrecision=Module["_bx_IsDoublePrecision"]=wasmExports["bx_IsDoublePrecision"];_bx_GetRejectedSlotCount=Module["_bx_GetRejectedSlotCount"]=wasmExports["bx_GetRejectedSlotCount"];_bx_GetMaxWorkers=Module["_bx_GetMaxWorkers"]=wasmExports["bx_GetMaxWorkers"];_bx_CreateWorld=Module["_bx_CreateWorld"]=wasmExports["bx_CreateWorld"];_bx_World_GetWorkerCount=Module["_bx_World_GetWorkerCount"]=wasmExports["bx_World_GetWorkerCount"];_bx_DestroyWorld=Module["_bx_DestroyWorld"]=wasmExports["bx_DestroyWorld"];_bx_ShapeDesc_Destroy=Module["_bx_ShapeDesc_Destroy"]=wasmExports["bx_ShapeDesc_Destroy"];_bx_World_Step=Module["_bx_World_Step"]=wasmExports["bx_World_Step"];_bx_World_SetGravity=Module["_bx_World_SetGravity"]=wasmExports["bx_World_SetGravity"];_bx_World_SetMaximumLinearSpeed=Module["_bx_World_SetMaximumLinearSpeed"]=wasmExports["bx_World_SetMaximumLinearSpeed"];_bx_World_GetMaximumLinearSpeed=Module["_bx_World_GetMaximumLinearSpeed"]=wasmExports["bx_World_GetMaximumLinearSpeed"];_bx_World_EnableSleeping=Module["_bx_World_EnableSleeping"]=wasmExports["bx_World_EnableSleeping"];_bx_World_EnableContinuous=Module["_bx_World_EnableContinuous"]=wasmExports["bx_World_EnableContinuous"];_bx_World_SetContactTuning=Module["_bx_World_SetContactTuning"]=wasmExports["bx_World_SetContactTuning"];_bx_World_Explode=Module["_bx_World_Explode"]=wasmExports["bx_World_Explode"];_bx_World_GetAwakeBodyCount=Module["_bx_World_GetAwakeBodyCount"]=wasmExports["bx_World_GetAwakeBodyCount"];_bx_World_GetJointEventCount=Module["_bx_World_GetJointEventCount"]=wasmExports["bx_World_GetJointEventCount"];_bx_World_GetStackUsed=Module["_bx_World_GetStackUsed"]=wasmExports["bx_World_GetStackUsed"];_bx_World_GetStats=Module["_bx_World_GetStats"]=wasmExports["bx_World_GetStats"];_bx_MoveEventsPtr=Module["_bx_MoveEventsPtr"]=wasmExports["bx_MoveEventsPtr"];_bx_ContactEventsPtr=Module["_bx_ContactEventsPtr"]=wasmExports["bx_ContactEventsPtr"];_bx_SensorEventsPtr=Module["_bx_SensorEventsPtr"]=wasmExports["bx_SensorEventsPtr"];_bx_World_GetMoveEvents=Module["_bx_World_GetMoveEvents"]=wasmExports["bx_World_GetMoveEvents"];_bx_World_GetContactEvents=Module["_bx_World_GetContactEvents"]=wasmExports["bx_World_GetContactEvents"];_bx_World_GetSensorEvents=Module["_bx_World_GetSensorEvents"]=wasmExports["bx_World_GetSensorEvents"];_bx_CreateBody=Module["_bx_CreateBody"]=wasmExports["bx_CreateBody"];_bx_DestroyBody=Module["_bx_DestroyBody"]=wasmExports["bx_DestroyBody"];_bx_Body_SetType=Module["_bx_Body_SetType"]=wasmExports["bx_Body_SetType"];_bx_Body_GetType=Module["_bx_Body_GetType"]=wasmExports["bx_Body_GetType"];_bx_Body_SetTransform=Module["_bx_Body_SetTransform"]=wasmExports["bx_Body_SetTransform"];_bx_Body_GetTransform=Module["_bx_Body_GetTransform"]=wasmExports["bx_Body_GetTransform"];_bx_Body_SetTargetTransform=Module["_bx_Body_SetTargetTransform"]=wasmExports["bx_Body_SetTargetTransform"];_bx_Body_SetLinearVelocity=Module["_bx_Body_SetLinearVelocity"]=wasmExports["bx_Body_SetLinearVelocity"];_bx_Body_GetLinearVelocity=Module["_bx_Body_GetLinearVelocity"]=wasmExports["bx_Body_GetLinearVelocity"];_bx_Body_SetAngularVelocity=Module["_bx_Body_SetAngularVelocity"]=wasmExports["bx_Body_SetAngularVelocity"];_bx_Body_GetAngularVelocity=Module["_bx_Body_GetAngularVelocity"]=wasmExports["bx_Body_GetAngularVelocity"];_bx_Body_SetLinearDamping=Module["_bx_Body_SetLinearDamping"]=wasmExports["bx_Body_SetLinearDamping"];_bx_Body_GetLinearDamping=Module["_bx_Body_GetLinearDamping"]=wasmExports["bx_Body_GetLinearDamping"];_bx_Body_SetAngularDamping=Module["_bx_Body_SetAngularDamping"]=wasmExports["bx_Body_SetAngularDamping"];_bx_Body_GetAngularDamping=Module["_bx_Body_GetAngularDamping"]=wasmExports["bx_Body_GetAngularDamping"];_bx_Body_SetGravityScale=Module["_bx_Body_SetGravityScale"]=wasmExports["bx_Body_SetGravityScale"];_bx_Body_GetGravityScale=Module["_bx_Body_GetGravityScale"]=wasmExports["bx_Body_GetGravityScale"];_bx_Body_ApplyForce=Module["_bx_Body_ApplyForce"]=wasmExports["bx_Body_ApplyForce"];_bx_Body_ApplyForceToCenter=Module["_bx_Body_ApplyForceToCenter"]=wasmExports["bx_Body_ApplyForceToCenter"];_bx_Body_ApplyTorque=Module["_bx_Body_ApplyTorque"]=wasmExports["bx_Body_ApplyTorque"];_bx_Body_ApplyLinearImpulse=Module["_bx_Body_ApplyLinearImpulse"]=wasmExports["bx_Body_ApplyLinearImpulse"];_bx_Body_ApplyLinearImpulseToCenter=Module["_bx_Body_ApplyLinearImpulseToCenter"]=wasmExports["bx_Body_ApplyLinearImpulseToCenter"];_bx_Body_ApplyAngularImpulse=Module["_bx_Body_ApplyAngularImpulse"]=wasmExports["bx_Body_ApplyAngularImpulse"];_bx_Body_SetAwake=Module["_bx_Body_SetAwake"]=wasmExports["bx_Body_SetAwake"];_bx_Body_IsAwake=Module["_bx_Body_IsAwake"]=wasmExports["bx_Body_IsAwake"];_bx_Body_EnableSleep=Module["_bx_Body_EnableSleep"]=wasmExports["bx_Body_EnableSleep"];_bx_Body_SetBullet=Module["_bx_Body_SetBullet"]=wasmExports["bx_Body_SetBullet"];_bx_Body_EnableContinuous=Module["_bx_Body_EnableContinuous"]=wasmExports["bx_Body_EnableContinuous"];_bx_Body_IsContinuousEnabled=Module["_bx_Body_IsContinuousEnabled"]=wasmExports["bx_Body_IsContinuousEnabled"];_bx_Body_SetShapeCrush=Module["_bx_Body_SetShapeCrush"]=wasmExports["bx_Body_SetShapeCrush"];_bx_Body_GetShapeCrush=Module["_bx_Body_GetShapeCrush"]=wasmExports["bx_Body_GetShapeCrush"];_bx_BodyContactsPtr=Module["_bx_BodyContactsPtr"]=wasmExports["bx_BodyContactsPtr"];_bx_BodyContactPointsF64Ptr=Module["_bx_BodyContactPointsF64Ptr"]=wasmExports["bx_BodyContactPointsF64Ptr"];_bx_Body_GetContacts=Module["_bx_Body_GetContacts"]=wasmExports["bx_Body_GetContacts"];_bx_Body_AllowFastRotation=Module["_bx_Body_AllowFastRotation"]=wasmExports["bx_Body_AllowFastRotation"];_bx_Body_SetMotionLocks=Module["_bx_Body_SetMotionLocks"]=wasmExports["bx_Body_SetMotionLocks"];_bx_Body_GetAABB=Module["_bx_Body_GetAABB"]=wasmExports["bx_Body_GetAABB"];_bx_Body_ComputeShapeMassData=Module["_bx_Body_ComputeShapeMassData"]=wasmExports["bx_Body_ComputeShapeMassData"];_bx_Body_GetMassData=Module["_bx_Body_GetMassData"]=wasmExports["bx_Body_GetMassData"];_bx_Body_SetMassDataFull=Module["_bx_Body_SetMassDataFull"]=wasmExports["bx_Body_SetMassDataFull"];_bx_Body_SetMassData=Module["_bx_Body_SetMassData"]=wasmExports["bx_Body_SetMassData"];_bx_Body_GetMotionLocks=Module["_bx_Body_GetMotionLocks"]=wasmExports["bx_Body_GetMotionLocks"];_bx_Body_ApplyMassFromShapes=Module["_bx_Body_ApplyMassFromShapes"]=wasmExports["bx_Body_ApplyMassFromShapes"];_bx_Body_GetShapeCount=Module["_bx_Body_GetShapeCount"]=wasmExports["bx_Body_GetShapeCount"];_bx_Body_SetFeatureKey=Module["_bx_Body_SetFeatureKey"]=wasmExports["bx_Body_SetFeatureKey"];_bx_Body_GetFeatureKey=Module["_bx_Body_GetFeatureKey"]=wasmExports["bx_Body_GetFeatureKey"];_bx_Body_GetShapeFeatureKey=Module["_bx_Body_GetShapeFeatureKey"]=wasmExports["bx_Body_GetShapeFeatureKey"];_bx_Body_SetEventFlags=Module["_bx_Body_SetEventFlags"]=wasmExports["bx_Body_SetEventFlags"];_bx_Body_GetEventFlags=Module["_bx_Body_GetEventFlags"]=wasmExports["bx_Body_GetEventFlags"];_bx_Body_EnableContactEvents=Module["_bx_Body_EnableContactEvents"]=wasmExports["bx_Body_EnableContactEvents"];_bx_ShapeDesc_CreateSphere=Module["_bx_ShapeDesc_CreateSphere"]=wasmExports["bx_ShapeDesc_CreateSphere"];_bx_ShapeDesc_CreateCapsule=Module["_bx_ShapeDesc_CreateCapsule"]=wasmExports["bx_ShapeDesc_CreateCapsule"];_bx_ShapeDesc_CreateBox=Module["_bx_ShapeDesc_CreateBox"]=wasmExports["bx_ShapeDesc_CreateBox"];_bx_ShapeDesc_CreateCylinder=Module["_bx_ShapeDesc_CreateCylinder"]=wasmExports["bx_ShapeDesc_CreateCylinder"];_bx_ShapeDesc_CreateHull=Module["_bx_ShapeDesc_CreateHull"]=wasmExports["bx_ShapeDesc_CreateHull"];_bx_ShapeDesc_CreateMesh=Module["_bx_ShapeDesc_CreateMesh"]=wasmExports["bx_ShapeDesc_CreateMesh"];_bx_ShapeDesc_CreateHeightField=Module["_bx_ShapeDesc_CreateHeightField"]=wasmExports["bx_ShapeDesc_CreateHeightField"];_bx_ShapeDesc_GetGeometryBytes=Module["_bx_ShapeDesc_GetGeometryBytes"]=wasmExports["bx_ShapeDesc_GetGeometryBytes"];_bx_ShapeDesc_GetGeometryByteCount=Module["_bx_ShapeDesc_GetGeometryByteCount"]=wasmExports["bx_ShapeDesc_GetGeometryByteCount"];_bx_ShapeDesc_CreateMeshFromBytes=Module["_bx_ShapeDesc_CreateMeshFromBytes"]=wasmExports["bx_ShapeDesc_CreateMeshFromBytes"];_bx_ShapeDesc_CreateHeightFieldFromBytes=Module["_bx_ShapeDesc_CreateHeightFieldFromBytes"]=wasmExports["bx_ShapeDesc_CreateHeightFieldFromBytes"];_bx_ShapeDesc_CreateContainer=Module["_bx_ShapeDesc_CreateContainer"]=wasmExports["bx_ShapeDesc_CreateContainer"];_bx_ShapeDesc_AddChild=Module["_bx_ShapeDesc_AddChild"]=wasmExports["bx_ShapeDesc_AddChild"];_bx_ShapeDesc_RemoveChild=Module["_bx_ShapeDesc_RemoveChild"]=wasmExports["bx_ShapeDesc_RemoveChild"];_bx_ShapeDesc_GetChildCount=Module["_bx_ShapeDesc_GetChildCount"]=wasmExports["bx_ShapeDesc_GetChildCount"];_bx_ShapeDesc_GetKind=Module["_bx_ShapeDesc_GetKind"]=wasmExports["bx_ShapeDesc_GetKind"];_bx_ShapeDesc_SetMaterial=Module["_bx_ShapeDesc_SetMaterial"]=wasmExports["bx_ShapeDesc_SetMaterial"];_bx_ShapeDesc_GetFriction=Module["_bx_ShapeDesc_GetFriction"]=wasmExports["bx_ShapeDesc_GetFriction"];_bx_ShapeDesc_GetRestitution=Module["_bx_ShapeDesc_GetRestitution"]=wasmExports["bx_ShapeDesc_GetRestitution"];_bx_ShapeDesc_SetDensity=Module["_bx_ShapeDesc_SetDensity"]=wasmExports["bx_ShapeDesc_SetDensity"];_bx_ShapeDesc_GetDensity=Module["_bx_ShapeDesc_GetDensity"]=wasmExports["bx_ShapeDesc_GetDensity"];_bx_ShapeDesc_SetFilter=Module["_bx_ShapeDesc_SetFilter"]=wasmExports["bx_ShapeDesc_SetFilter"];_bx_ShapeDesc_GetCategoryBits=Module["_bx_ShapeDesc_GetCategoryBits"]=wasmExports["bx_ShapeDesc_GetCategoryBits"];_bx_ShapeDesc_GetMaskBits=Module["_bx_ShapeDesc_GetMaskBits"]=wasmExports["bx_ShapeDesc_GetMaskBits"];_bx_ShapeDesc_SetGroup=Module["_bx_ShapeDesc_SetGroup"]=wasmExports["bx_ShapeDesc_SetGroup"];_bx_ShapeDesc_SetRollingResistance=Module["_bx_ShapeDesc_SetRollingResistance"]=wasmExports["bx_ShapeDesc_SetRollingResistance"];_bx_ShapeDesc_SetSensor=Module["_bx_ShapeDesc_SetSensor"]=wasmExports["bx_ShapeDesc_SetSensor"];_bx_ShapeDesc_IsSensor=Module["_bx_ShapeDesc_IsSensor"]=wasmExports["bx_ShapeDesc_IsSensor"];_bx_ShapeDesc_SetInvokeContactCreation=Module["_bx_ShapeDesc_SetInvokeContactCreation"]=wasmExports["bx_ShapeDesc_SetInvokeContactCreation"];_bx_ShapeDesc_GetInvokeContactCreation=Module["_bx_ShapeDesc_GetInvokeContactCreation"]=wasmExports["bx_ShapeDesc_GetInvokeContactCreation"];_bx_ShapeDesc_GetAABB=Module["_bx_ShapeDesc_GetAABB"]=wasmExports["bx_ShapeDesc_GetAABB"];_bx_GetShapeBuildCount=Module["_bx_GetShapeBuildCount"]=wasmExports["bx_GetShapeBuildCount"];_bx_GetShapeDescCount=Module["_bx_GetShapeDescCount"]=wasmExports["bx_GetShapeDescCount"];_bx_Body_SetShape=Module["_bx_Body_SetShape"]=wasmExports["bx_Body_SetShape"];_bx_Body_SetShapeHull=Module["_bx_Body_SetShapeHull"]=wasmExports["bx_Body_SetShapeHull"];_bx_Body_TranslateShape=Module["_bx_Body_TranslateShape"]=wasmExports["bx_Body_TranslateShape"];_bx_Body_SetShapeFilter=Module["_bx_Body_SetShapeFilter"]=wasmExports["bx_Body_SetShapeFilter"];_bx_Body_RemoveShape=Module["_bx_Body_RemoveShape"]=wasmExports["bx_Body_RemoveShape"];_bx_Body_HasShape=Module["_bx_Body_HasShape"]=wasmExports["bx_Body_HasShape"];_bx_Body_GetShapeInfo=Module["_bx_Body_GetShapeInfo"]=wasmExports["bx_Body_GetShapeInfo"];_bx_Body_SyncShapeDesc=Module["_bx_Body_SyncShapeDesc"]=wasmExports["bx_Body_SyncShapeDesc"];_bx_Body_GetShapeDesc=Module["_bx_Body_GetShapeDesc"]=wasmExports["bx_Body_GetShapeDesc"];_bx_ShapeDesc_BuildDebugGeometry=Module["_bx_ShapeDesc_BuildDebugGeometry"]=wasmExports["bx_ShapeDesc_BuildDebugGeometry"];_bx_DebugPositionsPtr=Module["_bx_DebugPositionsPtr"]=wasmExports["bx_DebugPositionsPtr"];_bx_DebugIndicesPtr=Module["_bx_DebugIndicesPtr"]=wasmExports["bx_DebugIndicesPtr"];_bx_DebugIndexCount=Module["_bx_DebugIndexCount"]=wasmExports["bx_DebugIndexCount"];_bx_CreateJoint=Module["_bx_CreateJoint"]=wasmExports["bx_CreateJoint"];_bx_DestroyJoint=Module["_bx_DestroyJoint"]=wasmExports["bx_DestroyJoint"];_bx_Joint_IsValid=Module["_bx_Joint_IsValid"]=wasmExports["bx_Joint_IsValid"];_bx_Joint_SetCollideConnected=Module["_bx_Joint_SetCollideConnected"]=wasmExports["bx_Joint_SetCollideConnected"];_bx_Joint_SetConstraintTuning=Module["_bx_Joint_SetConstraintTuning"]=wasmExports["bx_Joint_SetConstraintTuning"];_bx_Joint_WakeBodies=Module["_bx_Joint_WakeBodies"]=wasmExports["bx_Joint_WakeBodies"];_bx_Joint_EnableLimit=Module["_bx_Joint_EnableLimit"]=wasmExports["bx_Joint_EnableLimit"];_bx_Joint_SetLimits=Module["_bx_Joint_SetLimits"]=wasmExports["bx_Joint_SetLimits"];_bx_Joint_SetTwistLimits=Module["_bx_Joint_SetTwistLimits"]=wasmExports["bx_Joint_SetTwistLimits"];_bx_Joint_EnableMotor=Module["_bx_Joint_EnableMotor"]=wasmExports["bx_Joint_EnableMotor"];_bx_Joint_UpdateMotorFrame=Module["_bx_Joint_UpdateMotorFrame"]=wasmExports["bx_Joint_UpdateMotorFrame"];_bx_Joint_SetSphericalMotor=Module["_bx_Joint_SetSphericalMotor"]=wasmExports["bx_Joint_SetSphericalMotor"];_bx_Joint_SetSphericalTarget=Module["_bx_Joint_SetSphericalTarget"]=wasmExports["bx_Joint_SetSphericalTarget"];_bx_Joint_SetMotorSpeed=Module["_bx_Joint_SetMotorSpeed"]=wasmExports["bx_Joint_SetMotorSpeed"];_bx_Joint_SetMaxMotorForce=Module["_bx_Joint_SetMaxMotorForce"]=wasmExports["bx_Joint_SetMaxMotorForce"];_bx_Joint_EnableSpring=Module["_bx_Joint_EnableSpring"]=wasmExports["bx_Joint_EnableSpring"];_bx_Joint_SetSpring=Module["_bx_Joint_SetSpring"]=wasmExports["bx_Joint_SetSpring"];_bx_Joint_SetTarget=Module["_bx_Joint_SetTarget"]=wasmExports["bx_Joint_SetTarget"];_bx_Joint_GetPosition=Module["_bx_Joint_GetPosition"]=wasmExports["bx_Joint_GetPosition"];_bx_ComputeAlignedFrameB=Module["_bx_ComputeAlignedFrameB"]=wasmExports["bx_ComputeAlignedFrameB"];_bx_WheelJoint_SetSpinMotorSpeed=Module["_bx_WheelJoint_SetSpinMotorSpeed"]=wasmExports["bx_WheelJoint_SetSpinMotorSpeed"];_bx_WheelJoint_SetMaxSpinTorque=Module["_bx_WheelJoint_SetMaxSpinTorque"]=wasmExports["bx_WheelJoint_SetMaxSpinTorque"];_bx_WheelJoint_EnableSpinMotor=Module["_bx_WheelJoint_EnableSpinMotor"]=wasmExports["bx_WheelJoint_EnableSpinMotor"];_bx_WheelJoint_SetTargetSteeringAngle=Module["_bx_WheelJoint_SetTargetSteeringAngle"]=wasmExports["bx_WheelJoint_SetTargetSteeringAngle"];_bx_WheelJoint_SetSuspension=Module["_bx_WheelJoint_SetSuspension"]=wasmExports["bx_WheelJoint_SetSuspension"];_bx_RayHitsPtr=Module["_bx_RayHitsPtr"]=wasmExports["bx_RayHitsPtr"];_bx_RayHitPointsF64Ptr=Module["_bx_RayHitPointsF64Ptr"]=wasmExports["bx_RayHitPointsF64Ptr"];_bx_World_CastRay=Module["_bx_World_CastRay"]=wasmExports["bx_World_CastRay"];_bx_World_CastShape=Module["_bx_World_CastShape"]=wasmExports["bx_World_CastShape"];_bx_OverlapsPtr=Module["_bx_OverlapsPtr"]=wasmExports["bx_OverlapsPtr"];_bx_World_OverlapShape=Module["_bx_World_OverlapShape"]=wasmExports["bx_World_OverlapShape"];_bx_GeometryPtr=Module["_bx_GeometryPtr"]=wasmExports["bx_GeometryPtr"];_bx_Body_GetShapeGeometry=Module["_bx_Body_GetShapeGeometry"]=wasmExports["bx_Body_GetShapeGeometry"];memory=wasmMemory=wasmExports["memory"];__indirect_function_table=wasmExports["__indirect_function_table"]}var wasmImports={clock_time_get:_clock_time_get,emscripten_get_now:_emscripten_get_now,emscripten_resize_heap:_emscripten_resize_heap,fd_write:_fd_write};async function run(){preRun();var setStatus=Module["setStatus"];if(setStatus){setStatus("Running...");await new Promise(resolve=>setTimeout(resolve,1));setTimeout(setStatus,1,"")}if(ABORT)return;initRuntime();Module["onRuntimeInitialized"]?.();postRun()}var wasmExports;wasmExports=await createWasm();await run();
2
+ ;return Module}export default Box3D;
Binary file