From 373bdd5d2bdefa25ce011b563e188411fb8f3691 Mon Sep 17 00:00:00 2001
From: yhh <359807859@qq.com>
Date: Wed, 3 Dec 2025 17:27:54 +0800
Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8DRust=E6=96=87=E6=A1=A3?=
=?UTF-8?q?=E6=B5=8B=E8=AF=95=E5=92=8C=E6=B7=BB=E5=8A=A0rapier2d=20WASM?=
=?UTF-8?q?=E7=BB=91=E5=AE=9A?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
packages/engine/src/math/color.rs | 1 +
packages/engine/src/math/rect.rs | 1 +
packages/engine/src/math/transform.rs | 1 +
packages/engine/src/math/vec2.rs | 1 +
packages/rapier2d/pkg/.gitignore | 1 +
packages/rapier2d/pkg/LICENSE | 201 +
packages/rapier2d/pkg/README.md | 70 +
packages/rapier2d/pkg/package.json | 32 +
packages/rapier2d/pkg/rapier_wasm2d.d.ts | 1666 +++++
packages/rapier2d/pkg/rapier_wasm2d.js | 5461 +++++++++++++++++
packages/rapier2d/pkg/rapier_wasm2d_bg.wasm | Bin 0 -> 1202309 bytes
.../rapier2d/pkg/rapier_wasm2d_bg.wasm.d.ts | 468 ++
12 files changed, 7903 insertions(+)
create mode 100644 packages/rapier2d/pkg/.gitignore
create mode 100644 packages/rapier2d/pkg/LICENSE
create mode 100644 packages/rapier2d/pkg/README.md
create mode 100644 packages/rapier2d/pkg/package.json
create mode 100644 packages/rapier2d/pkg/rapier_wasm2d.d.ts
create mode 100644 packages/rapier2d/pkg/rapier_wasm2d.js
create mode 100644 packages/rapier2d/pkg/rapier_wasm2d_bg.wasm
create mode 100644 packages/rapier2d/pkg/rapier_wasm2d_bg.wasm.d.ts
diff --git a/packages/engine/src/math/color.rs b/packages/engine/src/math/color.rs
index ed181b9a..b344a833 100644
--- a/packages/engine/src/math/color.rs
+++ b/packages/engine/src/math/color.rs
@@ -12,6 +12,7 @@ use bytemuck::{Pod, Zeroable};
///
/// # Examples | 示例
/// ```rust
+/// use es_engine::math::Color;
/// let red = Color::RED;
/// let custom = Color::new(0.5, 0.7, 0.3, 1.0);
/// let packed = custom.to_packed(); // For GPU
diff --git a/packages/engine/src/math/rect.rs b/packages/engine/src/math/rect.rs
index d1382019..73e7acb0 100644
--- a/packages/engine/src/math/rect.rs
+++ b/packages/engine/src/math/rect.rs
@@ -8,6 +8,7 @@ use super::Vec2;
///
/// # Examples | 示例
/// ```rust
+/// use es_engine::math::{Rect, Vec2};
/// let rect = Rect::new(10.0, 20.0, 100.0, 50.0);
/// let point = Vec2::new(50.0, 40.0);
/// assert!(rect.contains_point(point));
diff --git a/packages/engine/src/math/transform.rs b/packages/engine/src/math/transform.rs
index ea6d3969..37183faf 100644
--- a/packages/engine/src/math/transform.rs
+++ b/packages/engine/src/math/transform.rs
@@ -9,6 +9,7 @@ use glam::Mat3;
///
/// # Examples | 示例
/// ```rust
+/// use es_engine::math::{Transform2D, Vec2};
/// let mut transform = Transform2D::new();
/// transform.position = Vec2::new(100.0, 200.0);
/// transform.rotation = std::f32::consts::PI / 4.0; // 45 degrees
diff --git a/packages/engine/src/math/vec2.rs b/packages/engine/src/math/vec2.rs
index 254a3e9f..991af15b 100644
--- a/packages/engine/src/math/vec2.rs
+++ b/packages/engine/src/math/vec2.rs
@@ -8,6 +8,7 @@ use bytemuck::{Pod, Zeroable};
///
/// # Examples | 示例
/// ```rust
+/// use es_engine::math::Vec2;
/// let pos = Vec2::new(100.0, 200.0);
/// let velocity = Vec2::new(1.0, 0.0);
/// let new_pos = pos + velocity * 16.0;
diff --git a/packages/rapier2d/pkg/.gitignore b/packages/rapier2d/pkg/.gitignore
new file mode 100644
index 00000000..f59ec20a
--- /dev/null
+++ b/packages/rapier2d/pkg/.gitignore
@@ -0,0 +1 @@
+*
\ No newline at end of file
diff --git a/packages/rapier2d/pkg/LICENSE b/packages/rapier2d/pkg/LICENSE
new file mode 100644
index 00000000..e579674d
--- /dev/null
+++ b/packages/rapier2d/pkg/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright 2020 Dimforge EURL
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/packages/rapier2d/pkg/README.md b/packages/rapier2d/pkg/README.md
new file mode 100644
index 00000000..013aa34d
--- /dev/null
+++ b/packages/rapier2d/pkg/README.md
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Website | Documentation
+
+
+
+---
+
+
+2D physics engine
+for the JavaScript programming language (official bindings).
+
+
+---
+
+## Feature selection
+
+Multiple NPM packages exist for Rapier, depending on your needs:
+- [`@dimforge/rapier2d`](https://www.npmjs.com/package/@dimforge/rapier2d) or
+ [`@dimforge/rapier3d`](https://www.npmjs.com/package/@dimforge/rapier3d):
+ The main build of the Rapier physics engine for 2D or 3D physics simulation. This should have wide browser
+ support while offering great performances. This does **not** guarantee cross-platform determinism of the physics
+ simulation (but it is still locally deterministic, on the same machine).
+- [`@dimforge/rapier2d-simd`](https://www.npmjs.com/package/@dimforge/rapier2d-simd) or
+ [`@dimforge/rapier3d-simd`](https://www.npmjs.com/package/@dimforge/rapier3d-simd):
+ A build with internal SIMD optimizations enabled. More limited browser support (requires support for [simd128](https://caniuse.com/?search=simd)).
+- [`@dimforge/rapier2d-deterministic`](https://www.npmjs.com/package/@dimforge/rapier2d-deterministic) or
+ [`@dimforge/rapier3d-deterministic`](https://www.npmjs.com/package/@dimforge/rapier3d-deterministic):
+ A less optimized build but with a guarantee of a cross-platform deterministic execution of the physics simulation.
+
+## Bundler support
+
+Some bundlers will struggle with the `.wasm` file package into the builds above. Alternative `-compat` versions exist
+which embed the `.wasm` file into the `.js` sources encoded with base64. This results in a bigger package size, but
+much wider bundler support.
+
+Just append `-compat` to the build you are interested in:
+[`rapier2d-compat`](https://www.npmjs.com/package/@dimforge/rapier2d-compat),
+[`rapier2d-simd-compat`](https://www.npmjs.com/package/@dimforge/rapier2d-simd-compat),
+[`rapier2d-deterministic-compat`](https://www.npmjs.com/package/@dimforge/rapier2d-deterministic-compat),
+[`rapier3d-compat`](https://www.npmjs.com/package/@dimforge/rapier3d-compat),
+[`rapier3d-simd-compat`](https://www.npmjs.com/package/@dimforge/rapier3d-simd-compat),
+[`rapier3d-deterministic-compat`](https://www.npmjs.com/package/@dimforge/rapier3d-deterministic-compat).
+
+## Nightly builds
+
+Each time a new Pull Request is merged to the `main` branch of the [`rapier.js` repository](https://github.com/dimforge/rapier.js),
+an automatic _canary_ build is triggered. Builds published to npmjs under the _canary_ tag does not come with any
+stability guarantee and does not follow semver versioning. But it can be a useful solution to try out the latest
+features until a proper release is cut.
\ No newline at end of file
diff --git a/packages/rapier2d/pkg/package.json b/packages/rapier2d/pkg/package.json
new file mode 100644
index 00000000..471a17c7
--- /dev/null
+++ b/packages/rapier2d/pkg/package.json
@@ -0,0 +1,32 @@
+{
+ "name": "dimforge_rapier2d-deterministic",
+ "type": "module",
+ "collaborators": [
+ "Sébastien Crozet "
+ ],
+ "description": "2-dimensional physics engine in Rust - official JS bindings.",
+ "version": "0.19.3",
+ "license": "Apache-2.0",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/dimforge/rapier.js"
+ },
+ "files": [
+ "rapier_wasm2d_bg.wasm",
+ "rapier_wasm2d.js",
+ "rapier_wasm2d.d.ts"
+ ],
+ "main": "rapier_wasm2d.js",
+ "homepage": "https://rapier.rs",
+ "types": "rapier_wasm2d.d.ts",
+ "sideEffects": [
+ "./snippets/*"
+ ],
+ "keywords": [
+ "physics",
+ "dynamics",
+ "rigid",
+ "real-time",
+ "joints"
+ ]
+}
\ No newline at end of file
diff --git a/packages/rapier2d/pkg/rapier_wasm2d.d.ts b/packages/rapier2d/pkg/rapier_wasm2d.d.ts
new file mode 100644
index 00000000..2c3438aa
--- /dev/null
+++ b/packages/rapier2d/pkg/rapier_wasm2d.d.ts
@@ -0,0 +1,1666 @@
+/* tslint:disable */
+/* eslint-disable */
+export function reserve_memory(extra_bytes_count: number): void;
+export function version(): string;
+export enum RawFeatureType {
+ Vertex = 0,
+ Face = 1,
+ Unknown = 2,
+}
+export enum RawJointAxis {
+ LinX = 0,
+ LinY = 1,
+ AngX = 2,
+}
+export enum RawJointType {
+ Revolute = 0,
+ Fixed = 1,
+ Prismatic = 2,
+ Rope = 3,
+ Spring = 4,
+ Generic = 5,
+}
+export enum RawMotorModel {
+ AccelerationBased = 0,
+ ForceBased = 1,
+}
+export enum RawRigidBodyType {
+ Dynamic = 0,
+ Fixed = 1,
+ KinematicPositionBased = 2,
+ KinematicVelocityBased = 3,
+}
+export enum RawShapeType {
+ Ball = 0,
+ Cuboid = 1,
+ Capsule = 2,
+ Segment = 3,
+ Polyline = 4,
+ Triangle = 5,
+ TriMesh = 6,
+ HeightField = 7,
+ Compound = 8,
+ ConvexPolygon = 9,
+ RoundCuboid = 10,
+ RoundTriangle = 11,
+ RoundConvexPolygon = 12,
+ HalfSpace = 13,
+ Voxels = 14,
+}
+export class RawBroadPhase {
+ free(): void;
+ projectPoint(narrow_phase: RawNarrowPhase, bodies: RawRigidBodySet, colliders: RawColliderSet, point: RawVector, solid: boolean, filter_flags: number, filter_groups: number | null | undefined, filter_exclude_collider: number | null | undefined, filter_exclude_rigid_body: number | null | undefined, filter_predicate: Function): RawPointColliderProjection | undefined;
+ castRayAndGetNormal(narrow_phase: RawNarrowPhase, bodies: RawRigidBodySet, colliders: RawColliderSet, rayOrig: RawVector, rayDir: RawVector, maxToi: number, solid: boolean, filter_flags: number, filter_groups: number | null | undefined, filter_exclude_collider: number | null | undefined, filter_exclude_rigid_body: number | null | undefined, filter_predicate: Function): RawRayColliderIntersection | undefined;
+ intersectionsWithRay(narrow_phase: RawNarrowPhase, bodies: RawRigidBodySet, colliders: RawColliderSet, rayOrig: RawVector, rayDir: RawVector, maxToi: number, solid: boolean, callback: Function, filter_flags: number, filter_groups: number | null | undefined, filter_exclude_collider: number | null | undefined, filter_exclude_rigid_body: number | null | undefined, filter_predicate: Function): void;
+ intersectionWithShape(narrow_phase: RawNarrowPhase, bodies: RawRigidBodySet, colliders: RawColliderSet, shapePos: RawVector, shapeRot: RawRotation, shape: RawShape, filter_flags: number, filter_groups: number | null | undefined, filter_exclude_collider: number | null | undefined, filter_exclude_rigid_body: number | null | undefined, filter_predicate: Function): number | undefined;
+ intersectionsWithPoint(narrow_phase: RawNarrowPhase, bodies: RawRigidBodySet, colliders: RawColliderSet, point: RawVector, callback: Function, filter_flags: number, filter_groups: number | null | undefined, filter_exclude_collider: number | null | undefined, filter_exclude_rigid_body: number | null | undefined, filter_predicate: Function): void;
+ intersectionsWithShape(narrow_phase: RawNarrowPhase, bodies: RawRigidBodySet, colliders: RawColliderSet, shapePos: RawVector, shapeRot: RawRotation, shape: RawShape, callback: Function, filter_flags: number, filter_groups: number | null | undefined, filter_exclude_collider: number | null | undefined, filter_exclude_rigid_body: number | null | undefined, filter_predicate: Function): void;
+ projectPointAndGetFeature(narrow_phase: RawNarrowPhase, bodies: RawRigidBodySet, colliders: RawColliderSet, point: RawVector, filter_flags: number, filter_groups: number | null | undefined, filter_exclude_collider: number | null | undefined, filter_exclude_rigid_body: number | null | undefined, filter_predicate: Function): RawPointColliderProjection | undefined;
+ collidersWithAabbIntersectingAabb(narrow_phase: RawNarrowPhase, bodies: RawRigidBodySet, colliders: RawColliderSet, aabbCenter: RawVector, aabbHalfExtents: RawVector, callback: Function): void;
+ constructor();
+ castRay(narrow_phase: RawNarrowPhase, bodies: RawRigidBodySet, colliders: RawColliderSet, rayOrig: RawVector, rayDir: RawVector, maxToi: number, solid: boolean, filter_flags: number, filter_groups: number | null | undefined, filter_exclude_collider: number | null | undefined, filter_exclude_rigid_body: number | null | undefined, filter_predicate: Function): RawRayColliderHit | undefined;
+ castShape(narrow_phase: RawNarrowPhase, bodies: RawRigidBodySet, colliders: RawColliderSet, shapePos: RawVector, shapeRot: RawRotation, shapeVel: RawVector, shape: RawShape, target_distance: number, maxToi: number, stop_at_penetration: boolean, filter_flags: number, filter_groups: number | null | undefined, filter_exclude_collider: number | null | undefined, filter_exclude_rigid_body: number | null | undefined, filter_predicate: Function): RawColliderShapeCastHit | undefined;
+}
+export class RawCCDSolver {
+ free(): void;
+ constructor();
+}
+export class RawCharacterCollision {
+ free(): void;
+ worldNormal1(): RawVector;
+ worldNormal2(): RawVector;
+ worldWitness1(): RawVector;
+ worldWitness2(): RawVector;
+ translationDeltaApplied(): RawVector;
+ translationDeltaRemaining(): RawVector;
+ constructor();
+ toi(): number;
+ handle(): number;
+}
+export class RawColliderSet {
+ free(): void;
+ /**
+ * Checks if a collider with the given integer handle exists.
+ */
+ isHandleValid(handle: number): boolean;
+ createCollider(enabled: boolean, shape: RawShape, translation: RawVector, rotation: RawRotation, massPropsMode: number, mass: number, centerOfMass: RawVector, principalAngularInertia: number, density: number, friction: number, restitution: number, frictionCombineRule: number, restitutionCombineRule: number, isSensor: boolean, collisionGroups: number, solverGroups: number, activeCollisionTypes: number, activeHooks: number, activeEvents: number, contactForceEventThreshold: number, contactSkin: number, hasParent: boolean, parent: number, bodies: RawRigidBodySet): number | undefined;
+ /**
+ * Applies the given JavaScript function to the integer handle of each collider managed by this collider set.
+ *
+ * # Parameters
+ * - `f(handle)`: the function to apply to the integer handle of each collider managed by this collider set. Called as `f(handle)`.
+ */
+ forEachColliderHandle(f: Function): void;
+ len(): number;
+ constructor();
+ /**
+ * Removes a collider from this set and wake-up the rigid-body it is attached to.
+ */
+ remove(handle: number, islands: RawIslandManager, bodies: RawRigidBodySet, wakeUp: boolean): void;
+ contains(handle: number): boolean;
+ /**
+ * The friction coefficient of this collider.
+ */
+ coFriction(handle: number): number;
+ /**
+ * Is this collider a sensor?
+ */
+ coIsSensor(handle: number): boolean;
+ /**
+ * The world-space orientation of this collider.
+ */
+ coRotation(handle: number): RawRotation;
+ coSetShape(handle: number, shape: RawShape): void;
+ coSetVoxel(handle: number, ix: number, iy: number, filled: boolean): void;
+ /**
+ * The vertices of this triangle mesh, polyline, convex polyhedron, segment, triangle or convex polyhedron, if it is one.
+ */
+ coVertices(handle: number): Float32Array | undefined;
+ coCastShape(handle: number, colliderVel: RawVector, shape2: RawShape, shape2Pos: RawVector, shape2Rot: RawRotation, shape2Vel: RawVector, target_distance: number, maxToi: number, stop_at_penetration: boolean): RawShapeCastHit | undefined;
+ coIsEnabled(handle: number): boolean;
+ /**
+ * Set the radius of this collider if it is a ball, capsule, cylinder, or cone shape.
+ */
+ coSetRadius(handle: number, newRadius: number): void;
+ coSetSensor(handle: number, is_sensor: boolean): void;
+ /**
+ * The type of the shape of this collider.
+ */
+ coShapeType(handle: number): RawShapeType;
+ coVoxelData(handle: number): Int32Array | undefined;
+ coVoxelSize(handle: number): RawVector | undefined;
+ /**
+ * The half height of this collider if it is a capsule, cylinder, or cone shape.
+ */
+ coHalfHeight(handle: number): number | undefined;
+ coSetDensity(handle: number, density: number): void;
+ coSetEnabled(handle: number, enabled: boolean): void;
+ /**
+ * The physics hooks enabled for this collider.
+ */
+ coActiveHooks(handle: number): number;
+ coContactSkin(handle: number): number;
+ /**
+ * The half-extents of this collider if it is has a cuboid shape.
+ */
+ coHalfExtents(handle: number): RawVector | undefined;
+ /**
+ * The restitution coefficient of this collider.
+ */
+ coRestitution(handle: number): number;
+ /**
+ * The radius of the round edges of this collider.
+ */
+ coRoundRadius(handle: number): number | undefined;
+ coSetFriction(handle: number, friction: number): void;
+ /**
+ * Sets the rotation angle of this collider.
+ *
+ * # Parameters
+ * - `angle`: the rotation angle, in radians.
+ * - `wakeUp`: forces the collider to wake-up so it is properly affected by forces if it
+ * wasn't moving before modifying its position.
+ */
+ coSetRotation(handle: number, angle: number): void;
+ /**
+ * The world-space translation of this collider.
+ */
+ coTranslation(handle: number): RawVector;
+ /**
+ * The events enabled for this collider.
+ */
+ coActiveEvents(handle: number): number;
+ coCastCollider(handle: number, collider1Vel: RawVector, collider2handle: number, collider2Vel: RawVector, target_distance: number, max_toi: number, stop_at_penetration: boolean): RawColliderShapeCastHit | undefined;
+ coContactShape(handle: number, shape2: RawShape, shapePos2: RawVector, shapeRot2: RawRotation, prediction: number): RawShapeContact | undefined;
+ coProjectPoint(handle: number, point: RawVector, solid: boolean): RawPointProjection;
+ /**
+ * The solver groups of this collider.
+ */
+ coSolverGroups(handle: number): number;
+ coTriMeshFlags(handle: number): number | undefined;
+ coContainsPoint(handle: number, point: RawVector): boolean;
+ coIntersectsRay(handle: number, rayOrig: RawVector, rayDir: RawVector, maxToi: number): boolean;
+ /**
+ * Set the half height of this collider if it is a capsule, cylinder, or cone shape.
+ */
+ coSetHalfHeight(handle: number, newHalfheight: number): void;
+ coSetActiveHooks(handle: number, hooks: number): void;
+ coSetContactSkin(handle: number, contact_skin: number): void;
+ /**
+ * Set the half-extents of this collider if it has a cuboid shape.
+ */
+ coSetHalfExtents(handle: number, newHalfExtents: RawVector): void;
+ coSetRestitution(handle: number, restitution: number): void;
+ /**
+ * Set the radius of the round edges of this collider.
+ */
+ coSetRoundRadius(handle: number, newBorderRadius: number): void;
+ /**
+ * Sets the translation of this collider.
+ *
+ * # Parameters
+ * - `x`: the world-space position of the collider along the `x` axis.
+ * - `y`: the world-space position of the collider along the `y` axis.
+ * - `wakeUp`: forces the collider to wake-up so it is properly affected by forces if it
+ * wasn't moving before modifying its position.
+ */
+ coSetTranslation(handle: number, x: number, y: number): void;
+ /**
+ * The collision groups of this collider.
+ */
+ coCollisionGroups(handle: number): number;
+ coContactCollider(handle: number, collider2handle: number, prediction: number): RawShapeContact | undefined;
+ coHalfspaceNormal(handle: number): RawVector | undefined;
+ coIntersectsShape(handle: number, shape2: RawShape, shapePos2: RawVector, shapeRot2: RawRotation): boolean;
+ coSetActiveEvents(handle: number, events: number): void;
+ coSetSolverGroups(handle: number, groups: number): void;
+ /**
+ * The scaling factor applied of this heightfield if it is one.
+ */
+ coHeightfieldScale(handle: number): RawVector | undefined;
+ /**
+ * The orientation of this collider relative to its parent rigid-body.
+ *
+ * Returns the `None` if it doesn’t have a parent.
+ */
+ coRotationWrtParent(handle: number): RawRotation | undefined;
+ coSetMassProperties(handle: number, mass: number, centerOfMass: RawVector, principalAngularInertia: number): void;
+ coCombineVoxelStates(handle1: number, handle2: number, shift_x: number, shift_y: number): void;
+ /**
+ * The height of this heightfield if it is one.
+ */
+ coHeightfieldHeights(handle: number): Float32Array | undefined;
+ coSetCollisionGroups(handle: number, groups: number): void;
+ coCastRayAndGetNormal(handle: number, rayOrig: RawVector, rayDir: RawVector, maxToi: number, solid: boolean): RawRayIntersection | undefined;
+ coFrictionCombineRule(handle: number): number;
+ /**
+ * The collision types enabled for this collider.
+ */
+ coActiveCollisionTypes(handle: number): number;
+ coPropagateVoxelChange(handle1: number, handle2: number, ix: number, iy: number, shift_x: number, shift_y: number): void;
+ coSetRotationWrtParent(handle: number, angle: number): void;
+ /**
+ * The translation of this collider relative to its parent rigid-body.
+ *
+ * Returns the `None` if it doesn’t have a parent.
+ */
+ coTranslationWrtParent(handle: number): RawVector | undefined;
+ coRestitutionCombineRule(handle: number): number;
+ coSetFrictionCombineRule(handle: number, rule: number): void;
+ coSetActiveCollisionTypes(handle: number, types: number): void;
+ coSetTranslationWrtParent(handle: number, x: number, y: number): void;
+ coSetRestitutionCombineRule(handle: number, rule: number): void;
+ /**
+ * The total force magnitude beyond which a contact force event can be emitted.
+ */
+ coContactForceEventThreshold(handle: number): number;
+ coSetContactForceEventThreshold(handle: number, threshold: number): void;
+ /**
+ * The mass of this collider.
+ */
+ coMass(handle: number): number;
+ /**
+ * The unique integer identifier of the collider this collider is attached to.
+ */
+ coParent(handle: number): number | undefined;
+ /**
+ * The radius of this collider if it is a ball, capsule, cylinder, or cone shape.
+ */
+ coRadius(handle: number): number | undefined;
+ /**
+ * The volume of this collider.
+ */
+ coVolume(handle: number): number;
+ coCastRay(handle: number, rayOrig: RawVector, rayDir: RawVector, maxToi: number, solid: boolean): number;
+ /**
+ * The density of this collider.
+ */
+ coDensity(handle: number): number;
+ /**
+ * The indices of this triangle mesh, polyline, or convex polyhedron, if it is one.
+ */
+ coIndices(handle: number): Uint32Array | undefined;
+ coSetMass(handle: number, mass: number): void;
+}
+export class RawColliderShapeCastHit {
+ private constructor();
+ free(): void;
+ colliderHandle(): number;
+ time_of_impact(): number;
+ normal1(): RawVector;
+ normal2(): RawVector;
+ witness1(): RawVector;
+ witness2(): RawVector;
+}
+export class RawContactForceEvent {
+ private constructor();
+ free(): void;
+ /**
+ * The sum of all the forces between the two colliders.
+ */
+ total_force(): RawVector;
+ /**
+ * The world-space (unit) direction of the force with strongest magnitude.
+ */
+ max_force_direction(): RawVector;
+ /**
+ * The magnitude of the largest force at a contact point of this contact pair.
+ */
+ max_force_magnitude(): number;
+ /**
+ * The sum of the magnitudes of each force between the two colliders.
+ *
+ * Note that this is **not** the same as the magnitude of `self.total_force`.
+ * Here we are summing the magnitude of all the forces, instead of taking
+ * the magnitude of their sum.
+ */
+ total_force_magnitude(): number;
+ /**
+ * The first collider involved in the contact.
+ */
+ collider1(): number;
+ /**
+ * The second collider involved in the contact.
+ */
+ collider2(): number;
+}
+export class RawContactManifold {
+ private constructor();
+ free(): void;
+ contact_dist(i: number): number;
+ contact_fid1(i: number): number;
+ contact_fid2(i: number): number;
+ num_contacts(): number;
+ contact_impulse(i: number): number;
+ contact_local_p1(i: number): RawVector | undefined;
+ contact_local_p2(i: number): RawVector | undefined;
+ num_solver_contacts(): number;
+ solver_contact_dist(i: number): number;
+ solver_contact_point(i: number): RawVector | undefined;
+ contact_tangent_impulse(i: number): number;
+ solver_contact_friction(i: number): number;
+ solver_contact_restitution(i: number): number;
+ solver_contact_tangent_velocity(i: number): RawVector;
+ normal(): RawVector;
+ local_n1(): RawVector;
+ local_n2(): RawVector;
+ subshape1(): number;
+ subshape2(): number;
+}
+export class RawContactPair {
+ private constructor();
+ free(): void;
+ contactManifold(i: number): RawContactManifold | undefined;
+ numContactManifolds(): number;
+ collider1(): number;
+ collider2(): number;
+}
+export class RawDebugRenderPipeline {
+ free(): void;
+ constructor();
+ colors(): Float32Array;
+ render(bodies: RawRigidBodySet, colliders: RawColliderSet, impulse_joints: RawImpulseJointSet, multibody_joints: RawMultibodyJointSet, narrow_phase: RawNarrowPhase, filter_flags: number, filter_predicate: Function): void;
+ vertices(): Float32Array;
+}
+export class RawDeserializedWorld {
+ private constructor();
+ free(): void;
+ takeBodies(): RawRigidBodySet | undefined;
+ takeGravity(): RawVector | undefined;
+ takeColliders(): RawColliderSet | undefined;
+ takeBroadPhase(): RawBroadPhase | undefined;
+ takeNarrowPhase(): RawNarrowPhase | undefined;
+ takeImpulseJoints(): RawImpulseJointSet | undefined;
+ takeIslandManager(): RawIslandManager | undefined;
+ takeMultibodyJoints(): RawMultibodyJointSet | undefined;
+ takeIntegrationParameters(): RawIntegrationParameters | undefined;
+}
+/**
+ * A structure responsible for collecting events generated
+ * by the physics engine.
+ */
+export class RawEventQueue {
+ free(): void;
+ /**
+ * Applies the given javascript closure on each collision event of this collector, then clear
+ * the internal collision event buffer.
+ *
+ * # Parameters
+ * - `f(handle1, handle2, started)`: JavaScript closure applied to each collision event. The
+ * closure should take three arguments: two integers representing the handles of the colliders
+ * involved in the collision, and a boolean indicating if the collision started (true) or stopped
+ * (false).
+ */
+ drainCollisionEvents(f: Function): void;
+ drainContactForceEvents(f: Function): void;
+ /**
+ * Creates a new event collector.
+ *
+ * # Parameters
+ * - `autoDrain`: setting this to `true` is strongly recommended. If true, the collector will
+ * be automatically drained before each `world.step(collector)`. If false, the collector will
+ * keep all events in memory unless it is manually drained/cleared; this may lead to unbounded use of
+ * RAM if no drain is performed.
+ */
+ constructor(autoDrain: boolean);
+ /**
+ * Removes all events contained by this collector.
+ */
+ clear(): void;
+}
+export class RawGenericJoint {
+ private constructor();
+ free(): void;
+ static rope(length: number, anchor1: RawVector, anchor2: RawVector): RawGenericJoint;
+ /**
+ * Creates a new joint descriptor that builds a Fixed joint.
+ *
+ * A fixed joint removes all the degrees of freedom between the affected bodies.
+ */
+ static fixed(anchor1: RawVector, axes1: RawRotation, anchor2: RawVector, axes2: RawRotation): RawGenericJoint;
+ static spring(rest_length: number, stiffness: number, damping: number, anchor1: RawVector, anchor2: RawVector): RawGenericJoint;
+ /**
+ * Create a new joint descriptor that builds Revolute joints.
+ *
+ * A revolute joint removes all degrees of freedom between the affected
+ * bodies except for the rotation.
+ */
+ static revolute(anchor1: RawVector, anchor2: RawVector): RawGenericJoint | undefined;
+ /**
+ * Creates a new joint descriptor that builds a Prismatic joint.
+ *
+ * A prismatic joint removes all the degrees of freedom between the
+ * affected bodies, except for the translation along one axis.
+ *
+ * Returns `None` if any of the provided axes cannot be normalized.
+ */
+ static prismatic(anchor1: RawVector, anchor2: RawVector, axis: RawVector, limitsEnabled: boolean, limitsMin: number, limitsMax: number): RawGenericJoint | undefined;
+}
+export class RawImpulseJointSet {
+ free(): void;
+ /**
+ * The position of the first anchor of this joint.
+ *
+ * The first anchor gives the position of the points application point on the
+ * local frame of the first rigid-body it is attached to.
+ */
+ jointAnchor1(handle: number): RawVector;
+ /**
+ * The position of the second anchor of this joint.
+ *
+ * The second anchor gives the position of the points application point on the
+ * local frame of the second rigid-body it is attached to.
+ */
+ jointAnchor2(handle: number): RawVector;
+ /**
+ * The angular part of the joint’s local frame relative to the first rigid-body it is attached to.
+ */
+ jointFrameX1(handle: number): RawRotation;
+ /**
+ * The angular part of the joint’s local frame relative to the second rigid-body it is attached to.
+ */
+ jointFrameX2(handle: number): RawRotation;
+ /**
+ * If this is a prismatic joint, returns its upper limit.
+ */
+ jointLimitsMax(handle: number, axis: RawJointAxis): number;
+ /**
+ * Return the lower limit along the given joint axis.
+ */
+ jointLimitsMin(handle: number, axis: RawJointAxis): number;
+ /**
+ * Enables and sets the joint limits
+ */
+ jointSetLimits(handle: number, axis: RawJointAxis, min: number, max: number): void;
+ /**
+ * Sets the position of the first local anchor
+ */
+ jointSetAnchor1(handle: number, newPos: RawVector): void;
+ /**
+ * Sets the position of the second local anchor
+ */
+ jointSetAnchor2(handle: number, newPos: RawVector): void;
+ /**
+ * The unique integer identifier of the first rigid-body this joint it attached to.
+ */
+ jointBodyHandle1(handle: number): number;
+ /**
+ * The unique integer identifier of the second rigid-body this joint is attached to.
+ */
+ jointBodyHandle2(handle: number): number;
+ /**
+ * Are the limits for this joint enabled?
+ */
+ jointLimitsEnabled(handle: number, axis: RawJointAxis): boolean;
+ jointConfigureMotor(handle: number, axis: RawJointAxis, targetPos: number, targetVel: number, stiffness: number, damping: number): void;
+ /**
+ * Are contacts between the rigid-bodies attached by this joint enabled?
+ */
+ jointContactsEnabled(handle: number): boolean;
+ /**
+ * Sets whether contacts are enabled between the rigid-bodies attached by this joint.
+ */
+ jointSetContactsEnabled(handle: number, enabled: boolean): void;
+ jointConfigureMotorModel(handle: number, axis: RawJointAxis, model: RawMotorModel): void;
+ jointConfigureMotorPosition(handle: number, axis: RawJointAxis, targetPos: number, stiffness: number, damping: number): void;
+ jointConfigureMotorVelocity(handle: number, axis: RawJointAxis, targetVel: number, factor: number): void;
+ /**
+ * The type of this joint.
+ */
+ jointType(handle: number): RawJointType;
+ createJoint(params: RawGenericJoint, parent1: number, parent2: number, wake_up: boolean): number;
+ /**
+ * Applies the given JavaScript function to the integer handle of each joint managed by this physics world.
+ *
+ * # Parameters
+ * - `f(handle)`: the function to apply to the integer handle of each joint managed by this set. Called as `f(collider)`.
+ */
+ forEachJointHandle(f: Function): void;
+ /**
+ * Applies the given JavaScript function to the integer handle of each joint attached to the given rigid-body.
+ *
+ * # Parameters
+ * - `f(handle)`: the function to apply to the integer handle of each joint attached to the rigid-body. Called as `f(collider)`.
+ */
+ forEachJointAttachedToRigidBody(body: number, f: Function): void;
+ len(): number;
+ constructor();
+ remove(handle: number, wakeUp: boolean): void;
+ contains(handle: number): boolean;
+}
+export class RawIntegrationParameters {
+ free(): void;
+ constructor();
+ lengthUnit: number;
+ readonly contact_erp: number;
+ minIslandSize: number;
+ maxCcdSubsteps: number;
+ numSolverIterations: number;
+ numInternalPgsIterations: number;
+ normalizedAllowedLinearError: number;
+ normalizedPredictionDistance: number;
+ set contact_natural_frequency(value: number);
+ dt: number;
+}
+export class RawIslandManager {
+ free(): void;
+ /**
+ * Applies the given JavaScript function to the integer handle of each active rigid-body
+ * managed by this island manager.
+ *
+ * After a short time of inactivity, a rigid-body is automatically deactivated ("asleep") by
+ * the physics engine in order to save computational power. A sleeping rigid-body never moves
+ * unless it is moved manually by the user.
+ *
+ * # Parameters
+ * - `f(handle)`: the function to apply to the integer handle of each active rigid-body managed by this
+ * set. Called as `f(collider)`.
+ */
+ forEachActiveRigidBodyHandle(f: Function): void;
+ constructor();
+}
+export class RawKinematicCharacterController {
+ free(): void;
+ slideEnabled(): boolean;
+ enableAutostep(maxHeight: number, minWidth: number, includeDynamicBodies: boolean): void;
+ autostepEnabled(): boolean;
+ disableAutostep(): void;
+ setSlideEnabled(enabled: boolean): void;
+ autostepMinWidth(): number | undefined;
+ computedGrounded(): boolean;
+ computedMovement(): RawVector;
+ autostepMaxHeight(): number | undefined;
+ computedCollision(i: number, collision: RawCharacterCollision): boolean;
+ normalNudgeFactor(): number;
+ enableSnapToGround(distance: number): void;
+ maxSlopeClimbAngle(): number;
+ minSlopeSlideAngle(): number;
+ disableSnapToGround(): void;
+ snapToGroundEnabled(): boolean;
+ setNormalNudgeFactor(value: number): void;
+ snapToGroundDistance(): number | undefined;
+ numComputedCollisions(): number;
+ setMaxSlopeClimbAngle(angle: number): void;
+ setMinSlopeSlideAngle(angle: number): void;
+ computeColliderMovement(dt: number, broad_phase: RawBroadPhase, narrow_phase: RawNarrowPhase, bodies: RawRigidBodySet, colliders: RawColliderSet, collider_handle: number, desired_translation_delta: RawVector, apply_impulses_to_dynamic_bodies: boolean, character_mass: number | null | undefined, filter_flags: number, filter_groups: number | null | undefined, filter_predicate: Function): void;
+ autostepIncludesDynamicBodies(): boolean | undefined;
+ up(): RawVector;
+ constructor(offset: number);
+ setUp(vector: RawVector): void;
+ offset(): number;
+ setOffset(value: number): void;
+}
+export class RawMultibodyJointSet {
+ free(): void;
+ /**
+ * The position of the first anchor of this joint.
+ *
+ * The first anchor gives the position of the points application point on the
+ * local frame of the first rigid-body it is attached to.
+ */
+ jointAnchor1(handle: number): RawVector;
+ /**
+ * The position of the second anchor of this joint.
+ *
+ * The second anchor gives the position of the points application point on the
+ * local frame of the second rigid-body it is attached to.
+ */
+ jointAnchor2(handle: number): RawVector;
+ /**
+ * The angular part of the joint’s local frame relative to the first rigid-body it is attached to.
+ */
+ jointFrameX1(handle: number): RawRotation;
+ /**
+ * The angular part of the joint’s local frame relative to the second rigid-body it is attached to.
+ */
+ jointFrameX2(handle: number): RawRotation;
+ /**
+ * If this is a prismatic joint, returns its upper limit.
+ */
+ jointLimitsMax(handle: number, axis: RawJointAxis): number;
+ /**
+ * Return the lower limit along the given joint axis.
+ */
+ jointLimitsMin(handle: number, axis: RawJointAxis): number;
+ /**
+ * Are the limits for this joint enabled?
+ */
+ jointLimitsEnabled(handle: number, axis: RawJointAxis): boolean;
+ /**
+ * Are contacts between the rigid-bodies attached by this joint enabled?
+ */
+ jointContactsEnabled(handle: number): boolean;
+ /**
+ * Sets whether contacts are enabled between the rigid-bodies attached by this joint.
+ */
+ jointSetContactsEnabled(handle: number, enabled: boolean): void;
+ /**
+ * The type of this joint.
+ */
+ jointType(handle: number): RawJointType;
+ createJoint(params: RawGenericJoint, parent1: number, parent2: number, wakeUp: boolean): number;
+ /**
+ * Applies the given JavaScript function to the integer handle of each joint managed by this physics world.
+ *
+ * # Parameters
+ * - `f(handle)`: the function to apply to the integer handle of each joint managed by this set. Called as `f(collider)`.
+ */
+ forEachJointHandle(f: Function): void;
+ /**
+ * Applies the given JavaScript function to the integer handle of each joint attached to the given rigid-body.
+ *
+ * # Parameters
+ * - `f(handle)`: the function to apply to the integer handle of each joint attached to the rigid-body. Called as `f(collider)`.
+ */
+ forEachJointAttachedToRigidBody(body: number, f: Function): void;
+ constructor();
+ remove(handle: number, wakeUp: boolean): void;
+ contains(handle: number): boolean;
+}
+export class RawNarrowPhase {
+ free(): void;
+ contact_pair(handle1: number, handle2: number): RawContactPair | undefined;
+ intersection_pair(handle1: number, handle2: number): boolean;
+ contact_pairs_with(handle1: number, f: Function): void;
+ intersection_pairs_with(handle1: number, f: Function): void;
+ constructor();
+}
+export class RawPhysicsPipeline {
+ free(): void;
+ timing_ccd(): number;
+ timing_step(): number;
+ timing_solver(): number;
+ stepWithEvents(gravity: RawVector, integrationParameters: RawIntegrationParameters, islands: RawIslandManager, broadPhase: RawBroadPhase, narrowPhase: RawNarrowPhase, bodies: RawRigidBodySet, colliders: RawColliderSet, joints: RawImpulseJointSet, articulations: RawMultibodyJointSet, ccd_solver: RawCCDSolver, eventQueue: RawEventQueue, hookObject: object, hookFilterContactPair: Function, hookFilterIntersectionPair: Function): void;
+ timing_ccd_solver(): number;
+ timing_broad_phase(): number;
+ is_profiler_enabled(): boolean;
+ timing_narrow_phase(): number;
+ timing_user_changes(): number;
+ set_profiler_enabled(enabled: boolean): void;
+ timing_ccd_broad_phase(): number;
+ timing_velocity_update(): number;
+ timing_ccd_narrow_phase(): number;
+ timing_velocity_assembly(): number;
+ timing_velocity_writeback(): number;
+ timing_ccd_toi_computation(): number;
+ timing_collision_detection(): number;
+ timing_island_construction(): number;
+ timing_velocity_resolution(): number;
+ constructor();
+ step(gravity: RawVector, integrationParameters: RawIntegrationParameters, islands: RawIslandManager, broadPhase: RawBroadPhase, narrowPhase: RawNarrowPhase, bodies: RawRigidBodySet, colliders: RawColliderSet, joints: RawImpulseJointSet, articulations: RawMultibodyJointSet, ccd_solver: RawCCDSolver): void;
+}
+export class RawPidController {
+ free(): void;
+ set_axes_mask(axes_mask: number): void;
+ reset_integrals(): void;
+ linear_correction(dt: number, bodies: RawRigidBodySet, rb_handle: number, target_translation: RawVector, target_linvel: RawVector): RawVector;
+ angular_correction(dt: number, bodies: RawRigidBodySet, rb_handle: number, target_rotation: number, target_angvel: number): number;
+ apply_linear_correction(dt: number, bodies: RawRigidBodySet, rb_handle: number, target_translation: RawVector, target_linvel: RawVector): void;
+ apply_angular_correction(dt: number, bodies: RawRigidBodySet, rb_handle: number, target_rotation: number, target_angvel: number): void;
+ constructor(kp: number, ki: number, kd: number, axes_mask: number);
+ set_kd(kd: number, axes: number): void;
+ set_ki(ki: number, axes: number): void;
+ set_kp(kp: number, axes: number): void;
+}
+export class RawPointColliderProjection {
+ private constructor();
+ free(): void;
+ featureType(): RawFeatureType;
+ colliderHandle(): number;
+ point(): RawVector;
+ isInside(): boolean;
+ featureId(): number | undefined;
+}
+export class RawPointProjection {
+ private constructor();
+ free(): void;
+ point(): RawVector;
+ isInside(): boolean;
+}
+export class RawRayColliderHit {
+ private constructor();
+ free(): void;
+ timeOfImpact(): number;
+ colliderHandle(): number;
+}
+export class RawRayColliderIntersection {
+ private constructor();
+ free(): void;
+ featureType(): RawFeatureType;
+ colliderHandle(): number;
+ time_of_impact(): number;
+ normal(): RawVector;
+ featureId(): number | undefined;
+}
+export class RawRayIntersection {
+ private constructor();
+ free(): void;
+ featureType(): RawFeatureType;
+ time_of_impact(): number;
+ normal(): RawVector;
+ featureId(): number | undefined;
+}
+export class RawRigidBodySet {
+ free(): void;
+ /**
+ * Adds a force at the center-of-mass of this rigid-body.
+ *
+ * # Parameters
+ * - `force`: the world-space force to apply on the rigid-body.
+ * - `wakeUp`: should the rigid-body be automatically woken-up?
+ */
+ rbAddForce(handle: number, force: RawVector, wakeUp: boolean): void;
+ /**
+ * The status of this rigid-body: fixed, dynamic, or kinematic.
+ */
+ rbBodyType(handle: number): RawRigidBodyType;
+ /**
+ * Retrieves the `i-th` collider attached to this rigid-body.
+ *
+ * # Parameters
+ * - `at`: The index of the collider to retrieve. Must be a number in `[0, this.numColliders()[`.
+ * This index is **not** the same as the unique identifier of the collider.
+ */
+ rbCollider(handle: number, at: number): number;
+ /**
+ * Is the velocity of this rigid-body not zero?
+ */
+ rbIsMoving(handle: number): boolean;
+ /**
+ * The center of mass of a rigid-body expressed in its local-space.
+ */
+ rbLocalCom(handle: number): RawVector;
+ /**
+ * The world-space orientation of this rigid-body.
+ */
+ rbRotation(handle: number): RawRotation;
+ /**
+ * An arbitrary user-defined 32-bit integer
+ */
+ rbUserData(handle: number): number;
+ /**
+ * The world-space center of mass of the rigid-body.
+ */
+ rbWorldCom(handle: number): RawVector;
+ /**
+ * Adds a torque at the center-of-mass of this rigid-body.
+ *
+ * # Parameters
+ * - `torque`: the torque to apply on the rigid-body.
+ * - `wakeUp`: should the rigid-body be automatically woken-up?
+ */
+ rbAddTorque(handle: number, torque: number, wakeUp: boolean): void;
+ rbEnableCcd(handle: number, enabled: boolean): void;
+ /**
+ * Is this rigid-body dynamic?
+ */
+ rbIsDynamic(handle: number): boolean;
+ rbIsEnabled(handle: number): boolean;
+ /**
+ * Sets the angular velocity of this rigid-body.
+ */
+ rbSetAngvel(handle: number, angvel: number, wakeUp: boolean): void;
+ /**
+ * Sets the linear velocity of this rigid-body.
+ */
+ rbSetLinvel(handle: number, linvel: RawVector, wakeUp: boolean): void;
+ /**
+ * Retrieves the constant force(s) the user added to this rigid-body.
+ * Returns zero if the rigid-body is not dynamic.
+ */
+ rbUserForce(handle: number): RawVector;
+ /**
+ * Is this rigid-body sleeping?
+ */
+ rbIsSleeping(handle: number): boolean;
+ rbSetEnabled(handle: number, enabled: boolean): void;
+ /**
+ * Retrieves the constant torque(s) the user added to this rigid-body.
+ * Returns zero if the rigid-body is not dynamic.
+ */
+ rbUserTorque(handle: number): number;
+ /**
+ * Is this rigid-body kinematic?
+ */
+ rbIsKinematic(handle: number): boolean;
+ /**
+ * Resets to zero all user-added forces added to this rigid-body.
+ */
+ rbResetForces(handle: number, wakeUp: boolean): void;
+ /**
+ * Set a new status for this rigid-body: fixed, dynamic, or kinematic.
+ */
+ rbSetBodyType(handle: number, status: RawRigidBodyType, wake_up: boolean): void;
+ /**
+ * Sets the rotation angle of this rigid-body.
+ *
+ * # Parameters
+ * - `angle`: the rotation angle, in radians.
+ * - `wakeUp`: forces the rigid-body to wake-up so it is properly affected by forces if it
+ * wasn't moving before modifying its position.
+ */
+ rbSetRotation(handle: number, angle: number, wakeUp: boolean): void;
+ /**
+ * Sets the user-defined 32-bit integer of this rigid-body.
+ *
+ * # Parameters
+ * - `data`: an arbitrary user-defined 32-bit integer.
+ */
+ rbSetUserData(handle: number, data: number): void;
+ /**
+ * The world-space translation of this rigid-body.
+ */
+ rbTranslation(handle: number): RawVector;
+ /**
+ * Applies an impulse at the center-of-mass of this rigid-body.
+ *
+ * # Parameters
+ * - `impulse`: the world-space impulse to apply on the rigid-body.
+ * - `wakeUp`: should the rigid-body be automatically woken-up?
+ */
+ rbApplyImpulse(handle: number, impulse: RawVector, wakeUp: boolean): void;
+ rbGravityScale(handle: number): number;
+ /**
+ * Is Continuous Collision Detection enabled for this rigid-body?
+ */
+ rbIsCcdEnabled(handle: number): boolean;
+ /**
+ * The world-space predicted orientation of this rigid-body.
+ *
+ * If this rigid-body is kinematic this value is set by the `setNextKinematicRotation`
+ * method and is used for estimating the kinematic body velocity at the next timestep.
+ * For non-kinematic bodies, this value is currently unspecified.
+ */
+ rbNextRotation(handle: number): RawRotation;
+ /**
+ * The number of colliders attached to this rigid-body.
+ */
+ rbNumColliders(handle: number): number;
+ /**
+ * Resets to zero all user-added torques added to this rigid-body.
+ */
+ rbResetTorques(handle: number, wakeUp: boolean): void;
+ /**
+ * The linear damping coefficient of this rigid-body.
+ */
+ rbLinearDamping(handle: number): number;
+ rbLockRotations(handle: number, locked: boolean, wake_up: boolean): void;
+ /**
+ * The angular damping coefficient of this rigid-body.
+ */
+ rbAngularDamping(handle: number): number;
+ rbDominanceGroup(handle: number): number;
+ /**
+ * Sets the translation of this rigid-body.
+ *
+ * # Parameters
+ * - `x`: the world-space position of the rigid-body along the `x` axis.
+ * - `y`: the world-space position of the rigid-body along the `y` axis.
+ * - `wakeUp`: forces the rigid-body to wake-up so it is properly affected by forces if it
+ * wasn't moving before modifying its position.
+ */
+ rbSetTranslation(handle: number, x: number, y: number, wakeUp: boolean): void;
+ /**
+ * Adds a force at the given world-space point of this rigid-body.
+ *
+ * # Parameters
+ * - `force`: the world-space force to apply on the rigid-body.
+ * - `point`: the world-space point where the impulse is to be applied on the rigid-body.
+ * - `wakeUp`: should the rigid-body be automatically woken-up?
+ */
+ rbAddForceAtPoint(handle: number, force: RawVector, point: RawVector, wakeUp: boolean): void;
+ /**
+ * The world-space predicted translation of this rigid-body.
+ *
+ * If this rigid-body is kinematic this value is set by the `setNextKinematicTranslation`
+ * method and is used for estimating the kinematic body velocity at the next timestep.
+ * For non-kinematic bodies, this value is currently unspecified.
+ */
+ rbNextTranslation(handle: number): RawVector;
+ rbSetGravityScale(handle: number, factor: number, wakeUp: boolean): void;
+ /**
+ * The velocity of the given world-space point on this rigid-body.
+ */
+ rbVelocityAtPoint(handle: number, point: RawVector): RawVector;
+ /**
+ * The inverse mass taking into account translation locking.
+ */
+ rbEffectiveInvMass(handle: number): RawVector;
+ rbLockTranslations(handle: number, locked: boolean, wake_up: boolean): void;
+ /**
+ * The angular inertia along the principal inertia axes of the rigid-body.
+ */
+ rbPrincipalInertia(handle: number): number;
+ rbSetLinearDamping(handle: number, factor: number): void;
+ rbSetAdditionalMass(handle: number, mass: number, wake_up: boolean): void;
+ rbSetAngularDamping(handle: number, factor: number): void;
+ rbSetDominanceGroup(handle: number, group: number): void;
+ rbSoftCcdPrediction(handle: number): number;
+ /**
+ * Applies an impulsive torque at the center-of-mass of this rigid-body.
+ *
+ * # Parameters
+ * - `torque impulse`: the torque impulse to apply on the rigid-body.
+ * - `wakeUp`: should the rigid-body be automatically woken-up?
+ */
+ rbApplyTorqueImpulse(handle: number, torque_impulse: number, wakeUp: boolean): void;
+ /**
+ * Applies an impulse at the given world-space point of this rigid-body.
+ *
+ * # Parameters
+ * - `impulse`: the world-space impulse to apply on the rigid-body.
+ * - `point`: the world-space point where the impulse is to be applied on the rigid-body.
+ * - `wakeUp`: should the rigid-body be automatically woken-up?
+ */
+ rbApplyImpulseAtPoint(handle: number, impulse: RawVector, point: RawVector, wakeUp: boolean): void;
+ /**
+ * The inverse of the principal angular inertia of the rigid-body.
+ *
+ * Components set to zero are assumed to be infinite along the corresponding principal axis.
+ */
+ rbInvPrincipalInertia(handle: number): number;
+ rbSetSoftCcdPrediction(handle: number, prediction: number): void;
+ rbSetEnabledTranslations(handle: number, allow_x: boolean, allow_y: boolean, wake_up: boolean): void;
+ /**
+ * The effective world-space angular inertia (that takes the potential rotation locking into account) of
+ * this rigid-body.
+ */
+ rbEffectiveAngularInertia(handle: number): number;
+ /**
+ * The world-space inverse angular inertia tensor of the rigid-body,
+ * taking into account rotation locking.
+ */
+ rbEffectiveWorldInvInertia(handle: number): number;
+ /**
+ * If this rigid body is kinematic, sets its future rotation after the next timestep integration.
+ *
+ * This should be used instead of `rigidBody.setRotation` to make the dynamic object
+ * interacting with this kinematic body behave as expected. Internally, Rapier will compute
+ * an artificial velocity for this rigid-body from its current position and its next kinematic
+ * position. This velocity will be used to compute forces on dynamic bodies interacting with
+ * this body.
+ *
+ * # Parameters
+ * - `angle`: the rotation angle, in radians.
+ */
+ rbSetNextKinematicRotation(handle: number, angle: number): void;
+ rbAdditionalSolverIterations(handle: number): number;
+ rbSetAdditionalMassProperties(handle: number, mass: number, centerOfMass: RawVector, principalAngularInertia: number, wake_up: boolean): void;
+ /**
+ * If this rigid body is kinematic, sets its future translation after the next timestep integration.
+ *
+ * This should be used instead of `rigidBody.setTranslation` to make the dynamic object
+ * interacting with this kinematic body behave as expected. Internally, Rapier will compute
+ * an artificial velocity for this rigid-body from its current position and its next kinematic
+ * position. This velocity will be used to compute forces on dynamic bodies interacting with
+ * this body.
+ *
+ * # Parameters
+ * - `x`: the world-space position of the rigid-body along the `x` axis.
+ * - `y`: the world-space position of the rigid-body along the `y` axis.
+ */
+ rbSetNextKinematicTranslation(handle: number, x: number, y: number): void;
+ rbSetAdditionalSolverIterations(handle: number, iters: number): void;
+ rbRecomputeMassPropertiesFromColliders(handle: number, colliders: RawColliderSet): void;
+ /**
+ * The mass of this rigid-body.
+ */
+ rbMass(handle: number): number;
+ /**
+ * Put the given rigid-body to sleep.
+ */
+ rbSleep(handle: number): void;
+ /**
+ * The angular velocity of this rigid-body.
+ */
+ rbAngvel(handle: number): number;
+ /**
+ * The linear velocity of this rigid-body.
+ */
+ rbLinvel(handle: number): RawVector;
+ /**
+ * Wakes this rigid-body up.
+ *
+ * A dynamic rigid-body that does not move during several consecutive frames will
+ * be put to sleep by the physics engine, i.e., it will stop being simulated in order
+ * to avoid useless computations.
+ * This method forces a sleeping rigid-body to wake-up. This is useful, e.g., before modifying
+ * the position of a dynamic body so that it is properly simulated afterwards.
+ */
+ rbWakeUp(handle: number): void;
+ /**
+ * The inverse of the mass of a rigid-body.
+ *
+ * If this is zero, the rigid-body is assumed to have infinite mass.
+ */
+ rbInvMass(handle: number): number;
+ /**
+ * Is this rigid-body fixed?
+ */
+ rbIsFixed(handle: number): boolean;
+ createRigidBody(enabled: boolean, translation: RawVector, rotation: RawRotation, gravityScale: number, mass: number, massOnly: boolean, centerOfMass: RawVector, linvel: RawVector, angvel: number, principalAngularInertia: number, translationEnabledX: boolean, translationEnabledY: boolean, rotationsEnabled: boolean, linearDamping: number, angularDamping: number, rb_type: RawRigidBodyType, canSleep: boolean, sleeping: boolean, softCcdPrediciton: number, ccdEnabled: boolean, dominanceGroup: number, additional_solver_iterations: number): number;
+ /**
+ * Applies the given JavaScript function to the integer handle of each rigid-body managed by this set.
+ *
+ * # Parameters
+ * - `f(handle)`: the function to apply to the integer handle of each rigid-body managed by this set. Called as `f(collider)`.
+ */
+ forEachRigidBodyHandle(f: Function): void;
+ /**
+ * The number of rigid-bodies on this set.
+ */
+ len(): number;
+ constructor();
+ propagateModifiedBodyPositionsToColliders(colliders: RawColliderSet): void;
+ remove(handle: number, islands: RawIslandManager, colliders: RawColliderSet, joints: RawImpulseJointSet, articulations: RawMultibodyJointSet): void;
+ /**
+ * Checks if a rigid-body with the given integer handle exists.
+ */
+ contains(handle: number): boolean;
+}
+/**
+ * A rotation quaternion.
+ */
+export class RawRotation {
+ private constructor();
+ free(): void;
+ /**
+ * The identity rotation.
+ */
+ static identity(): RawRotation;
+ /**
+ * The rotation with thegiven angle.
+ */
+ static fromAngle(angle: number): RawRotation;
+ /**
+ * The imaginary part of this complex number.
+ */
+ readonly im: number;
+ /**
+ * The real part of this complex number.
+ */
+ readonly re: number;
+ /**
+ * The rotation angle in radians.
+ */
+ readonly angle: number;
+}
+export class RawSerializationPipeline {
+ free(): void;
+ serializeAll(gravity: RawVector, integrationParameters: RawIntegrationParameters, islands: RawIslandManager, broadPhase: RawBroadPhase, narrowPhase: RawNarrowPhase, bodies: RawRigidBodySet, colliders: RawColliderSet, impulse_joints: RawImpulseJointSet, multibody_joints: RawMultibodyJointSet): Uint8Array | undefined;
+ deserializeAll(data: Uint8Array): RawDeserializedWorld | undefined;
+ constructor();
+}
+export class RawShape {
+ private constructor();
+ free(): void;
+ static convexHull(points: Float32Array): RawShape | undefined;
+ static heightfield(heights: Float32Array, scale: RawVector): RawShape;
+ static roundCuboid(hx: number, hy: number, borderRadius: number): RawShape;
+ contactShape(shapePos1: RawVector, shapeRot1: RawRotation, shape2: RawShape, shapePos2: RawVector, shapeRot2: RawRotation, prediction: number): RawShapeContact | undefined;
+ projectPoint(shapePos: RawVector, shapeRot: RawRotation, point: RawVector, solid: boolean): RawPointProjection;
+ containsPoint(shapePos: RawVector, shapeRot: RawRotation, point: RawVector): boolean;
+ intersectsRay(shapePos: RawVector, shapeRot: RawRotation, rayOrig: RawVector, rayDir: RawVector, maxToi: number): boolean;
+ static roundTriangle(p1: RawVector, p2: RawVector, p3: RawVector, borderRadius: number): RawShape;
+ static convexPolyline(vertices: Float32Array): RawShape | undefined;
+ intersectsShape(shapePos1: RawVector, shapeRot1: RawRotation, shape2: RawShape, shapePos2: RawVector, shapeRot2: RawRotation): boolean;
+ static roundConvexHull(points: Float32Array, borderRadius: number): RawShape | undefined;
+ static voxelsFromPoints(voxel_size: RawVector, points: Float32Array): RawShape;
+ castRayAndGetNormal(shapePos: RawVector, shapeRot: RawRotation, rayOrig: RawVector, rayDir: RawVector, maxToi: number, solid: boolean): RawRayIntersection | undefined;
+ static roundConvexPolyline(vertices: Float32Array, borderRadius: number): RawShape | undefined;
+ static ball(radius: number): RawShape;
+ static cuboid(hx: number, hy: number): RawShape;
+ static voxels(voxel_size: RawVector, grid_coords: Int32Array): RawShape;
+ static capsule(halfHeight: number, radius: number): RawShape;
+ castRay(shapePos: RawVector, shapeRot: RawRotation, rayOrig: RawVector, rayDir: RawVector, maxToi: number, solid: boolean): number;
+ static segment(p1: RawVector, p2: RawVector): RawShape;
+ static trimesh(vertices: Float32Array, indices: Uint32Array, flags: number): RawShape | undefined;
+ static polyline(vertices: Float32Array, indices: Uint32Array): RawShape;
+ static triangle(p1: RawVector, p2: RawVector, p3: RawVector): RawShape;
+ castShape(shapePos1: RawVector, shapeRot1: RawRotation, shapeVel1: RawVector, shape2: RawShape, shapePos2: RawVector, shapeRot2: RawRotation, shapeVel2: RawVector, target_distance: number, maxToi: number, stop_at_penetration: boolean): RawShapeCastHit | undefined;
+ static halfspace(normal: RawVector): RawShape;
+}
+export class RawShapeCastHit {
+ private constructor();
+ free(): void;
+ time_of_impact(): number;
+ normal1(): RawVector;
+ normal2(): RawVector;
+ witness1(): RawVector;
+ witness2(): RawVector;
+}
+export class RawShapeContact {
+ private constructor();
+ free(): void;
+ point1(): RawVector;
+ point2(): RawVector;
+ normal1(): RawVector;
+ normal2(): RawVector;
+ distance(): number;
+}
+/**
+ * A vector.
+ */
+export class RawVector {
+ free(): void;
+ /**
+ * Create a new 2D vector from this vector with its components rearranged as `{x, y}`.
+ */
+ xy(): RawVector;
+ /**
+ * Create a new 2D vector from this vector with its components rearranged as `{y, x}`.
+ */
+ yx(): RawVector;
+ /**
+ * Creates a new 2D vector from its two components.
+ *
+ * # Parameters
+ * - `x`: the `x` component of this 2D vector.
+ * - `y`: the `y` component of this 2D vector.
+ */
+ constructor(x: number, y: number);
+ /**
+ * Creates a new vector filled with zeros.
+ */
+ static zero(): RawVector;
+ /**
+ * The `x` component of this vector.
+ */
+ x: number;
+ /**
+ * The `y` component of this vector.
+ */
+ y: number;
+}
+
+export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module;
+
+export interface InitOutput {
+ readonly memory: WebAssembly.Memory;
+ readonly __wbg_rawbroadphase_free: (a: number, b: number) => void;
+ readonly __wbg_rawccdsolver_free: (a: number, b: number) => void;
+ readonly __wbg_rawcharactercollision_free: (a: number, b: number) => void;
+ readonly __wbg_rawcolliderset_free: (a: number, b: number) => void;
+ readonly __wbg_rawcollidershapecasthit_free: (a: number, b: number) => void;
+ readonly __wbg_rawcontactforceevent_free: (a: number, b: number) => void;
+ readonly __wbg_rawcontactmanifold_free: (a: number, b: number) => void;
+ readonly __wbg_rawdebugrenderpipeline_free: (a: number, b: number) => void;
+ readonly __wbg_rawdeserializedworld_free: (a: number, b: number) => void;
+ readonly __wbg_raweventqueue_free: (a: number, b: number) => void;
+ readonly __wbg_rawgenericjoint_free: (a: number, b: number) => void;
+ readonly __wbg_rawimpulsejointset_free: (a: number, b: number) => void;
+ readonly __wbg_rawintegrationparameters_free: (a: number, b: number) => void;
+ readonly __wbg_rawislandmanager_free: (a: number, b: number) => void;
+ readonly __wbg_rawkinematiccharactercontroller_free: (a: number, b: number) => void;
+ readonly __wbg_rawmultibodyjointset_free: (a: number, b: number) => void;
+ readonly __wbg_rawnarrowphase_free: (a: number, b: number) => void;
+ readonly __wbg_rawphysicspipeline_free: (a: number, b: number) => void;
+ readonly __wbg_rawpidcontroller_free: (a: number, b: number) => void;
+ readonly __wbg_rawpointcolliderprojection_free: (a: number, b: number) => void;
+ readonly __wbg_rawpointprojection_free: (a: number, b: number) => void;
+ readonly __wbg_rawrayintersection_free: (a: number, b: number) => void;
+ readonly __wbg_rawrigidbodyset_free: (a: number, b: number) => void;
+ readonly __wbg_rawrotation_free: (a: number, b: number) => void;
+ readonly __wbg_rawshape_free: (a: number, b: number) => void;
+ readonly __wbg_rawshapecontact_free: (a: number, b: number) => void;
+ readonly __wbg_rawvector_free: (a: number, b: number) => void;
+ readonly rawbroadphase_castRay: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number) => number;
+ readonly rawbroadphase_castRayAndGetNormal: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number) => number;
+ readonly rawbroadphase_castShape: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number) => number;
+ readonly rawbroadphase_collidersWithAabbIntersectingAabb: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
+ readonly rawbroadphase_intersectionWithShape: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number) => void;
+ readonly rawbroadphase_intersectionsWithPoint: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number) => void;
+ readonly rawbroadphase_intersectionsWithRay: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number) => void;
+ readonly rawbroadphase_intersectionsWithShape: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number) => void;
+ readonly rawbroadphase_new: () => number;
+ readonly rawbroadphase_projectPoint: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number) => number;
+ readonly rawbroadphase_projectPointAndGetFeature: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number) => number;
+ readonly rawcharactercollision_handle: (a: number) => number;
+ readonly rawcharactercollision_new: () => number;
+ readonly rawcharactercollision_toi: (a: number) => number;
+ readonly rawcharactercollision_translationDeltaApplied: (a: number) => number;
+ readonly rawcharactercollision_translationDeltaRemaining: (a: number) => number;
+ readonly rawcharactercollision_worldNormal1: (a: number) => number;
+ readonly rawcharactercollision_worldNormal2: (a: number) => number;
+ readonly rawcharactercollision_worldWitness1: (a: number) => number;
+ readonly rawcharactercollision_worldWitness2: (a: number) => number;
+ readonly rawcolliderset_coActiveCollisionTypes: (a: number, b: number) => number;
+ readonly rawcolliderset_coActiveEvents: (a: number, b: number) => number;
+ readonly rawcolliderset_coActiveHooks: (a: number, b: number) => number;
+ readonly rawcolliderset_coCastCollider: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => number;
+ readonly rawcolliderset_coCastRay: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
+ readonly rawcolliderset_coCastRayAndGetNormal: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
+ readonly rawcolliderset_coCastShape: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number) => number;
+ readonly rawcolliderset_coCollisionGroups: (a: number, b: number) => number;
+ readonly rawcolliderset_coCombineVoxelStates: (a: number, b: number, c: number, d: number, e: number) => void;
+ readonly rawcolliderset_coContactCollider: (a: number, b: number, c: number, d: number) => number;
+ readonly rawcolliderset_coContactForceEventThreshold: (a: number, b: number) => number;
+ readonly rawcolliderset_coContactShape: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
+ readonly rawcolliderset_coContactSkin: (a: number, b: number) => number;
+ readonly rawcolliderset_coContainsPoint: (a: number, b: number, c: number) => number;
+ readonly rawcolliderset_coDensity: (a: number, b: number) => number;
+ readonly rawcolliderset_coFriction: (a: number, b: number) => number;
+ readonly rawcolliderset_coFrictionCombineRule: (a: number, b: number) => number;
+ readonly rawcolliderset_coHalfExtents: (a: number, b: number) => number;
+ readonly rawcolliderset_coHalfHeight: (a: number, b: number) => number;
+ readonly rawcolliderset_coHalfspaceNormal: (a: number, b: number) => number;
+ readonly rawcolliderset_coHeightfieldHeights: (a: number, b: number, c: number) => void;
+ readonly rawcolliderset_coHeightfieldScale: (a: number, b: number) => number;
+ readonly rawcolliderset_coIndices: (a: number, b: number, c: number) => void;
+ readonly rawcolliderset_coIntersectsRay: (a: number, b: number, c: number, d: number, e: number) => number;
+ readonly rawcolliderset_coIntersectsShape: (a: number, b: number, c: number, d: number, e: number) => number;
+ readonly rawcolliderset_coIsEnabled: (a: number, b: number) => number;
+ readonly rawcolliderset_coIsSensor: (a: number, b: number) => number;
+ readonly rawcolliderset_coMass: (a: number, b: number) => number;
+ readonly rawcolliderset_coParent: (a: number, b: number, c: number) => void;
+ readonly rawcolliderset_coProjectPoint: (a: number, b: number, c: number, d: number) => number;
+ readonly rawcolliderset_coPropagateVoxelChange: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
+ readonly rawcolliderset_coRadius: (a: number, b: number) => number;
+ readonly rawcolliderset_coRestitution: (a: number, b: number) => number;
+ readonly rawcolliderset_coRestitutionCombineRule: (a: number, b: number) => number;
+ readonly rawcolliderset_coRotation: (a: number, b: number) => number;
+ readonly rawcolliderset_coRotationWrtParent: (a: number, b: number) => number;
+ readonly rawcolliderset_coRoundRadius: (a: number, b: number) => number;
+ readonly rawcolliderset_coSetActiveCollisionTypes: (a: number, b: number, c: number) => void;
+ readonly rawcolliderset_coSetActiveEvents: (a: number, b: number, c: number) => void;
+ readonly rawcolliderset_coSetActiveHooks: (a: number, b: number, c: number) => void;
+ readonly rawcolliderset_coSetCollisionGroups: (a: number, b: number, c: number) => void;
+ readonly rawcolliderset_coSetContactForceEventThreshold: (a: number, b: number, c: number) => void;
+ readonly rawcolliderset_coSetContactSkin: (a: number, b: number, c: number) => void;
+ readonly rawcolliderset_coSetDensity: (a: number, b: number, c: number) => void;
+ readonly rawcolliderset_coSetEnabled: (a: number, b: number, c: number) => void;
+ readonly rawcolliderset_coSetFriction: (a: number, b: number, c: number) => void;
+ readonly rawcolliderset_coSetFrictionCombineRule: (a: number, b: number, c: number) => void;
+ readonly rawcolliderset_coSetHalfExtents: (a: number, b: number, c: number) => void;
+ readonly rawcolliderset_coSetHalfHeight: (a: number, b: number, c: number) => void;
+ readonly rawcolliderset_coSetMass: (a: number, b: number, c: number) => void;
+ readonly rawcolliderset_coSetMassProperties: (a: number, b: number, c: number, d: number, e: number) => void;
+ readonly rawcolliderset_coSetRadius: (a: number, b: number, c: number) => void;
+ readonly rawcolliderset_coSetRestitution: (a: number, b: number, c: number) => void;
+ readonly rawcolliderset_coSetRestitutionCombineRule: (a: number, b: number, c: number) => void;
+ readonly rawcolliderset_coSetRotation: (a: number, b: number, c: number) => void;
+ readonly rawcolliderset_coSetRotationWrtParent: (a: number, b: number, c: number) => void;
+ readonly rawcolliderset_coSetRoundRadius: (a: number, b: number, c: number) => void;
+ readonly rawcolliderset_coSetSensor: (a: number, b: number, c: number) => void;
+ readonly rawcolliderset_coSetShape: (a: number, b: number, c: number) => void;
+ readonly rawcolliderset_coSetSolverGroups: (a: number, b: number, c: number) => void;
+ readonly rawcolliderset_coSetTranslation: (a: number, b: number, c: number, d: number) => void;
+ readonly rawcolliderset_coSetTranslationWrtParent: (a: number, b: number, c: number, d: number) => void;
+ readonly rawcolliderset_coSetVoxel: (a: number, b: number, c: number, d: number, e: number) => void;
+ readonly rawcolliderset_coShapeType: (a: number, b: number) => number;
+ readonly rawcolliderset_coSolverGroups: (a: number, b: number) => number;
+ readonly rawcolliderset_coTranslation: (a: number, b: number) => number;
+ readonly rawcolliderset_coTranslationWrtParent: (a: number, b: number) => number;
+ readonly rawcolliderset_coTriMeshFlags: (a: number, b: number) => number;
+ readonly rawcolliderset_coVertices: (a: number, b: number, c: number) => void;
+ readonly rawcolliderset_coVolume: (a: number, b: number) => number;
+ readonly rawcolliderset_coVoxelData: (a: number, b: number, c: number) => void;
+ readonly rawcolliderset_coVoxelSize: (a: number, b: number) => number;
+ readonly rawcolliderset_contains: (a: number, b: number) => number;
+ readonly rawcolliderset_createCollider: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number, x: number, y: number, z: number) => void;
+ readonly rawcolliderset_forEachColliderHandle: (a: number, b: number) => void;
+ readonly rawcolliderset_len: (a: number) => number;
+ readonly rawcolliderset_new: () => number;
+ readonly rawcolliderset_remove: (a: number, b: number, c: number, d: number, e: number) => void;
+ readonly rawcollidershapecasthit_colliderHandle: (a: number) => number;
+ readonly rawcollidershapecasthit_normal1: (a: number) => number;
+ readonly rawcollidershapecasthit_normal2: (a: number) => number;
+ readonly rawcollidershapecasthit_time_of_impact: (a: number) => number;
+ readonly rawcollidershapecasthit_witness1: (a: number) => number;
+ readonly rawcollidershapecasthit_witness2: (a: number) => number;
+ readonly rawcontactforceevent_collider2: (a: number) => number;
+ readonly rawcontactforceevent_max_force_magnitude: (a: number) => number;
+ readonly rawcontactforceevent_total_force: (a: number) => number;
+ readonly rawcontactforceevent_total_force_magnitude: (a: number) => number;
+ readonly rawcontactmanifold_contact_dist: (a: number, b: number) => number;
+ readonly rawcontactmanifold_contact_fid1: (a: number, b: number) => number;
+ readonly rawcontactmanifold_contact_fid2: (a: number, b: number) => number;
+ readonly rawcontactmanifold_contact_impulse: (a: number, b: number) => number;
+ readonly rawcontactmanifold_contact_local_p1: (a: number, b: number) => number;
+ readonly rawcontactmanifold_contact_local_p2: (a: number, b: number) => number;
+ readonly rawcontactmanifold_contact_tangent_impulse: (a: number, b: number) => number;
+ readonly rawcontactmanifold_local_n1: (a: number) => number;
+ readonly rawcontactmanifold_local_n2: (a: number) => number;
+ readonly rawcontactmanifold_normal: (a: number) => number;
+ readonly rawcontactmanifold_num_contacts: (a: number) => number;
+ readonly rawcontactmanifold_num_solver_contacts: (a: number) => number;
+ readonly rawcontactmanifold_solver_contact_dist: (a: number, b: number) => number;
+ readonly rawcontactmanifold_solver_contact_friction: (a: number, b: number) => number;
+ readonly rawcontactmanifold_solver_contact_point: (a: number, b: number) => number;
+ readonly rawcontactmanifold_solver_contact_restitution: (a: number, b: number) => number;
+ readonly rawcontactmanifold_solver_contact_tangent_velocity: (a: number, b: number) => number;
+ readonly rawcontactmanifold_subshape1: (a: number) => number;
+ readonly rawcontactmanifold_subshape2: (a: number) => number;
+ readonly rawcontactpair_collider1: (a: number) => number;
+ readonly rawcontactpair_collider2: (a: number) => number;
+ readonly rawcontactpair_contactManifold: (a: number, b: number) => number;
+ readonly rawcontactpair_numContactManifolds: (a: number) => number;
+ readonly rawdebugrenderpipeline_colors: (a: number) => number;
+ readonly rawdebugrenderpipeline_new: () => number;
+ readonly rawdebugrenderpipeline_render: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => void;
+ readonly rawdebugrenderpipeline_vertices: (a: number) => number;
+ readonly rawdeserializedworld_takeBodies: (a: number) => number;
+ readonly rawdeserializedworld_takeBroadPhase: (a: number) => number;
+ readonly rawdeserializedworld_takeColliders: (a: number) => number;
+ readonly rawdeserializedworld_takeGravity: (a: number) => number;
+ readonly rawdeserializedworld_takeImpulseJoints: (a: number) => number;
+ readonly rawdeserializedworld_takeIntegrationParameters: (a: number) => number;
+ readonly rawdeserializedworld_takeIslandManager: (a: number) => number;
+ readonly rawdeserializedworld_takeMultibodyJoints: (a: number) => number;
+ readonly rawdeserializedworld_takeNarrowPhase: (a: number) => number;
+ readonly raweventqueue_clear: (a: number) => void;
+ readonly raweventqueue_drainCollisionEvents: (a: number, b: number) => void;
+ readonly raweventqueue_drainContactForceEvents: (a: number, b: number) => void;
+ readonly raweventqueue_new: (a: number) => number;
+ readonly rawgenericjoint_fixed: (a: number, b: number, c: number, d: number) => number;
+ readonly rawgenericjoint_prismatic: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
+ readonly rawgenericjoint_revolute: (a: number, b: number) => number;
+ readonly rawgenericjoint_rope: (a: number, b: number, c: number) => number;
+ readonly rawgenericjoint_spring: (a: number, b: number, c: number, d: number, e: number) => number;
+ readonly rawimpulsejointset_contains: (a: number, b: number) => number;
+ readonly rawimpulsejointset_createJoint: (a: number, b: number, c: number, d: number, e: number) => number;
+ readonly rawimpulsejointset_forEachJointAttachedToRigidBody: (a: number, b: number, c: number) => void;
+ readonly rawimpulsejointset_forEachJointHandle: (a: number, b: number) => void;
+ readonly rawimpulsejointset_jointAnchor1: (a: number, b: number) => number;
+ readonly rawimpulsejointset_jointAnchor2: (a: number, b: number) => number;
+ readonly rawimpulsejointset_jointBodyHandle1: (a: number, b: number) => number;
+ readonly rawimpulsejointset_jointBodyHandle2: (a: number, b: number) => number;
+ readonly rawimpulsejointset_jointConfigureMotor: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
+ readonly rawimpulsejointset_jointConfigureMotorModel: (a: number, b: number, c: number, d: number) => void;
+ readonly rawimpulsejointset_jointConfigureMotorPosition: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
+ readonly rawimpulsejointset_jointConfigureMotorVelocity: (a: number, b: number, c: number, d: number, e: number) => void;
+ readonly rawimpulsejointset_jointContactsEnabled: (a: number, b: number) => number;
+ readonly rawimpulsejointset_jointFrameX1: (a: number, b: number) => number;
+ readonly rawimpulsejointset_jointFrameX2: (a: number, b: number) => number;
+ readonly rawimpulsejointset_jointLimitsEnabled: (a: number, b: number, c: number) => number;
+ readonly rawimpulsejointset_jointLimitsMax: (a: number, b: number, c: number) => number;
+ readonly rawimpulsejointset_jointLimitsMin: (a: number, b: number, c: number) => number;
+ readonly rawimpulsejointset_jointSetAnchor1: (a: number, b: number, c: number) => void;
+ readonly rawimpulsejointset_jointSetAnchor2: (a: number, b: number, c: number) => void;
+ readonly rawimpulsejointset_jointSetContactsEnabled: (a: number, b: number, c: number) => void;
+ readonly rawimpulsejointset_jointSetLimits: (a: number, b: number, c: number, d: number, e: number) => void;
+ readonly rawimpulsejointset_jointType: (a: number, b: number) => number;
+ readonly rawimpulsejointset_len: (a: number) => number;
+ readonly rawimpulsejointset_new: () => number;
+ readonly rawimpulsejointset_remove: (a: number, b: number, c: number) => void;
+ readonly rawintegrationparameters_contact_erp: (a: number) => number;
+ readonly rawintegrationparameters_dt: (a: number) => number;
+ readonly rawintegrationparameters_lengthUnit: (a: number) => number;
+ readonly rawintegrationparameters_maxCcdSubsteps: (a: number) => number;
+ readonly rawintegrationparameters_minIslandSize: (a: number) => number;
+ readonly rawintegrationparameters_new: () => number;
+ readonly rawintegrationparameters_numInternalPgsIterations: (a: number) => number;
+ readonly rawintegrationparameters_numSolverIterations: (a: number) => number;
+ readonly rawintegrationparameters_set_contact_natural_frequency: (a: number, b: number) => void;
+ readonly rawintegrationparameters_set_dt: (a: number, b: number) => void;
+ readonly rawintegrationparameters_set_lengthUnit: (a: number, b: number) => void;
+ readonly rawintegrationparameters_set_maxCcdSubsteps: (a: number, b: number) => void;
+ readonly rawintegrationparameters_set_minIslandSize: (a: number, b: number) => void;
+ readonly rawintegrationparameters_set_normalizedAllowedLinearError: (a: number, b: number) => void;
+ readonly rawintegrationparameters_set_normalizedPredictionDistance: (a: number, b: number) => void;
+ readonly rawintegrationparameters_set_numInternalPgsIterations: (a: number, b: number) => void;
+ readonly rawintegrationparameters_set_numSolverIterations: (a: number, b: number) => void;
+ readonly rawislandmanager_forEachActiveRigidBodyHandle: (a: number, b: number) => void;
+ readonly rawislandmanager_new: () => number;
+ readonly rawkinematiccharactercontroller_autostepEnabled: (a: number) => number;
+ readonly rawkinematiccharactercontroller_autostepIncludesDynamicBodies: (a: number) => number;
+ readonly rawkinematiccharactercontroller_autostepMaxHeight: (a: number) => number;
+ readonly rawkinematiccharactercontroller_autostepMinWidth: (a: number) => number;
+ readonly rawkinematiccharactercontroller_computeColliderMovement: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number) => void;
+ readonly rawkinematiccharactercontroller_computedCollision: (a: number, b: number, c: number) => number;
+ readonly rawkinematiccharactercontroller_computedGrounded: (a: number) => number;
+ readonly rawkinematiccharactercontroller_computedMovement: (a: number) => number;
+ readonly rawkinematiccharactercontroller_disableAutostep: (a: number) => void;
+ readonly rawkinematiccharactercontroller_disableSnapToGround: (a: number) => void;
+ readonly rawkinematiccharactercontroller_enableAutostep: (a: number, b: number, c: number, d: number) => void;
+ readonly rawkinematiccharactercontroller_enableSnapToGround: (a: number, b: number) => void;
+ readonly rawkinematiccharactercontroller_maxSlopeClimbAngle: (a: number) => number;
+ readonly rawkinematiccharactercontroller_minSlopeSlideAngle: (a: number) => number;
+ readonly rawkinematiccharactercontroller_new: (a: number) => number;
+ readonly rawkinematiccharactercontroller_normalNudgeFactor: (a: number) => number;
+ readonly rawkinematiccharactercontroller_numComputedCollisions: (a: number) => number;
+ readonly rawkinematiccharactercontroller_offset: (a: number) => number;
+ readonly rawkinematiccharactercontroller_setMaxSlopeClimbAngle: (a: number, b: number) => void;
+ readonly rawkinematiccharactercontroller_setMinSlopeSlideAngle: (a: number, b: number) => void;
+ readonly rawkinematiccharactercontroller_setNormalNudgeFactor: (a: number, b: number) => void;
+ readonly rawkinematiccharactercontroller_setOffset: (a: number, b: number) => void;
+ readonly rawkinematiccharactercontroller_setSlideEnabled: (a: number, b: number) => void;
+ readonly rawkinematiccharactercontroller_setUp: (a: number, b: number) => void;
+ readonly rawkinematiccharactercontroller_slideEnabled: (a: number) => number;
+ readonly rawkinematiccharactercontroller_snapToGroundDistance: (a: number) => number;
+ readonly rawkinematiccharactercontroller_snapToGroundEnabled: (a: number) => number;
+ readonly rawmultibodyjointset_contains: (a: number, b: number) => number;
+ readonly rawmultibodyjointset_createJoint: (a: number, b: number, c: number, d: number, e: number) => number;
+ readonly rawmultibodyjointset_forEachJointAttachedToRigidBody: (a: number, b: number, c: number) => void;
+ readonly rawmultibodyjointset_forEachJointHandle: (a: number, b: number) => void;
+ readonly rawmultibodyjointset_jointAnchor1: (a: number, b: number) => number;
+ readonly rawmultibodyjointset_jointAnchor2: (a: number, b: number) => number;
+ readonly rawmultibodyjointset_jointContactsEnabled: (a: number, b: number) => number;
+ readonly rawmultibodyjointset_jointFrameX1: (a: number, b: number) => number;
+ readonly rawmultibodyjointset_jointFrameX2: (a: number, b: number) => number;
+ readonly rawmultibodyjointset_jointLimitsEnabled: (a: number, b: number, c: number) => number;
+ readonly rawmultibodyjointset_jointLimitsMax: (a: number, b: number, c: number) => number;
+ readonly rawmultibodyjointset_jointLimitsMin: (a: number, b: number, c: number) => number;
+ readonly rawmultibodyjointset_jointSetContactsEnabled: (a: number, b: number, c: number) => void;
+ readonly rawmultibodyjointset_jointType: (a: number, b: number) => number;
+ readonly rawmultibodyjointset_new: () => number;
+ readonly rawmultibodyjointset_remove: (a: number, b: number, c: number) => void;
+ readonly rawnarrowphase_contact_pair: (a: number, b: number, c: number) => number;
+ readonly rawnarrowphase_contact_pairs_with: (a: number, b: number, c: number) => void;
+ readonly rawnarrowphase_intersection_pair: (a: number, b: number, c: number) => number;
+ readonly rawnarrowphase_intersection_pairs_with: (a: number, b: number, c: number) => void;
+ readonly rawnarrowphase_new: () => number;
+ readonly rawphysicspipeline_is_profiler_enabled: (a: number) => number;
+ readonly rawphysicspipeline_new: () => number;
+ readonly rawphysicspipeline_set_profiler_enabled: (a: number, b: number) => void;
+ readonly rawphysicspipeline_step: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number) => void;
+ readonly rawphysicspipeline_stepWithEvents: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number) => void;
+ readonly rawphysicspipeline_timing_broad_phase: (a: number) => number;
+ readonly rawphysicspipeline_timing_ccd: (a: number) => number;
+ readonly rawphysicspipeline_timing_ccd_broad_phase: (a: number) => number;
+ readonly rawphysicspipeline_timing_ccd_narrow_phase: (a: number) => number;
+ readonly rawphysicspipeline_timing_ccd_solver: (a: number) => number;
+ readonly rawphysicspipeline_timing_ccd_toi_computation: (a: number) => number;
+ readonly rawphysicspipeline_timing_collision_detection: (a: number) => number;
+ readonly rawphysicspipeline_timing_island_construction: (a: number) => number;
+ readonly rawphysicspipeline_timing_narrow_phase: (a: number) => number;
+ readonly rawphysicspipeline_timing_solver: (a: number) => number;
+ readonly rawphysicspipeline_timing_step: (a: number) => number;
+ readonly rawphysicspipeline_timing_user_changes: (a: number) => number;
+ readonly rawphysicspipeline_timing_velocity_assembly: (a: number) => number;
+ readonly rawphysicspipeline_timing_velocity_resolution: (a: number) => number;
+ readonly rawphysicspipeline_timing_velocity_update: (a: number) => number;
+ readonly rawphysicspipeline_timing_velocity_writeback: (a: number) => number;
+ readonly rawpidcontroller_angular_correction: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
+ readonly rawpidcontroller_apply_angular_correction: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
+ readonly rawpidcontroller_apply_linear_correction: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
+ readonly rawpidcontroller_linear_correction: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
+ readonly rawpidcontroller_new: (a: number, b: number, c: number, d: number) => number;
+ readonly rawpidcontroller_reset_integrals: (a: number) => void;
+ readonly rawpidcontroller_set_axes_mask: (a: number, b: number) => void;
+ readonly rawpidcontroller_set_kd: (a: number, b: number, c: number) => void;
+ readonly rawpidcontroller_set_ki: (a: number, b: number, c: number) => void;
+ readonly rawpidcontroller_set_kp: (a: number, b: number, c: number) => void;
+ readonly rawpointcolliderprojection_colliderHandle: (a: number) => number;
+ readonly rawpointcolliderprojection_featureId: (a: number) => number;
+ readonly rawpointcolliderprojection_featureType: (a: number) => number;
+ readonly rawpointcolliderprojection_isInside: (a: number) => number;
+ readonly rawpointcolliderprojection_point: (a: number) => number;
+ readonly rawpointprojection_isInside: (a: number) => number;
+ readonly rawpointprojection_point: (a: number) => number;
+ readonly rawrigidbodyset_contains: (a: number, b: number) => number;
+ readonly rawrigidbodyset_createRigidBody: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number, l: number, m: number, n: number, o: number, p: number, q: number, r: number, s: number, t: number, u: number, v: number, w: number) => number;
+ readonly rawrigidbodyset_forEachRigidBodyHandle: (a: number, b: number) => void;
+ readonly rawrigidbodyset_len: (a: number) => number;
+ readonly rawrigidbodyset_new: () => number;
+ readonly rawrigidbodyset_propagateModifiedBodyPositionsToColliders: (a: number, b: number) => void;
+ readonly rawrigidbodyset_rbAddForce: (a: number, b: number, c: number, d: number) => void;
+ readonly rawrigidbodyset_rbAddForceAtPoint: (a: number, b: number, c: number, d: number, e: number) => void;
+ readonly rawrigidbodyset_rbAddTorque: (a: number, b: number, c: number, d: number) => void;
+ readonly rawrigidbodyset_rbAdditionalSolverIterations: (a: number, b: number) => number;
+ readonly rawrigidbodyset_rbAngularDamping: (a: number, b: number) => number;
+ readonly rawrigidbodyset_rbAngvel: (a: number, b: number) => number;
+ readonly rawrigidbodyset_rbApplyImpulse: (a: number, b: number, c: number, d: number) => void;
+ readonly rawrigidbodyset_rbApplyImpulseAtPoint: (a: number, b: number, c: number, d: number, e: number) => void;
+ readonly rawrigidbodyset_rbApplyTorqueImpulse: (a: number, b: number, c: number, d: number) => void;
+ readonly rawrigidbodyset_rbBodyType: (a: number, b: number) => number;
+ readonly rawrigidbodyset_rbCollider: (a: number, b: number, c: number) => number;
+ readonly rawrigidbodyset_rbDominanceGroup: (a: number, b: number) => number;
+ readonly rawrigidbodyset_rbEffectiveAngularInertia: (a: number, b: number) => number;
+ readonly rawrigidbodyset_rbEffectiveInvMass: (a: number, b: number) => number;
+ readonly rawrigidbodyset_rbEffectiveWorldInvInertia: (a: number, b: number) => number;
+ readonly rawrigidbodyset_rbEnableCcd: (a: number, b: number, c: number) => void;
+ readonly rawrigidbodyset_rbGravityScale: (a: number, b: number) => number;
+ readonly rawrigidbodyset_rbInvMass: (a: number, b: number) => number;
+ readonly rawrigidbodyset_rbInvPrincipalInertia: (a: number, b: number) => number;
+ readonly rawrigidbodyset_rbIsCcdEnabled: (a: number, b: number) => number;
+ readonly rawrigidbodyset_rbIsDynamic: (a: number, b: number) => number;
+ readonly rawrigidbodyset_rbIsEnabled: (a: number, b: number) => number;
+ readonly rawrigidbodyset_rbIsFixed: (a: number, b: number) => number;
+ readonly rawrigidbodyset_rbIsKinematic: (a: number, b: number) => number;
+ readonly rawrigidbodyset_rbIsMoving: (a: number, b: number) => number;
+ readonly rawrigidbodyset_rbIsSleeping: (a: number, b: number) => number;
+ readonly rawrigidbodyset_rbLinearDamping: (a: number, b: number) => number;
+ readonly rawrigidbodyset_rbLinvel: (a: number, b: number) => number;
+ readonly rawrigidbodyset_rbLocalCom: (a: number, b: number) => number;
+ readonly rawrigidbodyset_rbLockRotations: (a: number, b: number, c: number, d: number) => void;
+ readonly rawrigidbodyset_rbLockTranslations: (a: number, b: number, c: number, d: number) => void;
+ readonly rawrigidbodyset_rbMass: (a: number, b: number) => number;
+ readonly rawrigidbodyset_rbNextRotation: (a: number, b: number) => number;
+ readonly rawrigidbodyset_rbNextTranslation: (a: number, b: number) => number;
+ readonly rawrigidbodyset_rbNumColliders: (a: number, b: number) => number;
+ readonly rawrigidbodyset_rbPrincipalInertia: (a: number, b: number) => number;
+ readonly rawrigidbodyset_rbRecomputeMassPropertiesFromColliders: (a: number, b: number, c: number) => void;
+ readonly rawrigidbodyset_rbResetForces: (a: number, b: number, c: number) => void;
+ readonly rawrigidbodyset_rbResetTorques: (a: number, b: number, c: number) => void;
+ readonly rawrigidbodyset_rbRotation: (a: number, b: number) => number;
+ readonly rawrigidbodyset_rbSetAdditionalMass: (a: number, b: number, c: number, d: number) => void;
+ readonly rawrigidbodyset_rbSetAdditionalMassProperties: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
+ readonly rawrigidbodyset_rbSetAdditionalSolverIterations: (a: number, b: number, c: number) => void;
+ readonly rawrigidbodyset_rbSetAngularDamping: (a: number, b: number, c: number) => void;
+ readonly rawrigidbodyset_rbSetAngvel: (a: number, b: number, c: number, d: number) => void;
+ readonly rawrigidbodyset_rbSetBodyType: (a: number, b: number, c: number, d: number) => void;
+ readonly rawrigidbodyset_rbSetDominanceGroup: (a: number, b: number, c: number) => void;
+ readonly rawrigidbodyset_rbSetEnabled: (a: number, b: number, c: number) => void;
+ readonly rawrigidbodyset_rbSetEnabledTranslations: (a: number, b: number, c: number, d: number, e: number) => void;
+ readonly rawrigidbodyset_rbSetGravityScale: (a: number, b: number, c: number, d: number) => void;
+ readonly rawrigidbodyset_rbSetLinearDamping: (a: number, b: number, c: number) => void;
+ readonly rawrigidbodyset_rbSetLinvel: (a: number, b: number, c: number, d: number) => void;
+ readonly rawrigidbodyset_rbSetNextKinematicRotation: (a: number, b: number, c: number) => void;
+ readonly rawrigidbodyset_rbSetNextKinematicTranslation: (a: number, b: number, c: number, d: number) => void;
+ readonly rawrigidbodyset_rbSetRotation: (a: number, b: number, c: number, d: number) => void;
+ readonly rawrigidbodyset_rbSetSoftCcdPrediction: (a: number, b: number, c: number) => void;
+ readonly rawrigidbodyset_rbSetTranslation: (a: number, b: number, c: number, d: number, e: number) => void;
+ readonly rawrigidbodyset_rbSetUserData: (a: number, b: number, c: number) => void;
+ readonly rawrigidbodyset_rbSleep: (a: number, b: number) => void;
+ readonly rawrigidbodyset_rbSoftCcdPrediction: (a: number, b: number) => number;
+ readonly rawrigidbodyset_rbTranslation: (a: number, b: number) => number;
+ readonly rawrigidbodyset_rbUserData: (a: number, b: number) => number;
+ readonly rawrigidbodyset_rbUserForce: (a: number, b: number) => number;
+ readonly rawrigidbodyset_rbUserTorque: (a: number, b: number) => number;
+ readonly rawrigidbodyset_rbVelocityAtPoint: (a: number, b: number, c: number) => number;
+ readonly rawrigidbodyset_rbWakeUp: (a: number, b: number) => void;
+ readonly rawrigidbodyset_rbWorldCom: (a: number, b: number) => number;
+ readonly rawrigidbodyset_remove: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
+ readonly rawrotation_angle: (a: number) => number;
+ readonly rawrotation_fromAngle: (a: number) => number;
+ readonly rawrotation_identity: () => number;
+ readonly rawserializationpipeline_deserializeAll: (a: number, b: number) => number;
+ readonly rawserializationpipeline_serializeAll: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number) => number;
+ readonly rawshape_ball: (a: number) => number;
+ readonly rawshape_capsule: (a: number, b: number) => number;
+ readonly rawshape_castRay: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => number;
+ readonly rawshape_castRayAndGetNormal: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => number;
+ readonly rawshape_castShape: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number, k: number) => number;
+ readonly rawshape_contactShape: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => number;
+ readonly rawshape_containsPoint: (a: number, b: number, c: number, d: number) => number;
+ readonly rawshape_convexHull: (a: number, b: number) => number;
+ readonly rawshape_convexPolyline: (a: number, b: number) => number;
+ readonly rawshape_cuboid: (a: number, b: number) => number;
+ readonly rawshape_halfspace: (a: number) => number;
+ readonly rawshape_heightfield: (a: number, b: number, c: number) => number;
+ readonly rawshape_intersectsRay: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
+ readonly rawshape_intersectsShape: (a: number, b: number, c: number, d: number, e: number, f: number) => number;
+ readonly rawshape_polyline: (a: number, b: number, c: number, d: number) => number;
+ readonly rawshape_projectPoint: (a: number, b: number, c: number, d: number, e: number) => number;
+ readonly rawshape_roundConvexHull: (a: number, b: number, c: number) => number;
+ readonly rawshape_roundConvexPolyline: (a: number, b: number, c: number) => number;
+ readonly rawshape_roundCuboid: (a: number, b: number, c: number) => number;
+ readonly rawshape_roundTriangle: (a: number, b: number, c: number, d: number) => number;
+ readonly rawshape_segment: (a: number, b: number) => number;
+ readonly rawshape_triangle: (a: number, b: number, c: number) => number;
+ readonly rawshape_trimesh: (a: number, b: number, c: number, d: number, e: number) => number;
+ readonly rawshape_voxels: (a: number, b: number, c: number) => number;
+ readonly rawshape_voxelsFromPoints: (a: number, b: number, c: number) => number;
+ readonly rawshapecasthit_witness1: (a: number) => number;
+ readonly rawvector_new: (a: number, b: number) => number;
+ readonly rawvector_set_y: (a: number, b: number) => void;
+ readonly rawvector_xy: (a: number) => number;
+ readonly rawvector_yx: (a: number) => number;
+ readonly rawvector_zero: () => number;
+ readonly version: (a: number) => void;
+ readonly rawcolliderset_isHandleValid: (a: number, b: number) => number;
+ readonly rawvector_set_x: (a: number, b: number) => void;
+ readonly reserve_memory: (a: number) => void;
+ readonly rawraycolliderintersection_featureId: (a: number) => number;
+ readonly rawrayintersection_featureId: (a: number) => number;
+ readonly rawcontactforceevent_collider1: (a: number) => number;
+ readonly rawintegrationparameters_normalizedAllowedLinearError: (a: number) => number;
+ readonly rawintegrationparameters_normalizedPredictionDistance: (a: number) => number;
+ readonly rawraycolliderhit_colliderHandle: (a: number) => number;
+ readonly rawraycolliderhit_timeOfImpact: (a: number) => number;
+ readonly rawraycolliderintersection_colliderHandle: (a: number) => number;
+ readonly rawraycolliderintersection_featureType: (a: number) => number;
+ readonly rawraycolliderintersection_time_of_impact: (a: number) => number;
+ readonly rawrayintersection_featureType: (a: number) => number;
+ readonly rawrayintersection_time_of_impact: (a: number) => number;
+ readonly rawrotation_im: (a: number) => number;
+ readonly rawrotation_re: (a: number) => number;
+ readonly rawshapecasthit_time_of_impact: (a: number) => number;
+ readonly rawshapecontact_distance: (a: number) => number;
+ readonly rawvector_x: (a: number) => number;
+ readonly rawvector_y: (a: number) => number;
+ readonly __wbg_rawcontactpair_free: (a: number, b: number) => void;
+ readonly __wbg_rawraycolliderhit_free: (a: number, b: number) => void;
+ readonly __wbg_rawraycolliderintersection_free: (a: number, b: number) => void;
+ readonly __wbg_rawserializationpipeline_free: (a: number, b: number) => void;
+ readonly __wbg_rawshapecasthit_free: (a: number, b: number) => void;
+ readonly rawcontactforceevent_max_force_direction: (a: number) => number;
+ readonly rawkinematiccharactercontroller_up: (a: number) => number;
+ readonly rawraycolliderintersection_normal: (a: number) => number;
+ readonly rawrayintersection_normal: (a: number) => number;
+ readonly rawshapecasthit_normal1: (a: number) => number;
+ readonly rawshapecasthit_normal2: (a: number) => number;
+ readonly rawshapecasthit_witness2: (a: number) => number;
+ readonly rawshapecontact_normal1: (a: number) => number;
+ readonly rawshapecontact_normal2: (a: number) => number;
+ readonly rawshapecontact_point1: (a: number) => number;
+ readonly rawshapecontact_point2: (a: number) => number;
+ readonly rawccdsolver_new: () => number;
+ readonly rawserializationpipeline_new: () => number;
+ readonly __wbindgen_export_0: (a: number) => void;
+ readonly __wbindgen_add_to_stack_pointer: (a: number) => number;
+ readonly __wbindgen_export_1: (a: number, b: number, c: number) => void;
+ readonly __wbindgen_export_2: (a: number, b: number) => number;
+}
+
+export type SyncInitInput = BufferSource | WebAssembly.Module;
+/**
+* Instantiates the given `module`, which can either be bytes or
+* a precompiled `WebAssembly.Module`.
+*
+* @param {{ module: SyncInitInput }} module - Passing `SyncInitInput` directly is deprecated.
+*
+* @returns {InitOutput}
+*/
+export function initSync(module: { module: SyncInitInput } | SyncInitInput): InitOutput;
+
+/**
+* If `module_or_path` is {RequestInfo} or {URL}, makes a request and
+* for everything else, calls `WebAssembly.instantiate` directly.
+*
+* @param {{ module_or_path: InitInput | Promise }} module_or_path - Passing `InitInput` directly is deprecated.
+*
+* @returns {Promise}
+*/
+export default function __wbg_init (module_or_path?: { module_or_path: InitInput | Promise } | InitInput | Promise): Promise;
diff --git a/packages/rapier2d/pkg/rapier_wasm2d.js b/packages/rapier2d/pkg/rapier_wasm2d.js
new file mode 100644
index 00000000..5867c4a3
--- /dev/null
+++ b/packages/rapier2d/pkg/rapier_wasm2d.js
@@ -0,0 +1,5461 @@
+let wasm;
+
+const heap = new Array(128).fill(undefined);
+
+heap.push(undefined, null, true, false);
+
+function getObject(idx) { return heap[idx]; }
+
+let heap_next = heap.length;
+
+function addHeapObject(obj) {
+ if (heap_next === heap.length) heap.push(heap.length + 1);
+ const idx = heap_next;
+ heap_next = heap[idx];
+
+ heap[idx] = obj;
+ return idx;
+}
+
+function handleError(f, args) {
+ try {
+ return f.apply(this, args);
+ } catch (e) {
+ wasm.__wbindgen_export_0(addHeapObject(e));
+ }
+}
+
+const cachedTextDecoder = (typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }) : { decode: () => { throw Error('TextDecoder not available') } } );
+
+if (typeof TextDecoder !== 'undefined') { cachedTextDecoder.decode(); };
+
+let cachedUint8ArrayMemory0 = null;
+
+function getUint8ArrayMemory0() {
+ if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {
+ cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);
+ }
+ return cachedUint8ArrayMemory0;
+}
+
+function getStringFromWasm0(ptr, len) {
+ ptr = ptr >>> 0;
+ return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));
+}
+
+function isLikeNone(x) {
+ return x === undefined || x === null;
+}
+
+let cachedDataViewMemory0 = null;
+
+function getDataViewMemory0() {
+ if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {
+ cachedDataViewMemory0 = new DataView(wasm.memory.buffer);
+ }
+ return cachedDataViewMemory0;
+}
+
+function dropObject(idx) {
+ if (idx < 132) return;
+ heap[idx] = heap_next;
+ heap_next = idx;
+}
+
+function takeObject(idx) {
+ const ret = getObject(idx);
+ dropObject(idx);
+ return ret;
+}
+/**
+ * @param {number} extra_bytes_count
+ */
+export function reserve_memory(extra_bytes_count) {
+ wasm.reserve_memory(extra_bytes_count);
+}
+
+/**
+ * @returns {string}
+ */
+export function version() {
+ let deferred1_0;
+ let deferred1_1;
+ try {
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
+ wasm.version(retptr);
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
+ deferred1_0 = r0;
+ deferred1_1 = r1;
+ return getStringFromWasm0(r0, r1);
+ } finally {
+ wasm.__wbindgen_add_to_stack_pointer(16);
+ wasm.__wbindgen_export_1(deferred1_0, deferred1_1, 1);
+ }
+}
+
+function _assertClass(instance, klass) {
+ if (!(instance instanceof klass)) {
+ throw new Error(`expected instance of ${klass.name}`);
+ }
+}
+
+let stack_pointer = 128;
+
+function addBorrowedObject(obj) {
+ if (stack_pointer == 1) throw new Error('out of js stack');
+ heap[--stack_pointer] = obj;
+ return stack_pointer;
+}
+
+let cachedFloat32ArrayMemory0 = null;
+
+function getFloat32ArrayMemory0() {
+ if (cachedFloat32ArrayMemory0 === null || cachedFloat32ArrayMemory0.byteLength === 0) {
+ cachedFloat32ArrayMemory0 = new Float32Array(wasm.memory.buffer);
+ }
+ return cachedFloat32ArrayMemory0;
+}
+
+let WASM_VECTOR_LEN = 0;
+
+function passArrayF32ToWasm0(arg, malloc) {
+ const ptr = malloc(arg.length * 4, 4) >>> 0;
+ getFloat32ArrayMemory0().set(arg, ptr / 4);
+ WASM_VECTOR_LEN = arg.length;
+ return ptr;
+}
+
+let cachedUint32ArrayMemory0 = null;
+
+function getUint32ArrayMemory0() {
+ if (cachedUint32ArrayMemory0 === null || cachedUint32ArrayMemory0.byteLength === 0) {
+ cachedUint32ArrayMemory0 = new Uint32Array(wasm.memory.buffer);
+ }
+ return cachedUint32ArrayMemory0;
+}
+
+function passArray32ToWasm0(arg, malloc) {
+ const ptr = malloc(arg.length * 4, 4) >>> 0;
+ getUint32ArrayMemory0().set(arg, ptr / 4);
+ WASM_VECTOR_LEN = arg.length;
+ return ptr;
+}
+
+function getArrayF32FromWasm0(ptr, len) {
+ ptr = ptr >>> 0;
+ return getFloat32ArrayMemory0().subarray(ptr / 4, ptr / 4 + len);
+}
+
+let cachedInt32ArrayMemory0 = null;
+
+function getInt32ArrayMemory0() {
+ if (cachedInt32ArrayMemory0 === null || cachedInt32ArrayMemory0.byteLength === 0) {
+ cachedInt32ArrayMemory0 = new Int32Array(wasm.memory.buffer);
+ }
+ return cachedInt32ArrayMemory0;
+}
+
+function getArrayI32FromWasm0(ptr, len) {
+ ptr = ptr >>> 0;
+ return getInt32ArrayMemory0().subarray(ptr / 4, ptr / 4 + len);
+}
+
+function getArrayU32FromWasm0(ptr, len) {
+ ptr = ptr >>> 0;
+ return getUint32ArrayMemory0().subarray(ptr / 4, ptr / 4 + len);
+}
+/**
+ * @enum {0 | 1 | 2}
+ */
+export const RawFeatureType = Object.freeze({
+ Vertex: 0, "0": "Vertex",
+ Face: 1, "1": "Face",
+ Unknown: 2, "2": "Unknown",
+});
+/**
+ * @enum {0 | 1 | 2}
+ */
+export const RawJointAxis = Object.freeze({
+ LinX: 0, "0": "LinX",
+ LinY: 1, "1": "LinY",
+ AngX: 2, "2": "AngX",
+});
+/**
+ * @enum {0 | 1 | 2 | 3 | 4 | 5}
+ */
+export const RawJointType = Object.freeze({
+ Revolute: 0, "0": "Revolute",
+ Fixed: 1, "1": "Fixed",
+ Prismatic: 2, "2": "Prismatic",
+ Rope: 3, "3": "Rope",
+ Spring: 4, "4": "Spring",
+ Generic: 5, "5": "Generic",
+});
+/**
+ * @enum {0 | 1}
+ */
+export const RawMotorModel = Object.freeze({
+ AccelerationBased: 0, "0": "AccelerationBased",
+ ForceBased: 1, "1": "ForceBased",
+});
+/**
+ * @enum {0 | 1 | 2 | 3}
+ */
+export const RawRigidBodyType = Object.freeze({
+ Dynamic: 0, "0": "Dynamic",
+ Fixed: 1, "1": "Fixed",
+ KinematicPositionBased: 2, "2": "KinematicPositionBased",
+ KinematicVelocityBased: 3, "3": "KinematicVelocityBased",
+});
+/**
+ * @enum {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14}
+ */
+export const RawShapeType = Object.freeze({
+ Ball: 0, "0": "Ball",
+ Cuboid: 1, "1": "Cuboid",
+ Capsule: 2, "2": "Capsule",
+ Segment: 3, "3": "Segment",
+ Polyline: 4, "4": "Polyline",
+ Triangle: 5, "5": "Triangle",
+ TriMesh: 6, "6": "TriMesh",
+ HeightField: 7, "7": "HeightField",
+ Compound: 8, "8": "Compound",
+ ConvexPolygon: 9, "9": "ConvexPolygon",
+ RoundCuboid: 10, "10": "RoundCuboid",
+ RoundTriangle: 11, "11": "RoundTriangle",
+ RoundConvexPolygon: 12, "12": "RoundConvexPolygon",
+ HalfSpace: 13, "13": "HalfSpace",
+ Voxels: 14, "14": "Voxels",
+});
+
+const RawBroadPhaseFinalization = (typeof FinalizationRegistry === 'undefined')
+ ? { register: () => {}, unregister: () => {} }
+ : new FinalizationRegistry(ptr => wasm.__wbg_rawbroadphase_free(ptr >>> 0, 1));
+
+export class RawBroadPhase {
+
+ static __wrap(ptr) {
+ ptr = ptr >>> 0;
+ const obj = Object.create(RawBroadPhase.prototype);
+ obj.__wbg_ptr = ptr;
+ RawBroadPhaseFinalization.register(obj, obj.__wbg_ptr, obj);
+ return obj;
+ }
+
+ __destroy_into_raw() {
+ const ptr = this.__wbg_ptr;
+ this.__wbg_ptr = 0;
+ RawBroadPhaseFinalization.unregister(this);
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_rawbroadphase_free(ptr, 0);
+ }
+ /**
+ * @param {RawNarrowPhase} narrow_phase
+ * @param {RawRigidBodySet} bodies
+ * @param {RawColliderSet} colliders
+ * @param {RawVector} point
+ * @param {boolean} solid
+ * @param {number} filter_flags
+ * @param {number | null | undefined} filter_groups
+ * @param {number | null | undefined} filter_exclude_collider
+ * @param {number | null | undefined} filter_exclude_rigid_body
+ * @param {Function} filter_predicate
+ * @returns {RawPointColliderProjection | undefined}
+ */
+ projectPoint(narrow_phase, bodies, colliders, point, solid, filter_flags, filter_groups, filter_exclude_collider, filter_exclude_rigid_body, filter_predicate) {
+ try {
+ _assertClass(narrow_phase, RawNarrowPhase);
+ _assertClass(bodies, RawRigidBodySet);
+ _assertClass(colliders, RawColliderSet);
+ _assertClass(point, RawVector);
+ const ret = wasm.rawbroadphase_projectPoint(this.__wbg_ptr, narrow_phase.__wbg_ptr, bodies.__wbg_ptr, colliders.__wbg_ptr, point.__wbg_ptr, solid, filter_flags, isLikeNone(filter_groups) ? 0x100000001 : (filter_groups) >>> 0, !isLikeNone(filter_exclude_collider), isLikeNone(filter_exclude_collider) ? 0 : filter_exclude_collider, !isLikeNone(filter_exclude_rigid_body), isLikeNone(filter_exclude_rigid_body) ? 0 : filter_exclude_rigid_body, addBorrowedObject(filter_predicate));
+ return ret === 0 ? undefined : RawPointColliderProjection.__wrap(ret);
+ } finally {
+ heap[stack_pointer++] = undefined;
+ }
+ }
+ /**
+ * @param {RawNarrowPhase} narrow_phase
+ * @param {RawRigidBodySet} bodies
+ * @param {RawColliderSet} colliders
+ * @param {RawVector} rayOrig
+ * @param {RawVector} rayDir
+ * @param {number} maxToi
+ * @param {boolean} solid
+ * @param {number} filter_flags
+ * @param {number | null | undefined} filter_groups
+ * @param {number | null | undefined} filter_exclude_collider
+ * @param {number | null | undefined} filter_exclude_rigid_body
+ * @param {Function} filter_predicate
+ * @returns {RawRayColliderIntersection | undefined}
+ */
+ castRayAndGetNormal(narrow_phase, bodies, colliders, rayOrig, rayDir, maxToi, solid, filter_flags, filter_groups, filter_exclude_collider, filter_exclude_rigid_body, filter_predicate) {
+ try {
+ _assertClass(narrow_phase, RawNarrowPhase);
+ _assertClass(bodies, RawRigidBodySet);
+ _assertClass(colliders, RawColliderSet);
+ _assertClass(rayOrig, RawVector);
+ _assertClass(rayDir, RawVector);
+ const ret = wasm.rawbroadphase_castRayAndGetNormal(this.__wbg_ptr, narrow_phase.__wbg_ptr, bodies.__wbg_ptr, colliders.__wbg_ptr, rayOrig.__wbg_ptr, rayDir.__wbg_ptr, maxToi, solid, filter_flags, isLikeNone(filter_groups) ? 0x100000001 : (filter_groups) >>> 0, !isLikeNone(filter_exclude_collider), isLikeNone(filter_exclude_collider) ? 0 : filter_exclude_collider, !isLikeNone(filter_exclude_rigid_body), isLikeNone(filter_exclude_rigid_body) ? 0 : filter_exclude_rigid_body, addBorrowedObject(filter_predicate));
+ return ret === 0 ? undefined : RawRayColliderIntersection.__wrap(ret);
+ } finally {
+ heap[stack_pointer++] = undefined;
+ }
+ }
+ /**
+ * @param {RawNarrowPhase} narrow_phase
+ * @param {RawRigidBodySet} bodies
+ * @param {RawColliderSet} colliders
+ * @param {RawVector} rayOrig
+ * @param {RawVector} rayDir
+ * @param {number} maxToi
+ * @param {boolean} solid
+ * @param {Function} callback
+ * @param {number} filter_flags
+ * @param {number | null | undefined} filter_groups
+ * @param {number | null | undefined} filter_exclude_collider
+ * @param {number | null | undefined} filter_exclude_rigid_body
+ * @param {Function} filter_predicate
+ */
+ intersectionsWithRay(narrow_phase, bodies, colliders, rayOrig, rayDir, maxToi, solid, callback, filter_flags, filter_groups, filter_exclude_collider, filter_exclude_rigid_body, filter_predicate) {
+ try {
+ _assertClass(narrow_phase, RawNarrowPhase);
+ _assertClass(bodies, RawRigidBodySet);
+ _assertClass(colliders, RawColliderSet);
+ _assertClass(rayOrig, RawVector);
+ _assertClass(rayDir, RawVector);
+ wasm.rawbroadphase_intersectionsWithRay(this.__wbg_ptr, narrow_phase.__wbg_ptr, bodies.__wbg_ptr, colliders.__wbg_ptr, rayOrig.__wbg_ptr, rayDir.__wbg_ptr, maxToi, solid, addBorrowedObject(callback), filter_flags, isLikeNone(filter_groups) ? 0x100000001 : (filter_groups) >>> 0, !isLikeNone(filter_exclude_collider), isLikeNone(filter_exclude_collider) ? 0 : filter_exclude_collider, !isLikeNone(filter_exclude_rigid_body), isLikeNone(filter_exclude_rigid_body) ? 0 : filter_exclude_rigid_body, addBorrowedObject(filter_predicate));
+ } finally {
+ heap[stack_pointer++] = undefined;
+ heap[stack_pointer++] = undefined;
+ }
+ }
+ /**
+ * @param {RawNarrowPhase} narrow_phase
+ * @param {RawRigidBodySet} bodies
+ * @param {RawColliderSet} colliders
+ * @param {RawVector} shapePos
+ * @param {RawRotation} shapeRot
+ * @param {RawShape} shape
+ * @param {number} filter_flags
+ * @param {number | null | undefined} filter_groups
+ * @param {number | null | undefined} filter_exclude_collider
+ * @param {number | null | undefined} filter_exclude_rigid_body
+ * @param {Function} filter_predicate
+ * @returns {number | undefined}
+ */
+ intersectionWithShape(narrow_phase, bodies, colliders, shapePos, shapeRot, shape, filter_flags, filter_groups, filter_exclude_collider, filter_exclude_rigid_body, filter_predicate) {
+ try {
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
+ _assertClass(narrow_phase, RawNarrowPhase);
+ _assertClass(bodies, RawRigidBodySet);
+ _assertClass(colliders, RawColliderSet);
+ _assertClass(shapePos, RawVector);
+ _assertClass(shapeRot, RawRotation);
+ _assertClass(shape, RawShape);
+ wasm.rawbroadphase_intersectionWithShape(retptr, this.__wbg_ptr, narrow_phase.__wbg_ptr, bodies.__wbg_ptr, colliders.__wbg_ptr, shapePos.__wbg_ptr, shapeRot.__wbg_ptr, shape.__wbg_ptr, filter_flags, isLikeNone(filter_groups) ? 0x100000001 : (filter_groups) >>> 0, !isLikeNone(filter_exclude_collider), isLikeNone(filter_exclude_collider) ? 0 : filter_exclude_collider, !isLikeNone(filter_exclude_rigid_body), isLikeNone(filter_exclude_rigid_body) ? 0 : filter_exclude_rigid_body, addBorrowedObject(filter_predicate));
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
+ var r2 = getDataViewMemory0().getFloat64(retptr + 8 * 1, true);
+ return r0 === 0 ? undefined : r2;
+ } finally {
+ wasm.__wbindgen_add_to_stack_pointer(16);
+ heap[stack_pointer++] = undefined;
+ }
+ }
+ /**
+ * @param {RawNarrowPhase} narrow_phase
+ * @param {RawRigidBodySet} bodies
+ * @param {RawColliderSet} colliders
+ * @param {RawVector} point
+ * @param {Function} callback
+ * @param {number} filter_flags
+ * @param {number | null | undefined} filter_groups
+ * @param {number | null | undefined} filter_exclude_collider
+ * @param {number | null | undefined} filter_exclude_rigid_body
+ * @param {Function} filter_predicate
+ */
+ intersectionsWithPoint(narrow_phase, bodies, colliders, point, callback, filter_flags, filter_groups, filter_exclude_collider, filter_exclude_rigid_body, filter_predicate) {
+ try {
+ _assertClass(narrow_phase, RawNarrowPhase);
+ _assertClass(bodies, RawRigidBodySet);
+ _assertClass(colliders, RawColliderSet);
+ _assertClass(point, RawVector);
+ wasm.rawbroadphase_intersectionsWithPoint(this.__wbg_ptr, narrow_phase.__wbg_ptr, bodies.__wbg_ptr, colliders.__wbg_ptr, point.__wbg_ptr, addBorrowedObject(callback), filter_flags, isLikeNone(filter_groups) ? 0x100000001 : (filter_groups) >>> 0, !isLikeNone(filter_exclude_collider), isLikeNone(filter_exclude_collider) ? 0 : filter_exclude_collider, !isLikeNone(filter_exclude_rigid_body), isLikeNone(filter_exclude_rigid_body) ? 0 : filter_exclude_rigid_body, addBorrowedObject(filter_predicate));
+ } finally {
+ heap[stack_pointer++] = undefined;
+ heap[stack_pointer++] = undefined;
+ }
+ }
+ /**
+ * @param {RawNarrowPhase} narrow_phase
+ * @param {RawRigidBodySet} bodies
+ * @param {RawColliderSet} colliders
+ * @param {RawVector} shapePos
+ * @param {RawRotation} shapeRot
+ * @param {RawShape} shape
+ * @param {Function} callback
+ * @param {number} filter_flags
+ * @param {number | null | undefined} filter_groups
+ * @param {number | null | undefined} filter_exclude_collider
+ * @param {number | null | undefined} filter_exclude_rigid_body
+ * @param {Function} filter_predicate
+ */
+ intersectionsWithShape(narrow_phase, bodies, colliders, shapePos, shapeRot, shape, callback, filter_flags, filter_groups, filter_exclude_collider, filter_exclude_rigid_body, filter_predicate) {
+ try {
+ _assertClass(narrow_phase, RawNarrowPhase);
+ _assertClass(bodies, RawRigidBodySet);
+ _assertClass(colliders, RawColliderSet);
+ _assertClass(shapePos, RawVector);
+ _assertClass(shapeRot, RawRotation);
+ _assertClass(shape, RawShape);
+ wasm.rawbroadphase_intersectionsWithShape(this.__wbg_ptr, narrow_phase.__wbg_ptr, bodies.__wbg_ptr, colliders.__wbg_ptr, shapePos.__wbg_ptr, shapeRot.__wbg_ptr, shape.__wbg_ptr, addBorrowedObject(callback), filter_flags, isLikeNone(filter_groups) ? 0x100000001 : (filter_groups) >>> 0, !isLikeNone(filter_exclude_collider), isLikeNone(filter_exclude_collider) ? 0 : filter_exclude_collider, !isLikeNone(filter_exclude_rigid_body), isLikeNone(filter_exclude_rigid_body) ? 0 : filter_exclude_rigid_body, addBorrowedObject(filter_predicate));
+ } finally {
+ heap[stack_pointer++] = undefined;
+ heap[stack_pointer++] = undefined;
+ }
+ }
+ /**
+ * @param {RawNarrowPhase} narrow_phase
+ * @param {RawRigidBodySet} bodies
+ * @param {RawColliderSet} colliders
+ * @param {RawVector} point
+ * @param {number} filter_flags
+ * @param {number | null | undefined} filter_groups
+ * @param {number | null | undefined} filter_exclude_collider
+ * @param {number | null | undefined} filter_exclude_rigid_body
+ * @param {Function} filter_predicate
+ * @returns {RawPointColliderProjection | undefined}
+ */
+ projectPointAndGetFeature(narrow_phase, bodies, colliders, point, filter_flags, filter_groups, filter_exclude_collider, filter_exclude_rigid_body, filter_predicate) {
+ try {
+ _assertClass(narrow_phase, RawNarrowPhase);
+ _assertClass(bodies, RawRigidBodySet);
+ _assertClass(colliders, RawColliderSet);
+ _assertClass(point, RawVector);
+ const ret = wasm.rawbroadphase_projectPointAndGetFeature(this.__wbg_ptr, narrow_phase.__wbg_ptr, bodies.__wbg_ptr, colliders.__wbg_ptr, point.__wbg_ptr, filter_flags, isLikeNone(filter_groups) ? 0x100000001 : (filter_groups) >>> 0, !isLikeNone(filter_exclude_collider), isLikeNone(filter_exclude_collider) ? 0 : filter_exclude_collider, !isLikeNone(filter_exclude_rigid_body), isLikeNone(filter_exclude_rigid_body) ? 0 : filter_exclude_rigid_body, addBorrowedObject(filter_predicate));
+ return ret === 0 ? undefined : RawPointColliderProjection.__wrap(ret);
+ } finally {
+ heap[stack_pointer++] = undefined;
+ }
+ }
+ /**
+ * @param {RawNarrowPhase} narrow_phase
+ * @param {RawRigidBodySet} bodies
+ * @param {RawColliderSet} colliders
+ * @param {RawVector} aabbCenter
+ * @param {RawVector} aabbHalfExtents
+ * @param {Function} callback
+ */
+ collidersWithAabbIntersectingAabb(narrow_phase, bodies, colliders, aabbCenter, aabbHalfExtents, callback) {
+ try {
+ _assertClass(narrow_phase, RawNarrowPhase);
+ _assertClass(bodies, RawRigidBodySet);
+ _assertClass(colliders, RawColliderSet);
+ _assertClass(aabbCenter, RawVector);
+ _assertClass(aabbHalfExtents, RawVector);
+ wasm.rawbroadphase_collidersWithAabbIntersectingAabb(this.__wbg_ptr, narrow_phase.__wbg_ptr, bodies.__wbg_ptr, colliders.__wbg_ptr, aabbCenter.__wbg_ptr, aabbHalfExtents.__wbg_ptr, addBorrowedObject(callback));
+ } finally {
+ heap[stack_pointer++] = undefined;
+ }
+ }
+ constructor() {
+ const ret = wasm.rawbroadphase_new();
+ this.__wbg_ptr = ret >>> 0;
+ RawBroadPhaseFinalization.register(this, this.__wbg_ptr, this);
+ return this;
+ }
+ /**
+ * @param {RawNarrowPhase} narrow_phase
+ * @param {RawRigidBodySet} bodies
+ * @param {RawColliderSet} colliders
+ * @param {RawVector} rayOrig
+ * @param {RawVector} rayDir
+ * @param {number} maxToi
+ * @param {boolean} solid
+ * @param {number} filter_flags
+ * @param {number | null | undefined} filter_groups
+ * @param {number | null | undefined} filter_exclude_collider
+ * @param {number | null | undefined} filter_exclude_rigid_body
+ * @param {Function} filter_predicate
+ * @returns {RawRayColliderHit | undefined}
+ */
+ castRay(narrow_phase, bodies, colliders, rayOrig, rayDir, maxToi, solid, filter_flags, filter_groups, filter_exclude_collider, filter_exclude_rigid_body, filter_predicate) {
+ try {
+ _assertClass(narrow_phase, RawNarrowPhase);
+ _assertClass(bodies, RawRigidBodySet);
+ _assertClass(colliders, RawColliderSet);
+ _assertClass(rayOrig, RawVector);
+ _assertClass(rayDir, RawVector);
+ const ret = wasm.rawbroadphase_castRay(this.__wbg_ptr, narrow_phase.__wbg_ptr, bodies.__wbg_ptr, colliders.__wbg_ptr, rayOrig.__wbg_ptr, rayDir.__wbg_ptr, maxToi, solid, filter_flags, isLikeNone(filter_groups) ? 0x100000001 : (filter_groups) >>> 0, !isLikeNone(filter_exclude_collider), isLikeNone(filter_exclude_collider) ? 0 : filter_exclude_collider, !isLikeNone(filter_exclude_rigid_body), isLikeNone(filter_exclude_rigid_body) ? 0 : filter_exclude_rigid_body, addBorrowedObject(filter_predicate));
+ return ret === 0 ? undefined : RawRayColliderHit.__wrap(ret);
+ } finally {
+ heap[stack_pointer++] = undefined;
+ }
+ }
+ /**
+ * @param {RawNarrowPhase} narrow_phase
+ * @param {RawRigidBodySet} bodies
+ * @param {RawColliderSet} colliders
+ * @param {RawVector} shapePos
+ * @param {RawRotation} shapeRot
+ * @param {RawVector} shapeVel
+ * @param {RawShape} shape
+ * @param {number} target_distance
+ * @param {number} maxToi
+ * @param {boolean} stop_at_penetration
+ * @param {number} filter_flags
+ * @param {number | null | undefined} filter_groups
+ * @param {number | null | undefined} filter_exclude_collider
+ * @param {number | null | undefined} filter_exclude_rigid_body
+ * @param {Function} filter_predicate
+ * @returns {RawColliderShapeCastHit | undefined}
+ */
+ castShape(narrow_phase, bodies, colliders, shapePos, shapeRot, shapeVel, shape, target_distance, maxToi, stop_at_penetration, filter_flags, filter_groups, filter_exclude_collider, filter_exclude_rigid_body, filter_predicate) {
+ try {
+ _assertClass(narrow_phase, RawNarrowPhase);
+ _assertClass(bodies, RawRigidBodySet);
+ _assertClass(colliders, RawColliderSet);
+ _assertClass(shapePos, RawVector);
+ _assertClass(shapeRot, RawRotation);
+ _assertClass(shapeVel, RawVector);
+ _assertClass(shape, RawShape);
+ const ret = wasm.rawbroadphase_castShape(this.__wbg_ptr, narrow_phase.__wbg_ptr, bodies.__wbg_ptr, colliders.__wbg_ptr, shapePos.__wbg_ptr, shapeRot.__wbg_ptr, shapeVel.__wbg_ptr, shape.__wbg_ptr, target_distance, maxToi, stop_at_penetration, filter_flags, isLikeNone(filter_groups) ? 0x100000001 : (filter_groups) >>> 0, !isLikeNone(filter_exclude_collider), isLikeNone(filter_exclude_collider) ? 0 : filter_exclude_collider, !isLikeNone(filter_exclude_rigid_body), isLikeNone(filter_exclude_rigid_body) ? 0 : filter_exclude_rigid_body, addBorrowedObject(filter_predicate));
+ return ret === 0 ? undefined : RawColliderShapeCastHit.__wrap(ret);
+ } finally {
+ heap[stack_pointer++] = undefined;
+ }
+ }
+}
+
+const RawCCDSolverFinalization = (typeof FinalizationRegistry === 'undefined')
+ ? { register: () => {}, unregister: () => {} }
+ : new FinalizationRegistry(ptr => wasm.__wbg_rawccdsolver_free(ptr >>> 0, 1));
+
+export class RawCCDSolver {
+
+ __destroy_into_raw() {
+ const ptr = this.__wbg_ptr;
+ this.__wbg_ptr = 0;
+ RawCCDSolverFinalization.unregister(this);
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_rawccdsolver_free(ptr, 0);
+ }
+ constructor() {
+ const ret = wasm.rawccdsolver_new();
+ this.__wbg_ptr = ret >>> 0;
+ RawCCDSolverFinalization.register(this, this.__wbg_ptr, this);
+ return this;
+ }
+}
+
+const RawCharacterCollisionFinalization = (typeof FinalizationRegistry === 'undefined')
+ ? { register: () => {}, unregister: () => {} }
+ : new FinalizationRegistry(ptr => wasm.__wbg_rawcharactercollision_free(ptr >>> 0, 1));
+
+export class RawCharacterCollision {
+
+ __destroy_into_raw() {
+ const ptr = this.__wbg_ptr;
+ this.__wbg_ptr = 0;
+ RawCharacterCollisionFinalization.unregister(this);
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_rawcharactercollision_free(ptr, 0);
+ }
+ /**
+ * @returns {RawVector}
+ */
+ worldNormal1() {
+ const ret = wasm.rawcharactercollision_worldNormal1(this.__wbg_ptr);
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * @returns {RawVector}
+ */
+ worldNormal2() {
+ const ret = wasm.rawcharactercollision_worldNormal2(this.__wbg_ptr);
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * @returns {RawVector}
+ */
+ worldWitness1() {
+ const ret = wasm.rawcharactercollision_worldWitness1(this.__wbg_ptr);
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * @returns {RawVector}
+ */
+ worldWitness2() {
+ const ret = wasm.rawcharactercollision_worldWitness2(this.__wbg_ptr);
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * @returns {RawVector}
+ */
+ translationDeltaApplied() {
+ const ret = wasm.rawcharactercollision_translationDeltaApplied(this.__wbg_ptr);
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * @returns {RawVector}
+ */
+ translationDeltaRemaining() {
+ const ret = wasm.rawcharactercollision_translationDeltaRemaining(this.__wbg_ptr);
+ return RawVector.__wrap(ret);
+ }
+ constructor() {
+ const ret = wasm.rawcharactercollision_new();
+ this.__wbg_ptr = ret >>> 0;
+ RawCharacterCollisionFinalization.register(this, this.__wbg_ptr, this);
+ return this;
+ }
+ /**
+ * @returns {number}
+ */
+ toi() {
+ const ret = wasm.rawcharactercollision_toi(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * @returns {number}
+ */
+ handle() {
+ const ret = wasm.rawcharactercollision_handle(this.__wbg_ptr);
+ return ret;
+ }
+}
+
+const RawColliderSetFinalization = (typeof FinalizationRegistry === 'undefined')
+ ? { register: () => {}, unregister: () => {} }
+ : new FinalizationRegistry(ptr => wasm.__wbg_rawcolliderset_free(ptr >>> 0, 1));
+
+export class RawColliderSet {
+
+ static __wrap(ptr) {
+ ptr = ptr >>> 0;
+ const obj = Object.create(RawColliderSet.prototype);
+ obj.__wbg_ptr = ptr;
+ RawColliderSetFinalization.register(obj, obj.__wbg_ptr, obj);
+ return obj;
+ }
+
+ __destroy_into_raw() {
+ const ptr = this.__wbg_ptr;
+ this.__wbg_ptr = 0;
+ RawColliderSetFinalization.unregister(this);
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_rawcolliderset_free(ptr, 0);
+ }
+ /**
+ * Checks if a collider with the given integer handle exists.
+ * @param {number} handle
+ * @returns {boolean}
+ */
+ isHandleValid(handle) {
+ const ret = wasm.rawcolliderset_contains(this.__wbg_ptr, handle);
+ return ret !== 0;
+ }
+ /**
+ * @param {boolean} enabled
+ * @param {RawShape} shape
+ * @param {RawVector} translation
+ * @param {RawRotation} rotation
+ * @param {number} massPropsMode
+ * @param {number} mass
+ * @param {RawVector} centerOfMass
+ * @param {number} principalAngularInertia
+ * @param {number} density
+ * @param {number} friction
+ * @param {number} restitution
+ * @param {number} frictionCombineRule
+ * @param {number} restitutionCombineRule
+ * @param {boolean} isSensor
+ * @param {number} collisionGroups
+ * @param {number} solverGroups
+ * @param {number} activeCollisionTypes
+ * @param {number} activeHooks
+ * @param {number} activeEvents
+ * @param {number} contactForceEventThreshold
+ * @param {number} contactSkin
+ * @param {boolean} hasParent
+ * @param {number} parent
+ * @param {RawRigidBodySet} bodies
+ * @returns {number | undefined}
+ */
+ createCollider(enabled, shape, translation, rotation, massPropsMode, mass, centerOfMass, principalAngularInertia, density, friction, restitution, frictionCombineRule, restitutionCombineRule, isSensor, collisionGroups, solverGroups, activeCollisionTypes, activeHooks, activeEvents, contactForceEventThreshold, contactSkin, hasParent, parent, bodies) {
+ try {
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
+ _assertClass(shape, RawShape);
+ _assertClass(translation, RawVector);
+ _assertClass(rotation, RawRotation);
+ _assertClass(centerOfMass, RawVector);
+ _assertClass(bodies, RawRigidBodySet);
+ wasm.rawcolliderset_createCollider(retptr, this.__wbg_ptr, enabled, shape.__wbg_ptr, translation.__wbg_ptr, rotation.__wbg_ptr, massPropsMode, mass, centerOfMass.__wbg_ptr, principalAngularInertia, density, friction, restitution, frictionCombineRule, restitutionCombineRule, isSensor, collisionGroups, solverGroups, activeCollisionTypes, activeHooks, activeEvents, contactForceEventThreshold, contactSkin, hasParent, parent, bodies.__wbg_ptr);
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
+ var r2 = getDataViewMemory0().getFloat64(retptr + 8 * 1, true);
+ return r0 === 0 ? undefined : r2;
+ } finally {
+ wasm.__wbindgen_add_to_stack_pointer(16);
+ }
+ }
+ /**
+ * Applies the given JavaScript function to the integer handle of each collider managed by this collider set.
+ *
+ * # Parameters
+ * - `f(handle)`: the function to apply to the integer handle of each collider managed by this collider set. Called as `f(handle)`.
+ * @param {Function} f
+ */
+ forEachColliderHandle(f) {
+ try {
+ wasm.rawcolliderset_forEachColliderHandle(this.__wbg_ptr, addBorrowedObject(f));
+ } finally {
+ heap[stack_pointer++] = undefined;
+ }
+ }
+ /**
+ * @returns {number}
+ */
+ len() {
+ const ret = wasm.rawcolliderset_len(this.__wbg_ptr);
+ return ret >>> 0;
+ }
+ constructor() {
+ const ret = wasm.rawcolliderset_new();
+ this.__wbg_ptr = ret >>> 0;
+ RawColliderSetFinalization.register(this, this.__wbg_ptr, this);
+ return this;
+ }
+ /**
+ * Removes a collider from this set and wake-up the rigid-body it is attached to.
+ * @param {number} handle
+ * @param {RawIslandManager} islands
+ * @param {RawRigidBodySet} bodies
+ * @param {boolean} wakeUp
+ */
+ remove(handle, islands, bodies, wakeUp) {
+ _assertClass(islands, RawIslandManager);
+ _assertClass(bodies, RawRigidBodySet);
+ wasm.rawcolliderset_remove(this.__wbg_ptr, handle, islands.__wbg_ptr, bodies.__wbg_ptr, wakeUp);
+ }
+ /**
+ * @param {number} handle
+ * @returns {boolean}
+ */
+ contains(handle) {
+ const ret = wasm.rawcolliderset_contains(this.__wbg_ptr, handle);
+ return ret !== 0;
+ }
+ /**
+ * The friction coefficient of this collider.
+ * @param {number} handle
+ * @returns {number}
+ */
+ coFriction(handle) {
+ const ret = wasm.rawcolliderset_coFriction(this.__wbg_ptr, handle);
+ return ret;
+ }
+ /**
+ * Is this collider a sensor?
+ * @param {number} handle
+ * @returns {boolean}
+ */
+ coIsSensor(handle) {
+ const ret = wasm.rawcolliderset_coIsSensor(this.__wbg_ptr, handle);
+ return ret !== 0;
+ }
+ /**
+ * The world-space orientation of this collider.
+ * @param {number} handle
+ * @returns {RawRotation}
+ */
+ coRotation(handle) {
+ const ret = wasm.rawcolliderset_coRotation(this.__wbg_ptr, handle);
+ return RawRotation.__wrap(ret);
+ }
+ /**
+ * @param {number} handle
+ * @param {RawShape} shape
+ */
+ coSetShape(handle, shape) {
+ _assertClass(shape, RawShape);
+ wasm.rawcolliderset_coSetShape(this.__wbg_ptr, handle, shape.__wbg_ptr);
+ }
+ /**
+ * @param {number} handle
+ * @param {number} ix
+ * @param {number} iy
+ * @param {boolean} filled
+ */
+ coSetVoxel(handle, ix, iy, filled) {
+ wasm.rawcolliderset_coSetVoxel(this.__wbg_ptr, handle, ix, iy, filled);
+ }
+ /**
+ * The vertices of this triangle mesh, polyline, convex polyhedron, segment, triangle or convex polyhedron, if it is one.
+ * @param {number} handle
+ * @returns {Float32Array | undefined}
+ */
+ coVertices(handle) {
+ try {
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
+ wasm.rawcolliderset_coVertices(retptr, this.__wbg_ptr, handle);
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
+ let v1;
+ if (r0 !== 0) {
+ v1 = getArrayF32FromWasm0(r0, r1).slice();
+ wasm.__wbindgen_export_1(r0, r1 * 4, 4);
+ }
+ return v1;
+ } finally {
+ wasm.__wbindgen_add_to_stack_pointer(16);
+ }
+ }
+ /**
+ * @param {number} handle
+ * @param {RawVector} colliderVel
+ * @param {RawShape} shape2
+ * @param {RawVector} shape2Pos
+ * @param {RawRotation} shape2Rot
+ * @param {RawVector} shape2Vel
+ * @param {number} target_distance
+ * @param {number} maxToi
+ * @param {boolean} stop_at_penetration
+ * @returns {RawShapeCastHit | undefined}
+ */
+ coCastShape(handle, colliderVel, shape2, shape2Pos, shape2Rot, shape2Vel, target_distance, maxToi, stop_at_penetration) {
+ _assertClass(colliderVel, RawVector);
+ _assertClass(shape2, RawShape);
+ _assertClass(shape2Pos, RawVector);
+ _assertClass(shape2Rot, RawRotation);
+ _assertClass(shape2Vel, RawVector);
+ const ret = wasm.rawcolliderset_coCastShape(this.__wbg_ptr, handle, colliderVel.__wbg_ptr, shape2.__wbg_ptr, shape2Pos.__wbg_ptr, shape2Rot.__wbg_ptr, shape2Vel.__wbg_ptr, target_distance, maxToi, stop_at_penetration);
+ return ret === 0 ? undefined : RawShapeCastHit.__wrap(ret);
+ }
+ /**
+ * @param {number} handle
+ * @returns {boolean}
+ */
+ coIsEnabled(handle) {
+ const ret = wasm.rawcolliderset_coIsEnabled(this.__wbg_ptr, handle);
+ return ret !== 0;
+ }
+ /**
+ * Set the radius of this collider if it is a ball, capsule, cylinder, or cone shape.
+ * @param {number} handle
+ * @param {number} newRadius
+ */
+ coSetRadius(handle, newRadius) {
+ wasm.rawcolliderset_coSetRadius(this.__wbg_ptr, handle, newRadius);
+ }
+ /**
+ * @param {number} handle
+ * @param {boolean} is_sensor
+ */
+ coSetSensor(handle, is_sensor) {
+ wasm.rawcolliderset_coSetSensor(this.__wbg_ptr, handle, is_sensor);
+ }
+ /**
+ * The type of the shape of this collider.
+ * @param {number} handle
+ * @returns {RawShapeType}
+ */
+ coShapeType(handle) {
+ const ret = wasm.rawcolliderset_coShapeType(this.__wbg_ptr, handle);
+ return ret;
+ }
+ /**
+ * @param {number} handle
+ * @returns {Int32Array | undefined}
+ */
+ coVoxelData(handle) {
+ try {
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
+ wasm.rawcolliderset_coVoxelData(retptr, this.__wbg_ptr, handle);
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
+ let v1;
+ if (r0 !== 0) {
+ v1 = getArrayI32FromWasm0(r0, r1).slice();
+ wasm.__wbindgen_export_1(r0, r1 * 4, 4);
+ }
+ return v1;
+ } finally {
+ wasm.__wbindgen_add_to_stack_pointer(16);
+ }
+ }
+ /**
+ * @param {number} handle
+ * @returns {RawVector | undefined}
+ */
+ coVoxelSize(handle) {
+ const ret = wasm.rawcolliderset_coVoxelSize(this.__wbg_ptr, handle);
+ return ret === 0 ? undefined : RawVector.__wrap(ret);
+ }
+ /**
+ * The half height of this collider if it is a capsule, cylinder, or cone shape.
+ * @param {number} handle
+ * @returns {number | undefined}
+ */
+ coHalfHeight(handle) {
+ const ret = wasm.rawcolliderset_coHalfHeight(this.__wbg_ptr, handle);
+ return ret === 0x100000001 ? undefined : ret;
+ }
+ /**
+ * @param {number} handle
+ * @param {number} density
+ */
+ coSetDensity(handle, density) {
+ wasm.rawcolliderset_coSetDensity(this.__wbg_ptr, handle, density);
+ }
+ /**
+ * @param {number} handle
+ * @param {boolean} enabled
+ */
+ coSetEnabled(handle, enabled) {
+ wasm.rawcolliderset_coSetEnabled(this.__wbg_ptr, handle, enabled);
+ }
+ /**
+ * The physics hooks enabled for this collider.
+ * @param {number} handle
+ * @returns {number}
+ */
+ coActiveHooks(handle) {
+ const ret = wasm.rawcolliderset_coActiveHooks(this.__wbg_ptr, handle);
+ return ret >>> 0;
+ }
+ /**
+ * @param {number} handle
+ * @returns {number}
+ */
+ coContactSkin(handle) {
+ const ret = wasm.rawcolliderset_coContactSkin(this.__wbg_ptr, handle);
+ return ret;
+ }
+ /**
+ * The half-extents of this collider if it is has a cuboid shape.
+ * @param {number} handle
+ * @returns {RawVector | undefined}
+ */
+ coHalfExtents(handle) {
+ const ret = wasm.rawcolliderset_coHalfExtents(this.__wbg_ptr, handle);
+ return ret === 0 ? undefined : RawVector.__wrap(ret);
+ }
+ /**
+ * The restitution coefficient of this collider.
+ * @param {number} handle
+ * @returns {number}
+ */
+ coRestitution(handle) {
+ const ret = wasm.rawcolliderset_coRestitution(this.__wbg_ptr, handle);
+ return ret;
+ }
+ /**
+ * The radius of the round edges of this collider.
+ * @param {number} handle
+ * @returns {number | undefined}
+ */
+ coRoundRadius(handle) {
+ const ret = wasm.rawcolliderset_coRoundRadius(this.__wbg_ptr, handle);
+ return ret === 0x100000001 ? undefined : ret;
+ }
+ /**
+ * @param {number} handle
+ * @param {number} friction
+ */
+ coSetFriction(handle, friction) {
+ wasm.rawcolliderset_coSetFriction(this.__wbg_ptr, handle, friction);
+ }
+ /**
+ * Sets the rotation angle of this collider.
+ *
+ * # Parameters
+ * - `angle`: the rotation angle, in radians.
+ * - `wakeUp`: forces the collider to wake-up so it is properly affected by forces if it
+ * wasn't moving before modifying its position.
+ * @param {number} handle
+ * @param {number} angle
+ */
+ coSetRotation(handle, angle) {
+ wasm.rawcolliderset_coSetRotation(this.__wbg_ptr, handle, angle);
+ }
+ /**
+ * The world-space translation of this collider.
+ * @param {number} handle
+ * @returns {RawVector}
+ */
+ coTranslation(handle) {
+ const ret = wasm.rawcolliderset_coTranslation(this.__wbg_ptr, handle);
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * The events enabled for this collider.
+ * @param {number} handle
+ * @returns {number}
+ */
+ coActiveEvents(handle) {
+ const ret = wasm.rawcolliderset_coActiveEvents(this.__wbg_ptr, handle);
+ return ret >>> 0;
+ }
+ /**
+ * @param {number} handle
+ * @param {RawVector} collider1Vel
+ * @param {number} collider2handle
+ * @param {RawVector} collider2Vel
+ * @param {number} target_distance
+ * @param {number} max_toi
+ * @param {boolean} stop_at_penetration
+ * @returns {RawColliderShapeCastHit | undefined}
+ */
+ coCastCollider(handle, collider1Vel, collider2handle, collider2Vel, target_distance, max_toi, stop_at_penetration) {
+ _assertClass(collider1Vel, RawVector);
+ _assertClass(collider2Vel, RawVector);
+ const ret = wasm.rawcolliderset_coCastCollider(this.__wbg_ptr, handle, collider1Vel.__wbg_ptr, collider2handle, collider2Vel.__wbg_ptr, target_distance, max_toi, stop_at_penetration);
+ return ret === 0 ? undefined : RawColliderShapeCastHit.__wrap(ret);
+ }
+ /**
+ * @param {number} handle
+ * @param {RawShape} shape2
+ * @param {RawVector} shapePos2
+ * @param {RawRotation} shapeRot2
+ * @param {number} prediction
+ * @returns {RawShapeContact | undefined}
+ */
+ coContactShape(handle, shape2, shapePos2, shapeRot2, prediction) {
+ _assertClass(shape2, RawShape);
+ _assertClass(shapePos2, RawVector);
+ _assertClass(shapeRot2, RawRotation);
+ const ret = wasm.rawcolliderset_coContactShape(this.__wbg_ptr, handle, shape2.__wbg_ptr, shapePos2.__wbg_ptr, shapeRot2.__wbg_ptr, prediction);
+ return ret === 0 ? undefined : RawShapeContact.__wrap(ret);
+ }
+ /**
+ * @param {number} handle
+ * @param {RawVector} point
+ * @param {boolean} solid
+ * @returns {RawPointProjection}
+ */
+ coProjectPoint(handle, point, solid) {
+ _assertClass(point, RawVector);
+ const ret = wasm.rawcolliderset_coProjectPoint(this.__wbg_ptr, handle, point.__wbg_ptr, solid);
+ return RawPointProjection.__wrap(ret);
+ }
+ /**
+ * The solver groups of this collider.
+ * @param {number} handle
+ * @returns {number}
+ */
+ coSolverGroups(handle) {
+ const ret = wasm.rawcolliderset_coSolverGroups(this.__wbg_ptr, handle);
+ return ret >>> 0;
+ }
+ /**
+ * @param {number} handle
+ * @returns {number | undefined}
+ */
+ coTriMeshFlags(handle) {
+ const ret = wasm.rawcolliderset_coTriMeshFlags(this.__wbg_ptr, handle);
+ return ret === 0x100000001 ? undefined : ret;
+ }
+ /**
+ * @param {number} handle
+ * @param {RawVector} point
+ * @returns {boolean}
+ */
+ coContainsPoint(handle, point) {
+ _assertClass(point, RawVector);
+ const ret = wasm.rawcolliderset_coContainsPoint(this.__wbg_ptr, handle, point.__wbg_ptr);
+ return ret !== 0;
+ }
+ /**
+ * @param {number} handle
+ * @param {RawVector} rayOrig
+ * @param {RawVector} rayDir
+ * @param {number} maxToi
+ * @returns {boolean}
+ */
+ coIntersectsRay(handle, rayOrig, rayDir, maxToi) {
+ _assertClass(rayOrig, RawVector);
+ _assertClass(rayDir, RawVector);
+ const ret = wasm.rawcolliderset_coIntersectsRay(this.__wbg_ptr, handle, rayOrig.__wbg_ptr, rayDir.__wbg_ptr, maxToi);
+ return ret !== 0;
+ }
+ /**
+ * Set the half height of this collider if it is a capsule, cylinder, or cone shape.
+ * @param {number} handle
+ * @param {number} newHalfheight
+ */
+ coSetHalfHeight(handle, newHalfheight) {
+ wasm.rawcolliderset_coSetHalfHeight(this.__wbg_ptr, handle, newHalfheight);
+ }
+ /**
+ * @param {number} handle
+ * @param {number} hooks
+ */
+ coSetActiveHooks(handle, hooks) {
+ wasm.rawcolliderset_coSetActiveHooks(this.__wbg_ptr, handle, hooks);
+ }
+ /**
+ * @param {number} handle
+ * @param {number} contact_skin
+ */
+ coSetContactSkin(handle, contact_skin) {
+ wasm.rawcolliderset_coSetContactSkin(this.__wbg_ptr, handle, contact_skin);
+ }
+ /**
+ * Set the half-extents of this collider if it has a cuboid shape.
+ * @param {number} handle
+ * @param {RawVector} newHalfExtents
+ */
+ coSetHalfExtents(handle, newHalfExtents) {
+ _assertClass(newHalfExtents, RawVector);
+ wasm.rawcolliderset_coSetHalfExtents(this.__wbg_ptr, handle, newHalfExtents.__wbg_ptr);
+ }
+ /**
+ * @param {number} handle
+ * @param {number} restitution
+ */
+ coSetRestitution(handle, restitution) {
+ wasm.rawcolliderset_coSetRestitution(this.__wbg_ptr, handle, restitution);
+ }
+ /**
+ * Set the radius of the round edges of this collider.
+ * @param {number} handle
+ * @param {number} newBorderRadius
+ */
+ coSetRoundRadius(handle, newBorderRadius) {
+ wasm.rawcolliderset_coSetRoundRadius(this.__wbg_ptr, handle, newBorderRadius);
+ }
+ /**
+ * Sets the translation of this collider.
+ *
+ * # Parameters
+ * - `x`: the world-space position of the collider along the `x` axis.
+ * - `y`: the world-space position of the collider along the `y` axis.
+ * - `wakeUp`: forces the collider to wake-up so it is properly affected by forces if it
+ * wasn't moving before modifying its position.
+ * @param {number} handle
+ * @param {number} x
+ * @param {number} y
+ */
+ coSetTranslation(handle, x, y) {
+ wasm.rawcolliderset_coSetTranslation(this.__wbg_ptr, handle, x, y);
+ }
+ /**
+ * The collision groups of this collider.
+ * @param {number} handle
+ * @returns {number}
+ */
+ coCollisionGroups(handle) {
+ const ret = wasm.rawcolliderset_coCollisionGroups(this.__wbg_ptr, handle);
+ return ret >>> 0;
+ }
+ /**
+ * @param {number} handle
+ * @param {number} collider2handle
+ * @param {number} prediction
+ * @returns {RawShapeContact | undefined}
+ */
+ coContactCollider(handle, collider2handle, prediction) {
+ const ret = wasm.rawcolliderset_coContactCollider(this.__wbg_ptr, handle, collider2handle, prediction);
+ return ret === 0 ? undefined : RawShapeContact.__wrap(ret);
+ }
+ /**
+ * @param {number} handle
+ * @returns {RawVector | undefined}
+ */
+ coHalfspaceNormal(handle) {
+ const ret = wasm.rawcolliderset_coHalfspaceNormal(this.__wbg_ptr, handle);
+ return ret === 0 ? undefined : RawVector.__wrap(ret);
+ }
+ /**
+ * @param {number} handle
+ * @param {RawShape} shape2
+ * @param {RawVector} shapePos2
+ * @param {RawRotation} shapeRot2
+ * @returns {boolean}
+ */
+ coIntersectsShape(handle, shape2, shapePos2, shapeRot2) {
+ _assertClass(shape2, RawShape);
+ _assertClass(shapePos2, RawVector);
+ _assertClass(shapeRot2, RawRotation);
+ const ret = wasm.rawcolliderset_coIntersectsShape(this.__wbg_ptr, handle, shape2.__wbg_ptr, shapePos2.__wbg_ptr, shapeRot2.__wbg_ptr);
+ return ret !== 0;
+ }
+ /**
+ * @param {number} handle
+ * @param {number} events
+ */
+ coSetActiveEvents(handle, events) {
+ wasm.rawcolliderset_coSetActiveEvents(this.__wbg_ptr, handle, events);
+ }
+ /**
+ * @param {number} handle
+ * @param {number} groups
+ */
+ coSetSolverGroups(handle, groups) {
+ wasm.rawcolliderset_coSetSolverGroups(this.__wbg_ptr, handle, groups);
+ }
+ /**
+ * The scaling factor applied of this heightfield if it is one.
+ * @param {number} handle
+ * @returns {RawVector | undefined}
+ */
+ coHeightfieldScale(handle) {
+ const ret = wasm.rawcolliderset_coHeightfieldScale(this.__wbg_ptr, handle);
+ return ret === 0 ? undefined : RawVector.__wrap(ret);
+ }
+ /**
+ * The orientation of this collider relative to its parent rigid-body.
+ *
+ * Returns the `None` if it doesn’t have a parent.
+ * @param {number} handle
+ * @returns {RawRotation | undefined}
+ */
+ coRotationWrtParent(handle) {
+ const ret = wasm.rawcolliderset_coRotationWrtParent(this.__wbg_ptr, handle);
+ return ret === 0 ? undefined : RawRotation.__wrap(ret);
+ }
+ /**
+ * @param {number} handle
+ * @param {number} mass
+ * @param {RawVector} centerOfMass
+ * @param {number} principalAngularInertia
+ */
+ coSetMassProperties(handle, mass, centerOfMass, principalAngularInertia) {
+ _assertClass(centerOfMass, RawVector);
+ wasm.rawcolliderset_coSetMassProperties(this.__wbg_ptr, handle, mass, centerOfMass.__wbg_ptr, principalAngularInertia);
+ }
+ /**
+ * @param {number} handle1
+ * @param {number} handle2
+ * @param {number} shift_x
+ * @param {number} shift_y
+ */
+ coCombineVoxelStates(handle1, handle2, shift_x, shift_y) {
+ wasm.rawcolliderset_coCombineVoxelStates(this.__wbg_ptr, handle1, handle2, shift_x, shift_y);
+ }
+ /**
+ * The height of this heightfield if it is one.
+ * @param {number} handle
+ * @returns {Float32Array | undefined}
+ */
+ coHeightfieldHeights(handle) {
+ try {
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
+ wasm.rawcolliderset_coHeightfieldHeights(retptr, this.__wbg_ptr, handle);
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
+ let v1;
+ if (r0 !== 0) {
+ v1 = getArrayF32FromWasm0(r0, r1).slice();
+ wasm.__wbindgen_export_1(r0, r1 * 4, 4);
+ }
+ return v1;
+ } finally {
+ wasm.__wbindgen_add_to_stack_pointer(16);
+ }
+ }
+ /**
+ * @param {number} handle
+ * @param {number} groups
+ */
+ coSetCollisionGroups(handle, groups) {
+ wasm.rawcolliderset_coSetCollisionGroups(this.__wbg_ptr, handle, groups);
+ }
+ /**
+ * @param {number} handle
+ * @param {RawVector} rayOrig
+ * @param {RawVector} rayDir
+ * @param {number} maxToi
+ * @param {boolean} solid
+ * @returns {RawRayIntersection | undefined}
+ */
+ coCastRayAndGetNormal(handle, rayOrig, rayDir, maxToi, solid) {
+ _assertClass(rayOrig, RawVector);
+ _assertClass(rayDir, RawVector);
+ const ret = wasm.rawcolliderset_coCastRayAndGetNormal(this.__wbg_ptr, handle, rayOrig.__wbg_ptr, rayDir.__wbg_ptr, maxToi, solid);
+ return ret === 0 ? undefined : RawRayIntersection.__wrap(ret);
+ }
+ /**
+ * @param {number} handle
+ * @returns {number}
+ */
+ coFrictionCombineRule(handle) {
+ const ret = wasm.rawcolliderset_coFrictionCombineRule(this.__wbg_ptr, handle);
+ return ret >>> 0;
+ }
+ /**
+ * The collision types enabled for this collider.
+ * @param {number} handle
+ * @returns {number}
+ */
+ coActiveCollisionTypes(handle) {
+ const ret = wasm.rawcolliderset_coActiveCollisionTypes(this.__wbg_ptr, handle);
+ return ret;
+ }
+ /**
+ * @param {number} handle1
+ * @param {number} handle2
+ * @param {number} ix
+ * @param {number} iy
+ * @param {number} shift_x
+ * @param {number} shift_y
+ */
+ coPropagateVoxelChange(handle1, handle2, ix, iy, shift_x, shift_y) {
+ wasm.rawcolliderset_coPropagateVoxelChange(this.__wbg_ptr, handle1, handle2, ix, iy, shift_x, shift_y);
+ }
+ /**
+ * @param {number} handle
+ * @param {number} angle
+ */
+ coSetRotationWrtParent(handle, angle) {
+ wasm.rawcolliderset_coSetRotationWrtParent(this.__wbg_ptr, handle, angle);
+ }
+ /**
+ * The translation of this collider relative to its parent rigid-body.
+ *
+ * Returns the `None` if it doesn’t have a parent.
+ * @param {number} handle
+ * @returns {RawVector | undefined}
+ */
+ coTranslationWrtParent(handle) {
+ const ret = wasm.rawcolliderset_coTranslationWrtParent(this.__wbg_ptr, handle);
+ return ret === 0 ? undefined : RawVector.__wrap(ret);
+ }
+ /**
+ * @param {number} handle
+ * @returns {number}
+ */
+ coRestitutionCombineRule(handle) {
+ const ret = wasm.rawcolliderset_coRestitutionCombineRule(this.__wbg_ptr, handle);
+ return ret >>> 0;
+ }
+ /**
+ * @param {number} handle
+ * @param {number} rule
+ */
+ coSetFrictionCombineRule(handle, rule) {
+ wasm.rawcolliderset_coSetFrictionCombineRule(this.__wbg_ptr, handle, rule);
+ }
+ /**
+ * @param {number} handle
+ * @param {number} types
+ */
+ coSetActiveCollisionTypes(handle, types) {
+ wasm.rawcolliderset_coSetActiveCollisionTypes(this.__wbg_ptr, handle, types);
+ }
+ /**
+ * @param {number} handle
+ * @param {number} x
+ * @param {number} y
+ */
+ coSetTranslationWrtParent(handle, x, y) {
+ wasm.rawcolliderset_coSetTranslationWrtParent(this.__wbg_ptr, handle, x, y);
+ }
+ /**
+ * @param {number} handle
+ * @param {number} rule
+ */
+ coSetRestitutionCombineRule(handle, rule) {
+ wasm.rawcolliderset_coSetRestitutionCombineRule(this.__wbg_ptr, handle, rule);
+ }
+ /**
+ * The total force magnitude beyond which a contact force event can be emitted.
+ * @param {number} handle
+ * @returns {number}
+ */
+ coContactForceEventThreshold(handle) {
+ const ret = wasm.rawcolliderset_coContactForceEventThreshold(this.__wbg_ptr, handle);
+ return ret;
+ }
+ /**
+ * @param {number} handle
+ * @param {number} threshold
+ */
+ coSetContactForceEventThreshold(handle, threshold) {
+ wasm.rawcolliderset_coSetContactForceEventThreshold(this.__wbg_ptr, handle, threshold);
+ }
+ /**
+ * The mass of this collider.
+ * @param {number} handle
+ * @returns {number}
+ */
+ coMass(handle) {
+ const ret = wasm.rawcolliderset_coMass(this.__wbg_ptr, handle);
+ return ret;
+ }
+ /**
+ * The unique integer identifier of the collider this collider is attached to.
+ * @param {number} handle
+ * @returns {number | undefined}
+ */
+ coParent(handle) {
+ try {
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
+ wasm.rawcolliderset_coParent(retptr, this.__wbg_ptr, handle);
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
+ var r2 = getDataViewMemory0().getFloat64(retptr + 8 * 1, true);
+ return r0 === 0 ? undefined : r2;
+ } finally {
+ wasm.__wbindgen_add_to_stack_pointer(16);
+ }
+ }
+ /**
+ * The radius of this collider if it is a ball, capsule, cylinder, or cone shape.
+ * @param {number} handle
+ * @returns {number | undefined}
+ */
+ coRadius(handle) {
+ const ret = wasm.rawcolliderset_coRadius(this.__wbg_ptr, handle);
+ return ret === 0x100000001 ? undefined : ret;
+ }
+ /**
+ * The volume of this collider.
+ * @param {number} handle
+ * @returns {number}
+ */
+ coVolume(handle) {
+ const ret = wasm.rawcolliderset_coVolume(this.__wbg_ptr, handle);
+ return ret;
+ }
+ /**
+ * @param {number} handle
+ * @param {RawVector} rayOrig
+ * @param {RawVector} rayDir
+ * @param {number} maxToi
+ * @param {boolean} solid
+ * @returns {number}
+ */
+ coCastRay(handle, rayOrig, rayDir, maxToi, solid) {
+ _assertClass(rayOrig, RawVector);
+ _assertClass(rayDir, RawVector);
+ const ret = wasm.rawcolliderset_coCastRay(this.__wbg_ptr, handle, rayOrig.__wbg_ptr, rayDir.__wbg_ptr, maxToi, solid);
+ return ret;
+ }
+ /**
+ * The density of this collider.
+ * @param {number} handle
+ * @returns {number}
+ */
+ coDensity(handle) {
+ const ret = wasm.rawcolliderset_coDensity(this.__wbg_ptr, handle);
+ return ret;
+ }
+ /**
+ * The indices of this triangle mesh, polyline, or convex polyhedron, if it is one.
+ * @param {number} handle
+ * @returns {Uint32Array | undefined}
+ */
+ coIndices(handle) {
+ try {
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
+ wasm.rawcolliderset_coIndices(retptr, this.__wbg_ptr, handle);
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
+ let v1;
+ if (r0 !== 0) {
+ v1 = getArrayU32FromWasm0(r0, r1).slice();
+ wasm.__wbindgen_export_1(r0, r1 * 4, 4);
+ }
+ return v1;
+ } finally {
+ wasm.__wbindgen_add_to_stack_pointer(16);
+ }
+ }
+ /**
+ * @param {number} handle
+ * @param {number} mass
+ */
+ coSetMass(handle, mass) {
+ wasm.rawcolliderset_coSetMass(this.__wbg_ptr, handle, mass);
+ }
+}
+
+const RawColliderShapeCastHitFinalization = (typeof FinalizationRegistry === 'undefined')
+ ? { register: () => {}, unregister: () => {} }
+ : new FinalizationRegistry(ptr => wasm.__wbg_rawcollidershapecasthit_free(ptr >>> 0, 1));
+
+export class RawColliderShapeCastHit {
+
+ static __wrap(ptr) {
+ ptr = ptr >>> 0;
+ const obj = Object.create(RawColliderShapeCastHit.prototype);
+ obj.__wbg_ptr = ptr;
+ RawColliderShapeCastHitFinalization.register(obj, obj.__wbg_ptr, obj);
+ return obj;
+ }
+
+ __destroy_into_raw() {
+ const ptr = this.__wbg_ptr;
+ this.__wbg_ptr = 0;
+ RawColliderShapeCastHitFinalization.unregister(this);
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_rawcollidershapecasthit_free(ptr, 0);
+ }
+ /**
+ * @returns {number}
+ */
+ colliderHandle() {
+ const ret = wasm.rawcollidershapecasthit_colliderHandle(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * @returns {number}
+ */
+ time_of_impact() {
+ const ret = wasm.rawcollidershapecasthit_time_of_impact(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * @returns {RawVector}
+ */
+ normal1() {
+ const ret = wasm.rawcollidershapecasthit_normal1(this.__wbg_ptr);
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * @returns {RawVector}
+ */
+ normal2() {
+ const ret = wasm.rawcollidershapecasthit_normal2(this.__wbg_ptr);
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * @returns {RawVector}
+ */
+ witness1() {
+ const ret = wasm.rawcollidershapecasthit_witness1(this.__wbg_ptr);
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * @returns {RawVector}
+ */
+ witness2() {
+ const ret = wasm.rawcollidershapecasthit_witness2(this.__wbg_ptr);
+ return RawVector.__wrap(ret);
+ }
+}
+
+const RawContactForceEventFinalization = (typeof FinalizationRegistry === 'undefined')
+ ? { register: () => {}, unregister: () => {} }
+ : new FinalizationRegistry(ptr => wasm.__wbg_rawcontactforceevent_free(ptr >>> 0, 1));
+
+export class RawContactForceEvent {
+
+ static __wrap(ptr) {
+ ptr = ptr >>> 0;
+ const obj = Object.create(RawContactForceEvent.prototype);
+ obj.__wbg_ptr = ptr;
+ RawContactForceEventFinalization.register(obj, obj.__wbg_ptr, obj);
+ return obj;
+ }
+
+ __destroy_into_raw() {
+ const ptr = this.__wbg_ptr;
+ this.__wbg_ptr = 0;
+ RawContactForceEventFinalization.unregister(this);
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_rawcontactforceevent_free(ptr, 0);
+ }
+ /**
+ * The sum of all the forces between the two colliders.
+ * @returns {RawVector}
+ */
+ total_force() {
+ const ret = wasm.rawcontactforceevent_total_force(this.__wbg_ptr);
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * The world-space (unit) direction of the force with strongest magnitude.
+ * @returns {RawVector}
+ */
+ max_force_direction() {
+ const ret = wasm.rawcharactercollision_translationDeltaApplied(this.__wbg_ptr);
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * The magnitude of the largest force at a contact point of this contact pair.
+ * @returns {number}
+ */
+ max_force_magnitude() {
+ const ret = wasm.rawcontactforceevent_max_force_magnitude(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * The sum of the magnitudes of each force between the two colliders.
+ *
+ * Note that this is **not** the same as the magnitude of `self.total_force`.
+ * Here we are summing the magnitude of all the forces, instead of taking
+ * the magnitude of their sum.
+ * @returns {number}
+ */
+ total_force_magnitude() {
+ const ret = wasm.rawcontactforceevent_total_force_magnitude(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * The first collider involved in the contact.
+ * @returns {number}
+ */
+ collider1() {
+ const ret = wasm.rawcollidershapecasthit_colliderHandle(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * The second collider involved in the contact.
+ * @returns {number}
+ */
+ collider2() {
+ const ret = wasm.rawcontactforceevent_collider2(this.__wbg_ptr);
+ return ret;
+ }
+}
+
+const RawContactManifoldFinalization = (typeof FinalizationRegistry === 'undefined')
+ ? { register: () => {}, unregister: () => {} }
+ : new FinalizationRegistry(ptr => wasm.__wbg_rawcontactmanifold_free(ptr >>> 0, 1));
+
+export class RawContactManifold {
+
+ static __wrap(ptr) {
+ ptr = ptr >>> 0;
+ const obj = Object.create(RawContactManifold.prototype);
+ obj.__wbg_ptr = ptr;
+ RawContactManifoldFinalization.register(obj, obj.__wbg_ptr, obj);
+ return obj;
+ }
+
+ __destroy_into_raw() {
+ const ptr = this.__wbg_ptr;
+ this.__wbg_ptr = 0;
+ RawContactManifoldFinalization.unregister(this);
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_rawcontactmanifold_free(ptr, 0);
+ }
+ /**
+ * @param {number} i
+ * @returns {number}
+ */
+ contact_dist(i) {
+ const ret = wasm.rawcontactmanifold_contact_dist(this.__wbg_ptr, i);
+ return ret;
+ }
+ /**
+ * @param {number} i
+ * @returns {number}
+ */
+ contact_fid1(i) {
+ const ret = wasm.rawcontactmanifold_contact_fid1(this.__wbg_ptr, i);
+ return ret >>> 0;
+ }
+ /**
+ * @param {number} i
+ * @returns {number}
+ */
+ contact_fid2(i) {
+ const ret = wasm.rawcontactmanifold_contact_fid2(this.__wbg_ptr, i);
+ return ret >>> 0;
+ }
+ /**
+ * @returns {number}
+ */
+ num_contacts() {
+ const ret = wasm.rawcontactmanifold_num_contacts(this.__wbg_ptr);
+ return ret >>> 0;
+ }
+ /**
+ * @param {number} i
+ * @returns {number}
+ */
+ contact_impulse(i) {
+ const ret = wasm.rawcontactmanifold_contact_impulse(this.__wbg_ptr, i);
+ return ret;
+ }
+ /**
+ * @param {number} i
+ * @returns {RawVector | undefined}
+ */
+ contact_local_p1(i) {
+ const ret = wasm.rawcontactmanifold_contact_local_p1(this.__wbg_ptr, i);
+ return ret === 0 ? undefined : RawVector.__wrap(ret);
+ }
+ /**
+ * @param {number} i
+ * @returns {RawVector | undefined}
+ */
+ contact_local_p2(i) {
+ const ret = wasm.rawcontactmanifold_contact_local_p2(this.__wbg_ptr, i);
+ return ret === 0 ? undefined : RawVector.__wrap(ret);
+ }
+ /**
+ * @returns {number}
+ */
+ num_solver_contacts() {
+ const ret = wasm.rawcontactmanifold_num_solver_contacts(this.__wbg_ptr);
+ return ret >>> 0;
+ }
+ /**
+ * @param {number} i
+ * @returns {number}
+ */
+ solver_contact_dist(i) {
+ const ret = wasm.rawcontactmanifold_solver_contact_dist(this.__wbg_ptr, i);
+ return ret;
+ }
+ /**
+ * @param {number} i
+ * @returns {RawVector | undefined}
+ */
+ solver_contact_point(i) {
+ const ret = wasm.rawcontactmanifold_solver_contact_point(this.__wbg_ptr, i);
+ return ret === 0 ? undefined : RawVector.__wrap(ret);
+ }
+ /**
+ * @param {number} i
+ * @returns {number}
+ */
+ contact_tangent_impulse(i) {
+ const ret = wasm.rawcontactmanifold_contact_tangent_impulse(this.__wbg_ptr, i);
+ return ret;
+ }
+ /**
+ * @param {number} i
+ * @returns {number}
+ */
+ solver_contact_friction(i) {
+ const ret = wasm.rawcontactmanifold_solver_contact_friction(this.__wbg_ptr, i);
+ return ret;
+ }
+ /**
+ * @param {number} i
+ * @returns {number}
+ */
+ solver_contact_restitution(i) {
+ const ret = wasm.rawcontactmanifold_solver_contact_restitution(this.__wbg_ptr, i);
+ return ret;
+ }
+ /**
+ * @param {number} i
+ * @returns {RawVector}
+ */
+ solver_contact_tangent_velocity(i) {
+ const ret = wasm.rawcontactmanifold_solver_contact_tangent_velocity(this.__wbg_ptr, i);
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * @returns {RawVector}
+ */
+ normal() {
+ const ret = wasm.rawcontactmanifold_normal(this.__wbg_ptr);
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * @returns {RawVector}
+ */
+ local_n1() {
+ const ret = wasm.rawcontactmanifold_local_n1(this.__wbg_ptr);
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * @returns {RawVector}
+ */
+ local_n2() {
+ const ret = wasm.rawcontactmanifold_local_n2(this.__wbg_ptr);
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * @returns {number}
+ */
+ subshape1() {
+ const ret = wasm.rawcontactmanifold_subshape1(this.__wbg_ptr);
+ return ret >>> 0;
+ }
+ /**
+ * @returns {number}
+ */
+ subshape2() {
+ const ret = wasm.rawcontactmanifold_subshape2(this.__wbg_ptr);
+ return ret >>> 0;
+ }
+}
+
+const RawContactPairFinalization = (typeof FinalizationRegistry === 'undefined')
+ ? { register: () => {}, unregister: () => {} }
+ : new FinalizationRegistry(ptr => wasm.__wbg_rawcontactpair_free(ptr >>> 0, 1));
+
+export class RawContactPair {
+
+ static __wrap(ptr) {
+ ptr = ptr >>> 0;
+ const obj = Object.create(RawContactPair.prototype);
+ obj.__wbg_ptr = ptr;
+ RawContactPairFinalization.register(obj, obj.__wbg_ptr, obj);
+ return obj;
+ }
+
+ __destroy_into_raw() {
+ const ptr = this.__wbg_ptr;
+ this.__wbg_ptr = 0;
+ RawContactPairFinalization.unregister(this);
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_rawcontactpair_free(ptr, 0);
+ }
+ /**
+ * @param {number} i
+ * @returns {RawContactManifold | undefined}
+ */
+ contactManifold(i) {
+ const ret = wasm.rawcontactpair_contactManifold(this.__wbg_ptr, i);
+ return ret === 0 ? undefined : RawContactManifold.__wrap(ret);
+ }
+ /**
+ * @returns {number}
+ */
+ numContactManifolds() {
+ const ret = wasm.rawcontactpair_numContactManifolds(this.__wbg_ptr);
+ return ret >>> 0;
+ }
+ /**
+ * @returns {number}
+ */
+ collider1() {
+ const ret = wasm.rawcontactpair_collider1(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * @returns {number}
+ */
+ collider2() {
+ const ret = wasm.rawcontactpair_collider2(this.__wbg_ptr);
+ return ret;
+ }
+}
+
+const RawDebugRenderPipelineFinalization = (typeof FinalizationRegistry === 'undefined')
+ ? { register: () => {}, unregister: () => {} }
+ : new FinalizationRegistry(ptr => wasm.__wbg_rawdebugrenderpipeline_free(ptr >>> 0, 1));
+
+export class RawDebugRenderPipeline {
+
+ __destroy_into_raw() {
+ const ptr = this.__wbg_ptr;
+ this.__wbg_ptr = 0;
+ RawDebugRenderPipelineFinalization.unregister(this);
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_rawdebugrenderpipeline_free(ptr, 0);
+ }
+ constructor() {
+ const ret = wasm.rawdebugrenderpipeline_new();
+ this.__wbg_ptr = ret >>> 0;
+ RawDebugRenderPipelineFinalization.register(this, this.__wbg_ptr, this);
+ return this;
+ }
+ /**
+ * @returns {Float32Array}
+ */
+ colors() {
+ const ret = wasm.rawdebugrenderpipeline_colors(this.__wbg_ptr);
+ return takeObject(ret);
+ }
+ /**
+ * @param {RawRigidBodySet} bodies
+ * @param {RawColliderSet} colliders
+ * @param {RawImpulseJointSet} impulse_joints
+ * @param {RawMultibodyJointSet} multibody_joints
+ * @param {RawNarrowPhase} narrow_phase
+ * @param {number} filter_flags
+ * @param {Function} filter_predicate
+ */
+ render(bodies, colliders, impulse_joints, multibody_joints, narrow_phase, filter_flags, filter_predicate) {
+ try {
+ _assertClass(bodies, RawRigidBodySet);
+ _assertClass(colliders, RawColliderSet);
+ _assertClass(impulse_joints, RawImpulseJointSet);
+ _assertClass(multibody_joints, RawMultibodyJointSet);
+ _assertClass(narrow_phase, RawNarrowPhase);
+ wasm.rawdebugrenderpipeline_render(this.__wbg_ptr, bodies.__wbg_ptr, colliders.__wbg_ptr, impulse_joints.__wbg_ptr, multibody_joints.__wbg_ptr, narrow_phase.__wbg_ptr, filter_flags, addBorrowedObject(filter_predicate));
+ } finally {
+ heap[stack_pointer++] = undefined;
+ }
+ }
+ /**
+ * @returns {Float32Array}
+ */
+ vertices() {
+ const ret = wasm.rawdebugrenderpipeline_vertices(this.__wbg_ptr);
+ return takeObject(ret);
+ }
+}
+
+const RawDeserializedWorldFinalization = (typeof FinalizationRegistry === 'undefined')
+ ? { register: () => {}, unregister: () => {} }
+ : new FinalizationRegistry(ptr => wasm.__wbg_rawdeserializedworld_free(ptr >>> 0, 1));
+
+export class RawDeserializedWorld {
+
+ static __wrap(ptr) {
+ ptr = ptr >>> 0;
+ const obj = Object.create(RawDeserializedWorld.prototype);
+ obj.__wbg_ptr = ptr;
+ RawDeserializedWorldFinalization.register(obj, obj.__wbg_ptr, obj);
+ return obj;
+ }
+
+ __destroy_into_raw() {
+ const ptr = this.__wbg_ptr;
+ this.__wbg_ptr = 0;
+ RawDeserializedWorldFinalization.unregister(this);
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_rawdeserializedworld_free(ptr, 0);
+ }
+ /**
+ * @returns {RawRigidBodySet | undefined}
+ */
+ takeBodies() {
+ const ret = wasm.rawdeserializedworld_takeBodies(this.__wbg_ptr);
+ return ret === 0 ? undefined : RawRigidBodySet.__wrap(ret);
+ }
+ /**
+ * @returns {RawVector | undefined}
+ */
+ takeGravity() {
+ const ret = wasm.rawdeserializedworld_takeGravity(this.__wbg_ptr);
+ return ret === 0 ? undefined : RawVector.__wrap(ret);
+ }
+ /**
+ * @returns {RawColliderSet | undefined}
+ */
+ takeColliders() {
+ const ret = wasm.rawdeserializedworld_takeColliders(this.__wbg_ptr);
+ return ret === 0 ? undefined : RawColliderSet.__wrap(ret);
+ }
+ /**
+ * @returns {RawBroadPhase | undefined}
+ */
+ takeBroadPhase() {
+ const ret = wasm.rawdeserializedworld_takeBroadPhase(this.__wbg_ptr);
+ return ret === 0 ? undefined : RawBroadPhase.__wrap(ret);
+ }
+ /**
+ * @returns {RawNarrowPhase | undefined}
+ */
+ takeNarrowPhase() {
+ const ret = wasm.rawdeserializedworld_takeNarrowPhase(this.__wbg_ptr);
+ return ret === 0 ? undefined : RawNarrowPhase.__wrap(ret);
+ }
+ /**
+ * @returns {RawImpulseJointSet | undefined}
+ */
+ takeImpulseJoints() {
+ const ret = wasm.rawdeserializedworld_takeImpulseJoints(this.__wbg_ptr);
+ return ret === 0 ? undefined : RawImpulseJointSet.__wrap(ret);
+ }
+ /**
+ * @returns {RawIslandManager | undefined}
+ */
+ takeIslandManager() {
+ const ret = wasm.rawdeserializedworld_takeIslandManager(this.__wbg_ptr);
+ return ret === 0 ? undefined : RawIslandManager.__wrap(ret);
+ }
+ /**
+ * @returns {RawMultibodyJointSet | undefined}
+ */
+ takeMultibodyJoints() {
+ const ret = wasm.rawdeserializedworld_takeMultibodyJoints(this.__wbg_ptr);
+ return ret === 0 ? undefined : RawMultibodyJointSet.__wrap(ret);
+ }
+ /**
+ * @returns {RawIntegrationParameters | undefined}
+ */
+ takeIntegrationParameters() {
+ const ret = wasm.rawdeserializedworld_takeIntegrationParameters(this.__wbg_ptr);
+ return ret === 0 ? undefined : RawIntegrationParameters.__wrap(ret);
+ }
+}
+
+const RawEventQueueFinalization = (typeof FinalizationRegistry === 'undefined')
+ ? { register: () => {}, unregister: () => {} }
+ : new FinalizationRegistry(ptr => wasm.__wbg_raweventqueue_free(ptr >>> 0, 1));
+/**
+ * A structure responsible for collecting events generated
+ * by the physics engine.
+ */
+export class RawEventQueue {
+
+ __destroy_into_raw() {
+ const ptr = this.__wbg_ptr;
+ this.__wbg_ptr = 0;
+ RawEventQueueFinalization.unregister(this);
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_raweventqueue_free(ptr, 0);
+ }
+ /**
+ * Applies the given javascript closure on each collision event of this collector, then clear
+ * the internal collision event buffer.
+ *
+ * # Parameters
+ * - `f(handle1, handle2, started)`: JavaScript closure applied to each collision event. The
+ * closure should take three arguments: two integers representing the handles of the colliders
+ * involved in the collision, and a boolean indicating if the collision started (true) or stopped
+ * (false).
+ * @param {Function} f
+ */
+ drainCollisionEvents(f) {
+ try {
+ wasm.raweventqueue_drainCollisionEvents(this.__wbg_ptr, addBorrowedObject(f));
+ } finally {
+ heap[stack_pointer++] = undefined;
+ }
+ }
+ /**
+ * @param {Function} f
+ */
+ drainContactForceEvents(f) {
+ try {
+ wasm.raweventqueue_drainContactForceEvents(this.__wbg_ptr, addBorrowedObject(f));
+ } finally {
+ heap[stack_pointer++] = undefined;
+ }
+ }
+ /**
+ * Creates a new event collector.
+ *
+ * # Parameters
+ * - `autoDrain`: setting this to `true` is strongly recommended. If true, the collector will
+ * be automatically drained before each `world.step(collector)`. If false, the collector will
+ * keep all events in memory unless it is manually drained/cleared; this may lead to unbounded use of
+ * RAM if no drain is performed.
+ * @param {boolean} autoDrain
+ */
+ constructor(autoDrain) {
+ const ret = wasm.raweventqueue_new(autoDrain);
+ this.__wbg_ptr = ret >>> 0;
+ RawEventQueueFinalization.register(this, this.__wbg_ptr, this);
+ return this;
+ }
+ /**
+ * Removes all events contained by this collector.
+ */
+ clear() {
+ wasm.raweventqueue_clear(this.__wbg_ptr);
+ }
+}
+
+const RawGenericJointFinalization = (typeof FinalizationRegistry === 'undefined')
+ ? { register: () => {}, unregister: () => {} }
+ : new FinalizationRegistry(ptr => wasm.__wbg_rawgenericjoint_free(ptr >>> 0, 1));
+
+export class RawGenericJoint {
+
+ static __wrap(ptr) {
+ ptr = ptr >>> 0;
+ const obj = Object.create(RawGenericJoint.prototype);
+ obj.__wbg_ptr = ptr;
+ RawGenericJointFinalization.register(obj, obj.__wbg_ptr, obj);
+ return obj;
+ }
+
+ __destroy_into_raw() {
+ const ptr = this.__wbg_ptr;
+ this.__wbg_ptr = 0;
+ RawGenericJointFinalization.unregister(this);
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_rawgenericjoint_free(ptr, 0);
+ }
+ /**
+ * @param {number} length
+ * @param {RawVector} anchor1
+ * @param {RawVector} anchor2
+ * @returns {RawGenericJoint}
+ */
+ static rope(length, anchor1, anchor2) {
+ _assertClass(anchor1, RawVector);
+ _assertClass(anchor2, RawVector);
+ const ret = wasm.rawgenericjoint_rope(length, anchor1.__wbg_ptr, anchor2.__wbg_ptr);
+ return RawGenericJoint.__wrap(ret);
+ }
+ /**
+ * Creates a new joint descriptor that builds a Fixed joint.
+ *
+ * A fixed joint removes all the degrees of freedom between the affected bodies.
+ * @param {RawVector} anchor1
+ * @param {RawRotation} axes1
+ * @param {RawVector} anchor2
+ * @param {RawRotation} axes2
+ * @returns {RawGenericJoint}
+ */
+ static fixed(anchor1, axes1, anchor2, axes2) {
+ _assertClass(anchor1, RawVector);
+ _assertClass(axes1, RawRotation);
+ _assertClass(anchor2, RawVector);
+ _assertClass(axes2, RawRotation);
+ const ret = wasm.rawgenericjoint_fixed(anchor1.__wbg_ptr, axes1.__wbg_ptr, anchor2.__wbg_ptr, axes2.__wbg_ptr);
+ return RawGenericJoint.__wrap(ret);
+ }
+ /**
+ * @param {number} rest_length
+ * @param {number} stiffness
+ * @param {number} damping
+ * @param {RawVector} anchor1
+ * @param {RawVector} anchor2
+ * @returns {RawGenericJoint}
+ */
+ static spring(rest_length, stiffness, damping, anchor1, anchor2) {
+ _assertClass(anchor1, RawVector);
+ _assertClass(anchor2, RawVector);
+ const ret = wasm.rawgenericjoint_spring(rest_length, stiffness, damping, anchor1.__wbg_ptr, anchor2.__wbg_ptr);
+ return RawGenericJoint.__wrap(ret);
+ }
+ /**
+ * Create a new joint descriptor that builds Revolute joints.
+ *
+ * A revolute joint removes all degrees of freedom between the affected
+ * bodies except for the rotation.
+ * @param {RawVector} anchor1
+ * @param {RawVector} anchor2
+ * @returns {RawGenericJoint | undefined}
+ */
+ static revolute(anchor1, anchor2) {
+ _assertClass(anchor1, RawVector);
+ _assertClass(anchor2, RawVector);
+ const ret = wasm.rawgenericjoint_revolute(anchor1.__wbg_ptr, anchor2.__wbg_ptr);
+ return ret === 0 ? undefined : RawGenericJoint.__wrap(ret);
+ }
+ /**
+ * Creates a new joint descriptor that builds a Prismatic joint.
+ *
+ * A prismatic joint removes all the degrees of freedom between the
+ * affected bodies, except for the translation along one axis.
+ *
+ * Returns `None` if any of the provided axes cannot be normalized.
+ * @param {RawVector} anchor1
+ * @param {RawVector} anchor2
+ * @param {RawVector} axis
+ * @param {boolean} limitsEnabled
+ * @param {number} limitsMin
+ * @param {number} limitsMax
+ * @returns {RawGenericJoint | undefined}
+ */
+ static prismatic(anchor1, anchor2, axis, limitsEnabled, limitsMin, limitsMax) {
+ _assertClass(anchor1, RawVector);
+ _assertClass(anchor2, RawVector);
+ _assertClass(axis, RawVector);
+ const ret = wasm.rawgenericjoint_prismatic(anchor1.__wbg_ptr, anchor2.__wbg_ptr, axis.__wbg_ptr, limitsEnabled, limitsMin, limitsMax);
+ return ret === 0 ? undefined : RawGenericJoint.__wrap(ret);
+ }
+}
+
+const RawImpulseJointSetFinalization = (typeof FinalizationRegistry === 'undefined')
+ ? { register: () => {}, unregister: () => {} }
+ : new FinalizationRegistry(ptr => wasm.__wbg_rawimpulsejointset_free(ptr >>> 0, 1));
+
+export class RawImpulseJointSet {
+
+ static __wrap(ptr) {
+ ptr = ptr >>> 0;
+ const obj = Object.create(RawImpulseJointSet.prototype);
+ obj.__wbg_ptr = ptr;
+ RawImpulseJointSetFinalization.register(obj, obj.__wbg_ptr, obj);
+ return obj;
+ }
+
+ __destroy_into_raw() {
+ const ptr = this.__wbg_ptr;
+ this.__wbg_ptr = 0;
+ RawImpulseJointSetFinalization.unregister(this);
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_rawimpulsejointset_free(ptr, 0);
+ }
+ /**
+ * The position of the first anchor of this joint.
+ *
+ * The first anchor gives the position of the points application point on the
+ * local frame of the first rigid-body it is attached to.
+ * @param {number} handle
+ * @returns {RawVector}
+ */
+ jointAnchor1(handle) {
+ const ret = wasm.rawimpulsejointset_jointAnchor1(this.__wbg_ptr, handle);
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * The position of the second anchor of this joint.
+ *
+ * The second anchor gives the position of the points application point on the
+ * local frame of the second rigid-body it is attached to.
+ * @param {number} handle
+ * @returns {RawVector}
+ */
+ jointAnchor2(handle) {
+ const ret = wasm.rawimpulsejointset_jointAnchor2(this.__wbg_ptr, handle);
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * The angular part of the joint’s local frame relative to the first rigid-body it is attached to.
+ * @param {number} handle
+ * @returns {RawRotation}
+ */
+ jointFrameX1(handle) {
+ const ret = wasm.rawimpulsejointset_jointFrameX1(this.__wbg_ptr, handle);
+ return RawRotation.__wrap(ret);
+ }
+ /**
+ * The angular part of the joint’s local frame relative to the second rigid-body it is attached to.
+ * @param {number} handle
+ * @returns {RawRotation}
+ */
+ jointFrameX2(handle) {
+ const ret = wasm.rawimpulsejointset_jointFrameX2(this.__wbg_ptr, handle);
+ return RawRotation.__wrap(ret);
+ }
+ /**
+ * If this is a prismatic joint, returns its upper limit.
+ * @param {number} handle
+ * @param {RawJointAxis} axis
+ * @returns {number}
+ */
+ jointLimitsMax(handle, axis) {
+ const ret = wasm.rawimpulsejointset_jointLimitsMax(this.__wbg_ptr, handle, axis);
+ return ret;
+ }
+ /**
+ * Return the lower limit along the given joint axis.
+ * @param {number} handle
+ * @param {RawJointAxis} axis
+ * @returns {number}
+ */
+ jointLimitsMin(handle, axis) {
+ const ret = wasm.rawimpulsejointset_jointLimitsMin(this.__wbg_ptr, handle, axis);
+ return ret;
+ }
+ /**
+ * Enables and sets the joint limits
+ * @param {number} handle
+ * @param {RawJointAxis} axis
+ * @param {number} min
+ * @param {number} max
+ */
+ jointSetLimits(handle, axis, min, max) {
+ wasm.rawimpulsejointset_jointSetLimits(this.__wbg_ptr, handle, axis, min, max);
+ }
+ /**
+ * Sets the position of the first local anchor
+ * @param {number} handle
+ * @param {RawVector} newPos
+ */
+ jointSetAnchor1(handle, newPos) {
+ _assertClass(newPos, RawVector);
+ wasm.rawimpulsejointset_jointSetAnchor1(this.__wbg_ptr, handle, newPos.__wbg_ptr);
+ }
+ /**
+ * Sets the position of the second local anchor
+ * @param {number} handle
+ * @param {RawVector} newPos
+ */
+ jointSetAnchor2(handle, newPos) {
+ _assertClass(newPos, RawVector);
+ wasm.rawimpulsejointset_jointSetAnchor2(this.__wbg_ptr, handle, newPos.__wbg_ptr);
+ }
+ /**
+ * The unique integer identifier of the first rigid-body this joint it attached to.
+ * @param {number} handle
+ * @returns {number}
+ */
+ jointBodyHandle1(handle) {
+ const ret = wasm.rawimpulsejointset_jointBodyHandle1(this.__wbg_ptr, handle);
+ return ret;
+ }
+ /**
+ * The unique integer identifier of the second rigid-body this joint is attached to.
+ * @param {number} handle
+ * @returns {number}
+ */
+ jointBodyHandle2(handle) {
+ const ret = wasm.rawimpulsejointset_jointBodyHandle2(this.__wbg_ptr, handle);
+ return ret;
+ }
+ /**
+ * Are the limits for this joint enabled?
+ * @param {number} handle
+ * @param {RawJointAxis} axis
+ * @returns {boolean}
+ */
+ jointLimitsEnabled(handle, axis) {
+ const ret = wasm.rawimpulsejointset_jointLimitsEnabled(this.__wbg_ptr, handle, axis);
+ return ret !== 0;
+ }
+ /**
+ * @param {number} handle
+ * @param {RawJointAxis} axis
+ * @param {number} targetPos
+ * @param {number} targetVel
+ * @param {number} stiffness
+ * @param {number} damping
+ */
+ jointConfigureMotor(handle, axis, targetPos, targetVel, stiffness, damping) {
+ wasm.rawimpulsejointset_jointConfigureMotor(this.__wbg_ptr, handle, axis, targetPos, targetVel, stiffness, damping);
+ }
+ /**
+ * Are contacts between the rigid-bodies attached by this joint enabled?
+ * @param {number} handle
+ * @returns {boolean}
+ */
+ jointContactsEnabled(handle) {
+ const ret = wasm.rawimpulsejointset_jointContactsEnabled(this.__wbg_ptr, handle);
+ return ret !== 0;
+ }
+ /**
+ * Sets whether contacts are enabled between the rigid-bodies attached by this joint.
+ * @param {number} handle
+ * @param {boolean} enabled
+ */
+ jointSetContactsEnabled(handle, enabled) {
+ wasm.rawimpulsejointset_jointSetContactsEnabled(this.__wbg_ptr, handle, enabled);
+ }
+ /**
+ * @param {number} handle
+ * @param {RawJointAxis} axis
+ * @param {RawMotorModel} model
+ */
+ jointConfigureMotorModel(handle, axis, model) {
+ wasm.rawimpulsejointset_jointConfigureMotorModel(this.__wbg_ptr, handle, axis, model);
+ }
+ /**
+ * @param {number} handle
+ * @param {RawJointAxis} axis
+ * @param {number} targetPos
+ * @param {number} stiffness
+ * @param {number} damping
+ */
+ jointConfigureMotorPosition(handle, axis, targetPos, stiffness, damping) {
+ wasm.rawimpulsejointset_jointConfigureMotorPosition(this.__wbg_ptr, handle, axis, targetPos, stiffness, damping);
+ }
+ /**
+ * @param {number} handle
+ * @param {RawJointAxis} axis
+ * @param {number} targetVel
+ * @param {number} factor
+ */
+ jointConfigureMotorVelocity(handle, axis, targetVel, factor) {
+ wasm.rawimpulsejointset_jointConfigureMotorVelocity(this.__wbg_ptr, handle, axis, targetVel, factor);
+ }
+ /**
+ * The type of this joint.
+ * @param {number} handle
+ * @returns {RawJointType}
+ */
+ jointType(handle) {
+ const ret = wasm.rawimpulsejointset_jointType(this.__wbg_ptr, handle);
+ return ret;
+ }
+ /**
+ * @param {RawGenericJoint} params
+ * @param {number} parent1
+ * @param {number} parent2
+ * @param {boolean} wake_up
+ * @returns {number}
+ */
+ createJoint(params, parent1, parent2, wake_up) {
+ _assertClass(params, RawGenericJoint);
+ const ret = wasm.rawimpulsejointset_createJoint(this.__wbg_ptr, params.__wbg_ptr, parent1, parent2, wake_up);
+ return ret;
+ }
+ /**
+ * Applies the given JavaScript function to the integer handle of each joint managed by this physics world.
+ *
+ * # Parameters
+ * - `f(handle)`: the function to apply to the integer handle of each joint managed by this set. Called as `f(collider)`.
+ * @param {Function} f
+ */
+ forEachJointHandle(f) {
+ try {
+ wasm.rawimpulsejointset_forEachJointHandle(this.__wbg_ptr, addBorrowedObject(f));
+ } finally {
+ heap[stack_pointer++] = undefined;
+ }
+ }
+ /**
+ * Applies the given JavaScript function to the integer handle of each joint attached to the given rigid-body.
+ *
+ * # Parameters
+ * - `f(handle)`: the function to apply to the integer handle of each joint attached to the rigid-body. Called as `f(collider)`.
+ * @param {number} body
+ * @param {Function} f
+ */
+ forEachJointAttachedToRigidBody(body, f) {
+ try {
+ wasm.rawimpulsejointset_forEachJointAttachedToRigidBody(this.__wbg_ptr, body, addBorrowedObject(f));
+ } finally {
+ heap[stack_pointer++] = undefined;
+ }
+ }
+ /**
+ * @returns {number}
+ */
+ len() {
+ const ret = wasm.rawimpulsejointset_len(this.__wbg_ptr);
+ return ret >>> 0;
+ }
+ constructor() {
+ const ret = wasm.rawimpulsejointset_new();
+ this.__wbg_ptr = ret >>> 0;
+ RawImpulseJointSetFinalization.register(this, this.__wbg_ptr, this);
+ return this;
+ }
+ /**
+ * @param {number} handle
+ * @param {boolean} wakeUp
+ */
+ remove(handle, wakeUp) {
+ wasm.rawimpulsejointset_remove(this.__wbg_ptr, handle, wakeUp);
+ }
+ /**
+ * @param {number} handle
+ * @returns {boolean}
+ */
+ contains(handle) {
+ const ret = wasm.rawimpulsejointset_contains(this.__wbg_ptr, handle);
+ return ret !== 0;
+ }
+}
+
+const RawIntegrationParametersFinalization = (typeof FinalizationRegistry === 'undefined')
+ ? { register: () => {}, unregister: () => {} }
+ : new FinalizationRegistry(ptr => wasm.__wbg_rawintegrationparameters_free(ptr >>> 0, 1));
+
+export class RawIntegrationParameters {
+
+ static __wrap(ptr) {
+ ptr = ptr >>> 0;
+ const obj = Object.create(RawIntegrationParameters.prototype);
+ obj.__wbg_ptr = ptr;
+ RawIntegrationParametersFinalization.register(obj, obj.__wbg_ptr, obj);
+ return obj;
+ }
+
+ __destroy_into_raw() {
+ const ptr = this.__wbg_ptr;
+ this.__wbg_ptr = 0;
+ RawIntegrationParametersFinalization.unregister(this);
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_rawintegrationparameters_free(ptr, 0);
+ }
+ /**
+ * @returns {number}
+ */
+ get lengthUnit() {
+ const ret = wasm.rawintegrationparameters_lengthUnit(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * @returns {number}
+ */
+ get contact_erp() {
+ const ret = wasm.rawintegrationparameters_contact_erp(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * @returns {number}
+ */
+ get minIslandSize() {
+ const ret = wasm.rawintegrationparameters_minIslandSize(this.__wbg_ptr);
+ return ret >>> 0;
+ }
+ /**
+ * @returns {number}
+ */
+ get maxCcdSubsteps() {
+ const ret = wasm.rawintegrationparameters_maxCcdSubsteps(this.__wbg_ptr);
+ return ret >>> 0;
+ }
+ /**
+ * @param {number} value
+ */
+ set lengthUnit(value) {
+ wasm.rawintegrationparameters_set_lengthUnit(this.__wbg_ptr, value);
+ }
+ /**
+ * @param {number} value
+ */
+ set minIslandSize(value) {
+ wasm.rawintegrationparameters_set_minIslandSize(this.__wbg_ptr, value);
+ }
+ /**
+ * @param {number} value
+ */
+ set maxCcdSubsteps(value) {
+ wasm.rawintegrationparameters_set_maxCcdSubsteps(this.__wbg_ptr, value);
+ }
+ /**
+ * @returns {number}
+ */
+ get numSolverIterations() {
+ const ret = wasm.rawintegrationparameters_numSolverIterations(this.__wbg_ptr);
+ return ret >>> 0;
+ }
+ /**
+ * @param {number} value
+ */
+ set numSolverIterations(value) {
+ wasm.rawintegrationparameters_set_numSolverIterations(this.__wbg_ptr, value);
+ }
+ /**
+ * @returns {number}
+ */
+ get numInternalPgsIterations() {
+ const ret = wasm.rawintegrationparameters_numInternalPgsIterations(this.__wbg_ptr);
+ return ret >>> 0;
+ }
+ /**
+ * @returns {number}
+ */
+ get normalizedAllowedLinearError() {
+ const ret = wasm.rawcontactforceevent_total_force_magnitude(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * @returns {number}
+ */
+ get normalizedPredictionDistance() {
+ const ret = wasm.rawcharactercollision_toi(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * @param {number} value
+ */
+ set numInternalPgsIterations(value) {
+ wasm.rawintegrationparameters_set_numInternalPgsIterations(this.__wbg_ptr, value);
+ }
+ /**
+ * @param {number} value
+ */
+ set contact_natural_frequency(value) {
+ wasm.rawintegrationparameters_set_contact_natural_frequency(this.__wbg_ptr, value);
+ }
+ /**
+ * @returns {number}
+ */
+ get dt() {
+ const ret = wasm.rawintegrationparameters_dt(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * @param {number} value
+ */
+ set normalizedAllowedLinearError(value) {
+ wasm.rawintegrationparameters_set_normalizedAllowedLinearError(this.__wbg_ptr, value);
+ }
+ /**
+ * @param {number} value
+ */
+ set normalizedPredictionDistance(value) {
+ wasm.rawintegrationparameters_set_normalizedPredictionDistance(this.__wbg_ptr, value);
+ }
+ constructor() {
+ const ret = wasm.rawintegrationparameters_new();
+ this.__wbg_ptr = ret >>> 0;
+ RawIntegrationParametersFinalization.register(this, this.__wbg_ptr, this);
+ return this;
+ }
+ /**
+ * @param {number} value
+ */
+ set dt(value) {
+ wasm.rawintegrationparameters_set_dt(this.__wbg_ptr, value);
+ }
+}
+
+const RawIslandManagerFinalization = (typeof FinalizationRegistry === 'undefined')
+ ? { register: () => {}, unregister: () => {} }
+ : new FinalizationRegistry(ptr => wasm.__wbg_rawislandmanager_free(ptr >>> 0, 1));
+
+export class RawIslandManager {
+
+ static __wrap(ptr) {
+ ptr = ptr >>> 0;
+ const obj = Object.create(RawIslandManager.prototype);
+ obj.__wbg_ptr = ptr;
+ RawIslandManagerFinalization.register(obj, obj.__wbg_ptr, obj);
+ return obj;
+ }
+
+ __destroy_into_raw() {
+ const ptr = this.__wbg_ptr;
+ this.__wbg_ptr = 0;
+ RawIslandManagerFinalization.unregister(this);
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_rawislandmanager_free(ptr, 0);
+ }
+ /**
+ * Applies the given JavaScript function to the integer handle of each active rigid-body
+ * managed by this island manager.
+ *
+ * After a short time of inactivity, a rigid-body is automatically deactivated ("asleep") by
+ * the physics engine in order to save computational power. A sleeping rigid-body never moves
+ * unless it is moved manually by the user.
+ *
+ * # Parameters
+ * - `f(handle)`: the function to apply to the integer handle of each active rigid-body managed by this
+ * set. Called as `f(collider)`.
+ * @param {Function} f
+ */
+ forEachActiveRigidBodyHandle(f) {
+ try {
+ wasm.rawislandmanager_forEachActiveRigidBodyHandle(this.__wbg_ptr, addBorrowedObject(f));
+ } finally {
+ heap[stack_pointer++] = undefined;
+ }
+ }
+ constructor() {
+ const ret = wasm.rawislandmanager_new();
+ this.__wbg_ptr = ret >>> 0;
+ RawIslandManagerFinalization.register(this, this.__wbg_ptr, this);
+ return this;
+ }
+}
+
+const RawKinematicCharacterControllerFinalization = (typeof FinalizationRegistry === 'undefined')
+ ? { register: () => {}, unregister: () => {} }
+ : new FinalizationRegistry(ptr => wasm.__wbg_rawkinematiccharactercontroller_free(ptr >>> 0, 1));
+
+export class RawKinematicCharacterController {
+
+ __destroy_into_raw() {
+ const ptr = this.__wbg_ptr;
+ this.__wbg_ptr = 0;
+ RawKinematicCharacterControllerFinalization.unregister(this);
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_rawkinematiccharactercontroller_free(ptr, 0);
+ }
+ /**
+ * @returns {boolean}
+ */
+ slideEnabled() {
+ const ret = wasm.rawkinematiccharactercontroller_slideEnabled(this.__wbg_ptr);
+ return ret !== 0;
+ }
+ /**
+ * @param {number} maxHeight
+ * @param {number} minWidth
+ * @param {boolean} includeDynamicBodies
+ */
+ enableAutostep(maxHeight, minWidth, includeDynamicBodies) {
+ wasm.rawkinematiccharactercontroller_enableAutostep(this.__wbg_ptr, maxHeight, minWidth, includeDynamicBodies);
+ }
+ /**
+ * @returns {boolean}
+ */
+ autostepEnabled() {
+ const ret = wasm.rawkinematiccharactercontroller_autostepEnabled(this.__wbg_ptr);
+ return ret !== 0;
+ }
+ disableAutostep() {
+ wasm.rawkinematiccharactercontroller_disableAutostep(this.__wbg_ptr);
+ }
+ /**
+ * @param {boolean} enabled
+ */
+ setSlideEnabled(enabled) {
+ wasm.rawkinematiccharactercontroller_setSlideEnabled(this.__wbg_ptr, enabled);
+ }
+ /**
+ * @returns {number | undefined}
+ */
+ autostepMinWidth() {
+ const ret = wasm.rawkinematiccharactercontroller_autostepMinWidth(this.__wbg_ptr);
+ return ret === 0x100000001 ? undefined : ret;
+ }
+ /**
+ * @returns {boolean}
+ */
+ computedGrounded() {
+ const ret = wasm.rawkinematiccharactercontroller_computedGrounded(this.__wbg_ptr);
+ return ret !== 0;
+ }
+ /**
+ * @returns {RawVector}
+ */
+ computedMovement() {
+ const ret = wasm.rawkinematiccharactercontroller_computedMovement(this.__wbg_ptr);
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * @returns {number | undefined}
+ */
+ autostepMaxHeight() {
+ const ret = wasm.rawkinematiccharactercontroller_autostepMaxHeight(this.__wbg_ptr);
+ return ret === 0x100000001 ? undefined : ret;
+ }
+ /**
+ * @param {number} i
+ * @param {RawCharacterCollision} collision
+ * @returns {boolean}
+ */
+ computedCollision(i, collision) {
+ _assertClass(collision, RawCharacterCollision);
+ const ret = wasm.rawkinematiccharactercontroller_computedCollision(this.__wbg_ptr, i, collision.__wbg_ptr);
+ return ret !== 0;
+ }
+ /**
+ * @returns {number}
+ */
+ normalNudgeFactor() {
+ const ret = wasm.rawkinematiccharactercontroller_normalNudgeFactor(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * @param {number} distance
+ */
+ enableSnapToGround(distance) {
+ wasm.rawkinematiccharactercontroller_enableSnapToGround(this.__wbg_ptr, distance);
+ }
+ /**
+ * @returns {number}
+ */
+ maxSlopeClimbAngle() {
+ const ret = wasm.rawkinematiccharactercontroller_maxSlopeClimbAngle(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * @returns {number}
+ */
+ minSlopeSlideAngle() {
+ const ret = wasm.rawkinematiccharactercontroller_minSlopeSlideAngle(this.__wbg_ptr);
+ return ret;
+ }
+ disableSnapToGround() {
+ wasm.rawkinematiccharactercontroller_disableSnapToGround(this.__wbg_ptr);
+ }
+ /**
+ * @returns {boolean}
+ */
+ snapToGroundEnabled() {
+ const ret = wasm.rawkinematiccharactercontroller_snapToGroundEnabled(this.__wbg_ptr);
+ return ret !== 0;
+ }
+ /**
+ * @param {number} value
+ */
+ setNormalNudgeFactor(value) {
+ wasm.rawkinematiccharactercontroller_setNormalNudgeFactor(this.__wbg_ptr, value);
+ }
+ /**
+ * @returns {number | undefined}
+ */
+ snapToGroundDistance() {
+ const ret = wasm.rawkinematiccharactercontroller_snapToGroundDistance(this.__wbg_ptr);
+ return ret === 0x100000001 ? undefined : ret;
+ }
+ /**
+ * @returns {number}
+ */
+ numComputedCollisions() {
+ const ret = wasm.rawkinematiccharactercontroller_numComputedCollisions(this.__wbg_ptr);
+ return ret >>> 0;
+ }
+ /**
+ * @param {number} angle
+ */
+ setMaxSlopeClimbAngle(angle) {
+ wasm.rawkinematiccharactercontroller_setMaxSlopeClimbAngle(this.__wbg_ptr, angle);
+ }
+ /**
+ * @param {number} angle
+ */
+ setMinSlopeSlideAngle(angle) {
+ wasm.rawkinematiccharactercontroller_setMinSlopeSlideAngle(this.__wbg_ptr, angle);
+ }
+ /**
+ * @param {number} dt
+ * @param {RawBroadPhase} broad_phase
+ * @param {RawNarrowPhase} narrow_phase
+ * @param {RawRigidBodySet} bodies
+ * @param {RawColliderSet} colliders
+ * @param {number} collider_handle
+ * @param {RawVector} desired_translation_delta
+ * @param {boolean} apply_impulses_to_dynamic_bodies
+ * @param {number | null | undefined} character_mass
+ * @param {number} filter_flags
+ * @param {number | null | undefined} filter_groups
+ * @param {Function} filter_predicate
+ */
+ computeColliderMovement(dt, broad_phase, narrow_phase, bodies, colliders, collider_handle, desired_translation_delta, apply_impulses_to_dynamic_bodies, character_mass, filter_flags, filter_groups, filter_predicate) {
+ try {
+ _assertClass(broad_phase, RawBroadPhase);
+ _assertClass(narrow_phase, RawNarrowPhase);
+ _assertClass(bodies, RawRigidBodySet);
+ _assertClass(colliders, RawColliderSet);
+ _assertClass(desired_translation_delta, RawVector);
+ wasm.rawkinematiccharactercontroller_computeColliderMovement(this.__wbg_ptr, dt, broad_phase.__wbg_ptr, narrow_phase.__wbg_ptr, bodies.__wbg_ptr, colliders.__wbg_ptr, collider_handle, desired_translation_delta.__wbg_ptr, apply_impulses_to_dynamic_bodies, isLikeNone(character_mass) ? 0x100000001 : Math.fround(character_mass), filter_flags, isLikeNone(filter_groups) ? 0x100000001 : (filter_groups) >>> 0, addBorrowedObject(filter_predicate));
+ } finally {
+ heap[stack_pointer++] = undefined;
+ }
+ }
+ /**
+ * @returns {boolean | undefined}
+ */
+ autostepIncludesDynamicBodies() {
+ const ret = wasm.rawkinematiccharactercontroller_autostepIncludesDynamicBodies(this.__wbg_ptr);
+ return ret === 0xFFFFFF ? undefined : ret !== 0;
+ }
+ /**
+ * @returns {RawVector}
+ */
+ up() {
+ const ret = wasm.rawcollidershapecasthit_normal2(this.__wbg_ptr);
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * @param {number} offset
+ */
+ constructor(offset) {
+ const ret = wasm.rawkinematiccharactercontroller_new(offset);
+ this.__wbg_ptr = ret >>> 0;
+ RawKinematicCharacterControllerFinalization.register(this, this.__wbg_ptr, this);
+ return this;
+ }
+ /**
+ * @param {RawVector} vector
+ */
+ setUp(vector) {
+ _assertClass(vector, RawVector);
+ wasm.rawkinematiccharactercontroller_setUp(this.__wbg_ptr, vector.__wbg_ptr);
+ }
+ /**
+ * @returns {number}
+ */
+ offset() {
+ const ret = wasm.rawkinematiccharactercontroller_offset(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * @param {number} value
+ */
+ setOffset(value) {
+ wasm.rawkinematiccharactercontroller_setOffset(this.__wbg_ptr, value);
+ }
+}
+
+const RawMultibodyJointSetFinalization = (typeof FinalizationRegistry === 'undefined')
+ ? { register: () => {}, unregister: () => {} }
+ : new FinalizationRegistry(ptr => wasm.__wbg_rawmultibodyjointset_free(ptr >>> 0, 1));
+
+export class RawMultibodyJointSet {
+
+ static __wrap(ptr) {
+ ptr = ptr >>> 0;
+ const obj = Object.create(RawMultibodyJointSet.prototype);
+ obj.__wbg_ptr = ptr;
+ RawMultibodyJointSetFinalization.register(obj, obj.__wbg_ptr, obj);
+ return obj;
+ }
+
+ __destroy_into_raw() {
+ const ptr = this.__wbg_ptr;
+ this.__wbg_ptr = 0;
+ RawMultibodyJointSetFinalization.unregister(this);
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_rawmultibodyjointset_free(ptr, 0);
+ }
+ /**
+ * The position of the first anchor of this joint.
+ *
+ * The first anchor gives the position of the points application point on the
+ * local frame of the first rigid-body it is attached to.
+ * @param {number} handle
+ * @returns {RawVector}
+ */
+ jointAnchor1(handle) {
+ const ret = wasm.rawmultibodyjointset_jointAnchor1(this.__wbg_ptr, handle);
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * The position of the second anchor of this joint.
+ *
+ * The second anchor gives the position of the points application point on the
+ * local frame of the second rigid-body it is attached to.
+ * @param {number} handle
+ * @returns {RawVector}
+ */
+ jointAnchor2(handle) {
+ const ret = wasm.rawmultibodyjointset_jointAnchor2(this.__wbg_ptr, handle);
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * The angular part of the joint’s local frame relative to the first rigid-body it is attached to.
+ * @param {number} handle
+ * @returns {RawRotation}
+ */
+ jointFrameX1(handle) {
+ const ret = wasm.rawmultibodyjointset_jointFrameX1(this.__wbg_ptr, handle);
+ return RawRotation.__wrap(ret);
+ }
+ /**
+ * The angular part of the joint’s local frame relative to the second rigid-body it is attached to.
+ * @param {number} handle
+ * @returns {RawRotation}
+ */
+ jointFrameX2(handle) {
+ const ret = wasm.rawmultibodyjointset_jointFrameX2(this.__wbg_ptr, handle);
+ return RawRotation.__wrap(ret);
+ }
+ /**
+ * If this is a prismatic joint, returns its upper limit.
+ * @param {number} handle
+ * @param {RawJointAxis} axis
+ * @returns {number}
+ */
+ jointLimitsMax(handle, axis) {
+ const ret = wasm.rawmultibodyjointset_jointLimitsMax(this.__wbg_ptr, handle, axis);
+ return ret;
+ }
+ /**
+ * Return the lower limit along the given joint axis.
+ * @param {number} handle
+ * @param {RawJointAxis} axis
+ * @returns {number}
+ */
+ jointLimitsMin(handle, axis) {
+ const ret = wasm.rawmultibodyjointset_jointLimitsMin(this.__wbg_ptr, handle, axis);
+ return ret;
+ }
+ /**
+ * Are the limits for this joint enabled?
+ * @param {number} handle
+ * @param {RawJointAxis} axis
+ * @returns {boolean}
+ */
+ jointLimitsEnabled(handle, axis) {
+ const ret = wasm.rawmultibodyjointset_jointLimitsEnabled(this.__wbg_ptr, handle, axis);
+ return ret !== 0;
+ }
+ /**
+ * Are contacts between the rigid-bodies attached by this joint enabled?
+ * @param {number} handle
+ * @returns {boolean}
+ */
+ jointContactsEnabled(handle) {
+ const ret = wasm.rawmultibodyjointset_jointContactsEnabled(this.__wbg_ptr, handle);
+ return ret !== 0;
+ }
+ /**
+ * Sets whether contacts are enabled between the rigid-bodies attached by this joint.
+ * @param {number} handle
+ * @param {boolean} enabled
+ */
+ jointSetContactsEnabled(handle, enabled) {
+ wasm.rawmultibodyjointset_jointSetContactsEnabled(this.__wbg_ptr, handle, enabled);
+ }
+ /**
+ * The type of this joint.
+ * @param {number} handle
+ * @returns {RawJointType}
+ */
+ jointType(handle) {
+ const ret = wasm.rawmultibodyjointset_jointType(this.__wbg_ptr, handle);
+ return ret;
+ }
+ /**
+ * @param {RawGenericJoint} params
+ * @param {number} parent1
+ * @param {number} parent2
+ * @param {boolean} wakeUp
+ * @returns {number}
+ */
+ createJoint(params, parent1, parent2, wakeUp) {
+ _assertClass(params, RawGenericJoint);
+ const ret = wasm.rawmultibodyjointset_createJoint(this.__wbg_ptr, params.__wbg_ptr, parent1, parent2, wakeUp);
+ return ret;
+ }
+ /**
+ * Applies the given JavaScript function to the integer handle of each joint managed by this physics world.
+ *
+ * # Parameters
+ * - `f(handle)`: the function to apply to the integer handle of each joint managed by this set. Called as `f(collider)`.
+ * @param {Function} f
+ */
+ forEachJointHandle(f) {
+ try {
+ wasm.rawmultibodyjointset_forEachJointHandle(this.__wbg_ptr, addBorrowedObject(f));
+ } finally {
+ heap[stack_pointer++] = undefined;
+ }
+ }
+ /**
+ * Applies the given JavaScript function to the integer handle of each joint attached to the given rigid-body.
+ *
+ * # Parameters
+ * - `f(handle)`: the function to apply to the integer handle of each joint attached to the rigid-body. Called as `f(collider)`.
+ * @param {number} body
+ * @param {Function} f
+ */
+ forEachJointAttachedToRigidBody(body, f) {
+ try {
+ wasm.rawmultibodyjointset_forEachJointAttachedToRigidBody(this.__wbg_ptr, body, addBorrowedObject(f));
+ } finally {
+ heap[stack_pointer++] = undefined;
+ }
+ }
+ constructor() {
+ const ret = wasm.rawmultibodyjointset_new();
+ this.__wbg_ptr = ret >>> 0;
+ RawMultibodyJointSetFinalization.register(this, this.__wbg_ptr, this);
+ return this;
+ }
+ /**
+ * @param {number} handle
+ * @param {boolean} wakeUp
+ */
+ remove(handle, wakeUp) {
+ wasm.rawmultibodyjointset_remove(this.__wbg_ptr, handle, wakeUp);
+ }
+ /**
+ * @param {number} handle
+ * @returns {boolean}
+ */
+ contains(handle) {
+ const ret = wasm.rawmultibodyjointset_contains(this.__wbg_ptr, handle);
+ return ret !== 0;
+ }
+}
+
+const RawNarrowPhaseFinalization = (typeof FinalizationRegistry === 'undefined')
+ ? { register: () => {}, unregister: () => {} }
+ : new FinalizationRegistry(ptr => wasm.__wbg_rawnarrowphase_free(ptr >>> 0, 1));
+
+export class RawNarrowPhase {
+
+ static __wrap(ptr) {
+ ptr = ptr >>> 0;
+ const obj = Object.create(RawNarrowPhase.prototype);
+ obj.__wbg_ptr = ptr;
+ RawNarrowPhaseFinalization.register(obj, obj.__wbg_ptr, obj);
+ return obj;
+ }
+
+ __destroy_into_raw() {
+ const ptr = this.__wbg_ptr;
+ this.__wbg_ptr = 0;
+ RawNarrowPhaseFinalization.unregister(this);
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_rawnarrowphase_free(ptr, 0);
+ }
+ /**
+ * @param {number} handle1
+ * @param {number} handle2
+ * @returns {RawContactPair | undefined}
+ */
+ contact_pair(handle1, handle2) {
+ const ret = wasm.rawnarrowphase_contact_pair(this.__wbg_ptr, handle1, handle2);
+ return ret === 0 ? undefined : RawContactPair.__wrap(ret);
+ }
+ /**
+ * @param {number} handle1
+ * @param {number} handle2
+ * @returns {boolean}
+ */
+ intersection_pair(handle1, handle2) {
+ const ret = wasm.rawnarrowphase_intersection_pair(this.__wbg_ptr, handle1, handle2);
+ return ret !== 0;
+ }
+ /**
+ * @param {number} handle1
+ * @param {Function} f
+ */
+ contact_pairs_with(handle1, f) {
+ wasm.rawnarrowphase_contact_pairs_with(this.__wbg_ptr, handle1, addHeapObject(f));
+ }
+ /**
+ * @param {number} handle1
+ * @param {Function} f
+ */
+ intersection_pairs_with(handle1, f) {
+ wasm.rawnarrowphase_intersection_pairs_with(this.__wbg_ptr, handle1, addHeapObject(f));
+ }
+ constructor() {
+ const ret = wasm.rawnarrowphase_new();
+ this.__wbg_ptr = ret >>> 0;
+ RawNarrowPhaseFinalization.register(this, this.__wbg_ptr, this);
+ return this;
+ }
+}
+
+const RawPhysicsPipelineFinalization = (typeof FinalizationRegistry === 'undefined')
+ ? { register: () => {}, unregister: () => {} }
+ : new FinalizationRegistry(ptr => wasm.__wbg_rawphysicspipeline_free(ptr >>> 0, 1));
+
+export class RawPhysicsPipeline {
+
+ __destroy_into_raw() {
+ const ptr = this.__wbg_ptr;
+ this.__wbg_ptr = 0;
+ RawPhysicsPipelineFinalization.unregister(this);
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_rawphysicspipeline_free(ptr, 0);
+ }
+ /**
+ * @returns {number}
+ */
+ timing_ccd() {
+ const ret = wasm.rawphysicspipeline_timing_ccd(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * @returns {number}
+ */
+ timing_step() {
+ const ret = wasm.rawphysicspipeline_timing_step(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * @returns {number}
+ */
+ timing_solver() {
+ const ret = wasm.rawphysicspipeline_timing_solver(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * @param {RawVector} gravity
+ * @param {RawIntegrationParameters} integrationParameters
+ * @param {RawIslandManager} islands
+ * @param {RawBroadPhase} broadPhase
+ * @param {RawNarrowPhase} narrowPhase
+ * @param {RawRigidBodySet} bodies
+ * @param {RawColliderSet} colliders
+ * @param {RawImpulseJointSet} joints
+ * @param {RawMultibodyJointSet} articulations
+ * @param {RawCCDSolver} ccd_solver
+ * @param {RawEventQueue} eventQueue
+ * @param {object} hookObject
+ * @param {Function} hookFilterContactPair
+ * @param {Function} hookFilterIntersectionPair
+ */
+ stepWithEvents(gravity, integrationParameters, islands, broadPhase, narrowPhase, bodies, colliders, joints, articulations, ccd_solver, eventQueue, hookObject, hookFilterContactPair, hookFilterIntersectionPair) {
+ _assertClass(gravity, RawVector);
+ _assertClass(integrationParameters, RawIntegrationParameters);
+ _assertClass(islands, RawIslandManager);
+ _assertClass(broadPhase, RawBroadPhase);
+ _assertClass(narrowPhase, RawNarrowPhase);
+ _assertClass(bodies, RawRigidBodySet);
+ _assertClass(colliders, RawColliderSet);
+ _assertClass(joints, RawImpulseJointSet);
+ _assertClass(articulations, RawMultibodyJointSet);
+ _assertClass(ccd_solver, RawCCDSolver);
+ _assertClass(eventQueue, RawEventQueue);
+ wasm.rawphysicspipeline_stepWithEvents(this.__wbg_ptr, gravity.__wbg_ptr, integrationParameters.__wbg_ptr, islands.__wbg_ptr, broadPhase.__wbg_ptr, narrowPhase.__wbg_ptr, bodies.__wbg_ptr, colliders.__wbg_ptr, joints.__wbg_ptr, articulations.__wbg_ptr, ccd_solver.__wbg_ptr, eventQueue.__wbg_ptr, addHeapObject(hookObject), addHeapObject(hookFilterContactPair), addHeapObject(hookFilterIntersectionPair));
+ }
+ /**
+ * @returns {number}
+ */
+ timing_ccd_solver() {
+ const ret = wasm.rawphysicspipeline_timing_ccd_solver(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * @returns {number}
+ */
+ timing_broad_phase() {
+ const ret = wasm.rawphysicspipeline_timing_broad_phase(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * @returns {boolean}
+ */
+ is_profiler_enabled() {
+ const ret = wasm.rawphysicspipeline_is_profiler_enabled(this.__wbg_ptr);
+ return ret !== 0;
+ }
+ /**
+ * @returns {number}
+ */
+ timing_narrow_phase() {
+ const ret = wasm.rawphysicspipeline_timing_narrow_phase(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * @returns {number}
+ */
+ timing_user_changes() {
+ const ret = wasm.rawphysicspipeline_timing_user_changes(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * @param {boolean} enabled
+ */
+ set_profiler_enabled(enabled) {
+ wasm.rawphysicspipeline_set_profiler_enabled(this.__wbg_ptr, enabled);
+ }
+ /**
+ * @returns {number}
+ */
+ timing_ccd_broad_phase() {
+ const ret = wasm.rawphysicspipeline_timing_ccd_broad_phase(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * @returns {number}
+ */
+ timing_velocity_update() {
+ const ret = wasm.rawphysicspipeline_timing_velocity_update(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * @returns {number}
+ */
+ timing_ccd_narrow_phase() {
+ const ret = wasm.rawphysicspipeline_timing_ccd_narrow_phase(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * @returns {number}
+ */
+ timing_velocity_assembly() {
+ const ret = wasm.rawphysicspipeline_timing_velocity_assembly(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * @returns {number}
+ */
+ timing_velocity_writeback() {
+ const ret = wasm.rawphysicspipeline_timing_velocity_writeback(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * @returns {number}
+ */
+ timing_ccd_toi_computation() {
+ const ret = wasm.rawphysicspipeline_timing_ccd_toi_computation(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * @returns {number}
+ */
+ timing_collision_detection() {
+ const ret = wasm.rawphysicspipeline_timing_collision_detection(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * @returns {number}
+ */
+ timing_island_construction() {
+ const ret = wasm.rawphysicspipeline_timing_island_construction(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * @returns {number}
+ */
+ timing_velocity_resolution() {
+ const ret = wasm.rawphysicspipeline_timing_velocity_resolution(this.__wbg_ptr);
+ return ret;
+ }
+ constructor() {
+ const ret = wasm.rawphysicspipeline_new();
+ this.__wbg_ptr = ret >>> 0;
+ RawPhysicsPipelineFinalization.register(this, this.__wbg_ptr, this);
+ return this;
+ }
+ /**
+ * @param {RawVector} gravity
+ * @param {RawIntegrationParameters} integrationParameters
+ * @param {RawIslandManager} islands
+ * @param {RawBroadPhase} broadPhase
+ * @param {RawNarrowPhase} narrowPhase
+ * @param {RawRigidBodySet} bodies
+ * @param {RawColliderSet} colliders
+ * @param {RawImpulseJointSet} joints
+ * @param {RawMultibodyJointSet} articulations
+ * @param {RawCCDSolver} ccd_solver
+ */
+ step(gravity, integrationParameters, islands, broadPhase, narrowPhase, bodies, colliders, joints, articulations, ccd_solver) {
+ _assertClass(gravity, RawVector);
+ _assertClass(integrationParameters, RawIntegrationParameters);
+ _assertClass(islands, RawIslandManager);
+ _assertClass(broadPhase, RawBroadPhase);
+ _assertClass(narrowPhase, RawNarrowPhase);
+ _assertClass(bodies, RawRigidBodySet);
+ _assertClass(colliders, RawColliderSet);
+ _assertClass(joints, RawImpulseJointSet);
+ _assertClass(articulations, RawMultibodyJointSet);
+ _assertClass(ccd_solver, RawCCDSolver);
+ wasm.rawphysicspipeline_step(this.__wbg_ptr, gravity.__wbg_ptr, integrationParameters.__wbg_ptr, islands.__wbg_ptr, broadPhase.__wbg_ptr, narrowPhase.__wbg_ptr, bodies.__wbg_ptr, colliders.__wbg_ptr, joints.__wbg_ptr, articulations.__wbg_ptr, ccd_solver.__wbg_ptr);
+ }
+}
+
+const RawPidControllerFinalization = (typeof FinalizationRegistry === 'undefined')
+ ? { register: () => {}, unregister: () => {} }
+ : new FinalizationRegistry(ptr => wasm.__wbg_rawpidcontroller_free(ptr >>> 0, 1));
+
+export class RawPidController {
+
+ __destroy_into_raw() {
+ const ptr = this.__wbg_ptr;
+ this.__wbg_ptr = 0;
+ RawPidControllerFinalization.unregister(this);
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_rawpidcontroller_free(ptr, 0);
+ }
+ /**
+ * @param {number} axes_mask
+ */
+ set_axes_mask(axes_mask) {
+ wasm.rawpidcontroller_set_axes_mask(this.__wbg_ptr, axes_mask);
+ }
+ reset_integrals() {
+ wasm.rawpidcontroller_reset_integrals(this.__wbg_ptr);
+ }
+ /**
+ * @param {number} dt
+ * @param {RawRigidBodySet} bodies
+ * @param {number} rb_handle
+ * @param {RawVector} target_translation
+ * @param {RawVector} target_linvel
+ * @returns {RawVector}
+ */
+ linear_correction(dt, bodies, rb_handle, target_translation, target_linvel) {
+ _assertClass(bodies, RawRigidBodySet);
+ _assertClass(target_translation, RawVector);
+ _assertClass(target_linvel, RawVector);
+ const ret = wasm.rawpidcontroller_linear_correction(this.__wbg_ptr, dt, bodies.__wbg_ptr, rb_handle, target_translation.__wbg_ptr, target_linvel.__wbg_ptr);
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * @param {number} dt
+ * @param {RawRigidBodySet} bodies
+ * @param {number} rb_handle
+ * @param {number} target_rotation
+ * @param {number} target_angvel
+ * @returns {number}
+ */
+ angular_correction(dt, bodies, rb_handle, target_rotation, target_angvel) {
+ _assertClass(bodies, RawRigidBodySet);
+ const ret = wasm.rawpidcontroller_angular_correction(this.__wbg_ptr, dt, bodies.__wbg_ptr, rb_handle, target_rotation, target_angvel);
+ return ret;
+ }
+ /**
+ * @param {number} dt
+ * @param {RawRigidBodySet} bodies
+ * @param {number} rb_handle
+ * @param {RawVector} target_translation
+ * @param {RawVector} target_linvel
+ */
+ apply_linear_correction(dt, bodies, rb_handle, target_translation, target_linvel) {
+ _assertClass(bodies, RawRigidBodySet);
+ _assertClass(target_translation, RawVector);
+ _assertClass(target_linvel, RawVector);
+ wasm.rawpidcontroller_apply_linear_correction(this.__wbg_ptr, dt, bodies.__wbg_ptr, rb_handle, target_translation.__wbg_ptr, target_linvel.__wbg_ptr);
+ }
+ /**
+ * @param {number} dt
+ * @param {RawRigidBodySet} bodies
+ * @param {number} rb_handle
+ * @param {number} target_rotation
+ * @param {number} target_angvel
+ */
+ apply_angular_correction(dt, bodies, rb_handle, target_rotation, target_angvel) {
+ _assertClass(bodies, RawRigidBodySet);
+ wasm.rawpidcontroller_apply_angular_correction(this.__wbg_ptr, dt, bodies.__wbg_ptr, rb_handle, target_rotation, target_angvel);
+ }
+ /**
+ * @param {number} kp
+ * @param {number} ki
+ * @param {number} kd
+ * @param {number} axes_mask
+ */
+ constructor(kp, ki, kd, axes_mask) {
+ const ret = wasm.rawpidcontroller_new(kp, ki, kd, axes_mask);
+ this.__wbg_ptr = ret >>> 0;
+ RawPidControllerFinalization.register(this, this.__wbg_ptr, this);
+ return this;
+ }
+ /**
+ * @param {number} kd
+ * @param {number} axes
+ */
+ set_kd(kd, axes) {
+ wasm.rawpidcontroller_set_kd(this.__wbg_ptr, kd, axes);
+ }
+ /**
+ * @param {number} ki
+ * @param {number} axes
+ */
+ set_ki(ki, axes) {
+ wasm.rawpidcontroller_set_ki(this.__wbg_ptr, ki, axes);
+ }
+ /**
+ * @param {number} kp
+ * @param {number} axes
+ */
+ set_kp(kp, axes) {
+ wasm.rawpidcontroller_set_kp(this.__wbg_ptr, kp, axes);
+ }
+}
+
+const RawPointColliderProjectionFinalization = (typeof FinalizationRegistry === 'undefined')
+ ? { register: () => {}, unregister: () => {} }
+ : new FinalizationRegistry(ptr => wasm.__wbg_rawpointcolliderprojection_free(ptr >>> 0, 1));
+
+export class RawPointColliderProjection {
+
+ static __wrap(ptr) {
+ ptr = ptr >>> 0;
+ const obj = Object.create(RawPointColliderProjection.prototype);
+ obj.__wbg_ptr = ptr;
+ RawPointColliderProjectionFinalization.register(obj, obj.__wbg_ptr, obj);
+ return obj;
+ }
+
+ __destroy_into_raw() {
+ const ptr = this.__wbg_ptr;
+ this.__wbg_ptr = 0;
+ RawPointColliderProjectionFinalization.unregister(this);
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_rawpointcolliderprojection_free(ptr, 0);
+ }
+ /**
+ * @returns {RawFeatureType}
+ */
+ featureType() {
+ const ret = wasm.rawpointcolliderprojection_featureType(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * @returns {number}
+ */
+ colliderHandle() {
+ const ret = wasm.rawpointcolliderprojection_colliderHandle(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * @returns {RawVector}
+ */
+ point() {
+ const ret = wasm.rawpointcolliderprojection_point(this.__wbg_ptr);
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * @returns {boolean}
+ */
+ isInside() {
+ const ret = wasm.rawpointcolliderprojection_isInside(this.__wbg_ptr);
+ return ret !== 0;
+ }
+ /**
+ * @returns {number | undefined}
+ */
+ featureId() {
+ const ret = wasm.rawpointcolliderprojection_featureId(this.__wbg_ptr);
+ return ret === 0x100000001 ? undefined : ret;
+ }
+}
+
+const RawPointProjectionFinalization = (typeof FinalizationRegistry === 'undefined')
+ ? { register: () => {}, unregister: () => {} }
+ : new FinalizationRegistry(ptr => wasm.__wbg_rawpointprojection_free(ptr >>> 0, 1));
+
+export class RawPointProjection {
+
+ static __wrap(ptr) {
+ ptr = ptr >>> 0;
+ const obj = Object.create(RawPointProjection.prototype);
+ obj.__wbg_ptr = ptr;
+ RawPointProjectionFinalization.register(obj, obj.__wbg_ptr, obj);
+ return obj;
+ }
+
+ __destroy_into_raw() {
+ const ptr = this.__wbg_ptr;
+ this.__wbg_ptr = 0;
+ RawPointProjectionFinalization.unregister(this);
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_rawpointprojection_free(ptr, 0);
+ }
+ /**
+ * @returns {RawVector}
+ */
+ point() {
+ const ret = wasm.rawpointprojection_point(this.__wbg_ptr);
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * @returns {boolean}
+ */
+ isInside() {
+ const ret = wasm.rawpointprojection_isInside(this.__wbg_ptr);
+ return ret !== 0;
+ }
+}
+
+const RawRayColliderHitFinalization = (typeof FinalizationRegistry === 'undefined')
+ ? { register: () => {}, unregister: () => {} }
+ : new FinalizationRegistry(ptr => wasm.__wbg_rawraycolliderhit_free(ptr >>> 0, 1));
+
+export class RawRayColliderHit {
+
+ static __wrap(ptr) {
+ ptr = ptr >>> 0;
+ const obj = Object.create(RawRayColliderHit.prototype);
+ obj.__wbg_ptr = ptr;
+ RawRayColliderHitFinalization.register(obj, obj.__wbg_ptr, obj);
+ return obj;
+ }
+
+ __destroy_into_raw() {
+ const ptr = this.__wbg_ptr;
+ this.__wbg_ptr = 0;
+ RawRayColliderHitFinalization.unregister(this);
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_rawraycolliderhit_free(ptr, 0);
+ }
+ /**
+ * @returns {number}
+ */
+ timeOfImpact() {
+ const ret = wasm.rawcollidershapecasthit_time_of_impact(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * @returns {number}
+ */
+ colliderHandle() {
+ const ret = wasm.rawcollidershapecasthit_colliderHandle(this.__wbg_ptr);
+ return ret;
+ }
+}
+
+const RawRayColliderIntersectionFinalization = (typeof FinalizationRegistry === 'undefined')
+ ? { register: () => {}, unregister: () => {} }
+ : new FinalizationRegistry(ptr => wasm.__wbg_rawraycolliderintersection_free(ptr >>> 0, 1));
+
+export class RawRayColliderIntersection {
+
+ static __wrap(ptr) {
+ ptr = ptr >>> 0;
+ const obj = Object.create(RawRayColliderIntersection.prototype);
+ obj.__wbg_ptr = ptr;
+ RawRayColliderIntersectionFinalization.register(obj, obj.__wbg_ptr, obj);
+ return obj;
+ }
+
+ __destroy_into_raw() {
+ const ptr = this.__wbg_ptr;
+ this.__wbg_ptr = 0;
+ RawRayColliderIntersectionFinalization.unregister(this);
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_rawraycolliderintersection_free(ptr, 0);
+ }
+ /**
+ * @returns {RawFeatureType}
+ */
+ featureType() {
+ const ret = wasm.rawpointcolliderprojection_featureType(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * @returns {number}
+ */
+ colliderHandle() {
+ const ret = wasm.rawpointcolliderprojection_colliderHandle(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * @returns {number}
+ */
+ time_of_impact() {
+ const ret = wasm.rawcollidershapecasthit_time_of_impact(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * @returns {RawVector}
+ */
+ normal() {
+ const ret = wasm.rawcollidershapecasthit_witness1(this.__wbg_ptr);
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * @returns {number | undefined}
+ */
+ featureId() {
+ const ret = wasm.rawpointcolliderprojection_featureId(this.__wbg_ptr);
+ return ret === 0x100000001 ? undefined : ret;
+ }
+}
+
+const RawRayIntersectionFinalization = (typeof FinalizationRegistry === 'undefined')
+ ? { register: () => {}, unregister: () => {} }
+ : new FinalizationRegistry(ptr => wasm.__wbg_rawrayintersection_free(ptr >>> 0, 1));
+
+export class RawRayIntersection {
+
+ static __wrap(ptr) {
+ ptr = ptr >>> 0;
+ const obj = Object.create(RawRayIntersection.prototype);
+ obj.__wbg_ptr = ptr;
+ RawRayIntersectionFinalization.register(obj, obj.__wbg_ptr, obj);
+ return obj;
+ }
+
+ __destroy_into_raw() {
+ const ptr = this.__wbg_ptr;
+ this.__wbg_ptr = 0;
+ RawRayIntersectionFinalization.unregister(this);
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_rawrayintersection_free(ptr, 0);
+ }
+ /**
+ * @returns {RawFeatureType}
+ */
+ featureType() {
+ const ret = wasm.rawpointcolliderprojection_featureType(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * @returns {number}
+ */
+ time_of_impact() {
+ const ret = wasm.rawcollidershapecasthit_time_of_impact(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * @returns {RawVector}
+ */
+ normal() {
+ const ret = wasm.rawcollidershapecasthit_witness1(this.__wbg_ptr);
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * @returns {number | undefined}
+ */
+ featureId() {
+ const ret = wasm.rawpointcolliderprojection_featureId(this.__wbg_ptr);
+ return ret === 0x100000001 ? undefined : ret;
+ }
+}
+
+const RawRigidBodySetFinalization = (typeof FinalizationRegistry === 'undefined')
+ ? { register: () => {}, unregister: () => {} }
+ : new FinalizationRegistry(ptr => wasm.__wbg_rawrigidbodyset_free(ptr >>> 0, 1));
+
+export class RawRigidBodySet {
+
+ static __wrap(ptr) {
+ ptr = ptr >>> 0;
+ const obj = Object.create(RawRigidBodySet.prototype);
+ obj.__wbg_ptr = ptr;
+ RawRigidBodySetFinalization.register(obj, obj.__wbg_ptr, obj);
+ return obj;
+ }
+
+ __destroy_into_raw() {
+ const ptr = this.__wbg_ptr;
+ this.__wbg_ptr = 0;
+ RawRigidBodySetFinalization.unregister(this);
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_rawrigidbodyset_free(ptr, 0);
+ }
+ /**
+ * Adds a force at the center-of-mass of this rigid-body.
+ *
+ * # Parameters
+ * - `force`: the world-space force to apply on the rigid-body.
+ * - `wakeUp`: should the rigid-body be automatically woken-up?
+ * @param {number} handle
+ * @param {RawVector} force
+ * @param {boolean} wakeUp
+ */
+ rbAddForce(handle, force, wakeUp) {
+ _assertClass(force, RawVector);
+ wasm.rawrigidbodyset_rbAddForce(this.__wbg_ptr, handle, force.__wbg_ptr, wakeUp);
+ }
+ /**
+ * The status of this rigid-body: fixed, dynamic, or kinematic.
+ * @param {number} handle
+ * @returns {RawRigidBodyType}
+ */
+ rbBodyType(handle) {
+ const ret = wasm.rawrigidbodyset_rbBodyType(this.__wbg_ptr, handle);
+ return ret;
+ }
+ /**
+ * Retrieves the `i-th` collider attached to this rigid-body.
+ *
+ * # Parameters
+ * - `at`: The index of the collider to retrieve. Must be a number in `[0, this.numColliders()[`.
+ * This index is **not** the same as the unique identifier of the collider.
+ * @param {number} handle
+ * @param {number} at
+ * @returns {number}
+ */
+ rbCollider(handle, at) {
+ const ret = wasm.rawrigidbodyset_rbCollider(this.__wbg_ptr, handle, at);
+ return ret;
+ }
+ /**
+ * Is the velocity of this rigid-body not zero?
+ * @param {number} handle
+ * @returns {boolean}
+ */
+ rbIsMoving(handle) {
+ const ret = wasm.rawrigidbodyset_rbIsMoving(this.__wbg_ptr, handle);
+ return ret !== 0;
+ }
+ /**
+ * The center of mass of a rigid-body expressed in its local-space.
+ * @param {number} handle
+ * @returns {RawVector}
+ */
+ rbLocalCom(handle) {
+ const ret = wasm.rawrigidbodyset_rbLocalCom(this.__wbg_ptr, handle);
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * The world-space orientation of this rigid-body.
+ * @param {number} handle
+ * @returns {RawRotation}
+ */
+ rbRotation(handle) {
+ const ret = wasm.rawrigidbodyset_rbRotation(this.__wbg_ptr, handle);
+ return RawRotation.__wrap(ret);
+ }
+ /**
+ * An arbitrary user-defined 32-bit integer
+ * @param {number} handle
+ * @returns {number}
+ */
+ rbUserData(handle) {
+ const ret = wasm.rawrigidbodyset_rbUserData(this.__wbg_ptr, handle);
+ return ret >>> 0;
+ }
+ /**
+ * The world-space center of mass of the rigid-body.
+ * @param {number} handle
+ * @returns {RawVector}
+ */
+ rbWorldCom(handle) {
+ const ret = wasm.rawrigidbodyset_rbWorldCom(this.__wbg_ptr, handle);
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * Adds a torque at the center-of-mass of this rigid-body.
+ *
+ * # Parameters
+ * - `torque`: the torque to apply on the rigid-body.
+ * - `wakeUp`: should the rigid-body be automatically woken-up?
+ * @param {number} handle
+ * @param {number} torque
+ * @param {boolean} wakeUp
+ */
+ rbAddTorque(handle, torque, wakeUp) {
+ wasm.rawrigidbodyset_rbAddTorque(this.__wbg_ptr, handle, torque, wakeUp);
+ }
+ /**
+ * @param {number} handle
+ * @param {boolean} enabled
+ */
+ rbEnableCcd(handle, enabled) {
+ wasm.rawrigidbodyset_rbEnableCcd(this.__wbg_ptr, handle, enabled);
+ }
+ /**
+ * Is this rigid-body dynamic?
+ * @param {number} handle
+ * @returns {boolean}
+ */
+ rbIsDynamic(handle) {
+ const ret = wasm.rawrigidbodyset_rbIsDynamic(this.__wbg_ptr, handle);
+ return ret !== 0;
+ }
+ /**
+ * @param {number} handle
+ * @returns {boolean}
+ */
+ rbIsEnabled(handle) {
+ const ret = wasm.rawrigidbodyset_rbIsEnabled(this.__wbg_ptr, handle);
+ return ret !== 0;
+ }
+ /**
+ * Sets the angular velocity of this rigid-body.
+ * @param {number} handle
+ * @param {number} angvel
+ * @param {boolean} wakeUp
+ */
+ rbSetAngvel(handle, angvel, wakeUp) {
+ wasm.rawrigidbodyset_rbSetAngvel(this.__wbg_ptr, handle, angvel, wakeUp);
+ }
+ /**
+ * Sets the linear velocity of this rigid-body.
+ * @param {number} handle
+ * @param {RawVector} linvel
+ * @param {boolean} wakeUp
+ */
+ rbSetLinvel(handle, linvel, wakeUp) {
+ _assertClass(linvel, RawVector);
+ wasm.rawrigidbodyset_rbSetLinvel(this.__wbg_ptr, handle, linvel.__wbg_ptr, wakeUp);
+ }
+ /**
+ * Retrieves the constant force(s) the user added to this rigid-body.
+ * Returns zero if the rigid-body is not dynamic.
+ * @param {number} handle
+ * @returns {RawVector}
+ */
+ rbUserForce(handle) {
+ const ret = wasm.rawrigidbodyset_rbUserForce(this.__wbg_ptr, handle);
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * Is this rigid-body sleeping?
+ * @param {number} handle
+ * @returns {boolean}
+ */
+ rbIsSleeping(handle) {
+ const ret = wasm.rawrigidbodyset_rbIsSleeping(this.__wbg_ptr, handle);
+ return ret !== 0;
+ }
+ /**
+ * @param {number} handle
+ * @param {boolean} enabled
+ */
+ rbSetEnabled(handle, enabled) {
+ wasm.rawrigidbodyset_rbSetEnabled(this.__wbg_ptr, handle, enabled);
+ }
+ /**
+ * Retrieves the constant torque(s) the user added to this rigid-body.
+ * Returns zero if the rigid-body is not dynamic.
+ * @param {number} handle
+ * @returns {number}
+ */
+ rbUserTorque(handle) {
+ const ret = wasm.rawrigidbodyset_rbUserTorque(this.__wbg_ptr, handle);
+ return ret;
+ }
+ /**
+ * Is this rigid-body kinematic?
+ * @param {number} handle
+ * @returns {boolean}
+ */
+ rbIsKinematic(handle) {
+ const ret = wasm.rawrigidbodyset_rbIsKinematic(this.__wbg_ptr, handle);
+ return ret !== 0;
+ }
+ /**
+ * Resets to zero all user-added forces added to this rigid-body.
+ * @param {number} handle
+ * @param {boolean} wakeUp
+ */
+ rbResetForces(handle, wakeUp) {
+ wasm.rawrigidbodyset_rbResetForces(this.__wbg_ptr, handle, wakeUp);
+ }
+ /**
+ * Set a new status for this rigid-body: fixed, dynamic, or kinematic.
+ * @param {number} handle
+ * @param {RawRigidBodyType} status
+ * @param {boolean} wake_up
+ */
+ rbSetBodyType(handle, status, wake_up) {
+ wasm.rawrigidbodyset_rbSetBodyType(this.__wbg_ptr, handle, status, wake_up);
+ }
+ /**
+ * Sets the rotation angle of this rigid-body.
+ *
+ * # Parameters
+ * - `angle`: the rotation angle, in radians.
+ * - `wakeUp`: forces the rigid-body to wake-up so it is properly affected by forces if it
+ * wasn't moving before modifying its position.
+ * @param {number} handle
+ * @param {number} angle
+ * @param {boolean} wakeUp
+ */
+ rbSetRotation(handle, angle, wakeUp) {
+ wasm.rawrigidbodyset_rbSetRotation(this.__wbg_ptr, handle, angle, wakeUp);
+ }
+ /**
+ * Sets the user-defined 32-bit integer of this rigid-body.
+ *
+ * # Parameters
+ * - `data`: an arbitrary user-defined 32-bit integer.
+ * @param {number} handle
+ * @param {number} data
+ */
+ rbSetUserData(handle, data) {
+ wasm.rawrigidbodyset_rbSetUserData(this.__wbg_ptr, handle, data);
+ }
+ /**
+ * The world-space translation of this rigid-body.
+ * @param {number} handle
+ * @returns {RawVector}
+ */
+ rbTranslation(handle) {
+ const ret = wasm.rawrigidbodyset_rbTranslation(this.__wbg_ptr, handle);
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * Applies an impulse at the center-of-mass of this rigid-body.
+ *
+ * # Parameters
+ * - `impulse`: the world-space impulse to apply on the rigid-body.
+ * - `wakeUp`: should the rigid-body be automatically woken-up?
+ * @param {number} handle
+ * @param {RawVector} impulse
+ * @param {boolean} wakeUp
+ */
+ rbApplyImpulse(handle, impulse, wakeUp) {
+ _assertClass(impulse, RawVector);
+ wasm.rawrigidbodyset_rbApplyImpulse(this.__wbg_ptr, handle, impulse.__wbg_ptr, wakeUp);
+ }
+ /**
+ * @param {number} handle
+ * @returns {number}
+ */
+ rbGravityScale(handle) {
+ const ret = wasm.rawrigidbodyset_rbGravityScale(this.__wbg_ptr, handle);
+ return ret;
+ }
+ /**
+ * Is Continuous Collision Detection enabled for this rigid-body?
+ * @param {number} handle
+ * @returns {boolean}
+ */
+ rbIsCcdEnabled(handle) {
+ const ret = wasm.rawrigidbodyset_rbIsCcdEnabled(this.__wbg_ptr, handle);
+ return ret !== 0;
+ }
+ /**
+ * The world-space predicted orientation of this rigid-body.
+ *
+ * If this rigid-body is kinematic this value is set by the `setNextKinematicRotation`
+ * method and is used for estimating the kinematic body velocity at the next timestep.
+ * For non-kinematic bodies, this value is currently unspecified.
+ * @param {number} handle
+ * @returns {RawRotation}
+ */
+ rbNextRotation(handle) {
+ const ret = wasm.rawrigidbodyset_rbNextRotation(this.__wbg_ptr, handle);
+ return RawRotation.__wrap(ret);
+ }
+ /**
+ * The number of colliders attached to this rigid-body.
+ * @param {number} handle
+ * @returns {number}
+ */
+ rbNumColliders(handle) {
+ const ret = wasm.rawrigidbodyset_rbNumColliders(this.__wbg_ptr, handle);
+ return ret >>> 0;
+ }
+ /**
+ * Resets to zero all user-added torques added to this rigid-body.
+ * @param {number} handle
+ * @param {boolean} wakeUp
+ */
+ rbResetTorques(handle, wakeUp) {
+ wasm.rawrigidbodyset_rbResetTorques(this.__wbg_ptr, handle, wakeUp);
+ }
+ /**
+ * The linear damping coefficient of this rigid-body.
+ * @param {number} handle
+ * @returns {number}
+ */
+ rbLinearDamping(handle) {
+ const ret = wasm.rawrigidbodyset_rbLinearDamping(this.__wbg_ptr, handle);
+ return ret;
+ }
+ /**
+ * @param {number} handle
+ * @param {boolean} locked
+ * @param {boolean} wake_up
+ */
+ rbLockRotations(handle, locked, wake_up) {
+ wasm.rawrigidbodyset_rbLockRotations(this.__wbg_ptr, handle, locked, wake_up);
+ }
+ /**
+ * The angular damping coefficient of this rigid-body.
+ * @param {number} handle
+ * @returns {number}
+ */
+ rbAngularDamping(handle) {
+ const ret = wasm.rawrigidbodyset_rbAngularDamping(this.__wbg_ptr, handle);
+ return ret;
+ }
+ /**
+ * @param {number} handle
+ * @returns {number}
+ */
+ rbDominanceGroup(handle) {
+ const ret = wasm.rawrigidbodyset_rbDominanceGroup(this.__wbg_ptr, handle);
+ return ret;
+ }
+ /**
+ * Sets the translation of this rigid-body.
+ *
+ * # Parameters
+ * - `x`: the world-space position of the rigid-body along the `x` axis.
+ * - `y`: the world-space position of the rigid-body along the `y` axis.
+ * - `wakeUp`: forces the rigid-body to wake-up so it is properly affected by forces if it
+ * wasn't moving before modifying its position.
+ * @param {number} handle
+ * @param {number} x
+ * @param {number} y
+ * @param {boolean} wakeUp
+ */
+ rbSetTranslation(handle, x, y, wakeUp) {
+ wasm.rawrigidbodyset_rbSetTranslation(this.__wbg_ptr, handle, x, y, wakeUp);
+ }
+ /**
+ * Adds a force at the given world-space point of this rigid-body.
+ *
+ * # Parameters
+ * - `force`: the world-space force to apply on the rigid-body.
+ * - `point`: the world-space point where the impulse is to be applied on the rigid-body.
+ * - `wakeUp`: should the rigid-body be automatically woken-up?
+ * @param {number} handle
+ * @param {RawVector} force
+ * @param {RawVector} point
+ * @param {boolean} wakeUp
+ */
+ rbAddForceAtPoint(handle, force, point, wakeUp) {
+ _assertClass(force, RawVector);
+ _assertClass(point, RawVector);
+ wasm.rawrigidbodyset_rbAddForceAtPoint(this.__wbg_ptr, handle, force.__wbg_ptr, point.__wbg_ptr, wakeUp);
+ }
+ /**
+ * The world-space predicted translation of this rigid-body.
+ *
+ * If this rigid-body is kinematic this value is set by the `setNextKinematicTranslation`
+ * method and is used for estimating the kinematic body velocity at the next timestep.
+ * For non-kinematic bodies, this value is currently unspecified.
+ * @param {number} handle
+ * @returns {RawVector}
+ */
+ rbNextTranslation(handle) {
+ const ret = wasm.rawrigidbodyset_rbNextTranslation(this.__wbg_ptr, handle);
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * @param {number} handle
+ * @param {number} factor
+ * @param {boolean} wakeUp
+ */
+ rbSetGravityScale(handle, factor, wakeUp) {
+ wasm.rawrigidbodyset_rbSetGravityScale(this.__wbg_ptr, handle, factor, wakeUp);
+ }
+ /**
+ * The velocity of the given world-space point on this rigid-body.
+ * @param {number} handle
+ * @param {RawVector} point
+ * @returns {RawVector}
+ */
+ rbVelocityAtPoint(handle, point) {
+ _assertClass(point, RawVector);
+ const ret = wasm.rawrigidbodyset_rbVelocityAtPoint(this.__wbg_ptr, handle, point.__wbg_ptr);
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * The inverse mass taking into account translation locking.
+ * @param {number} handle
+ * @returns {RawVector}
+ */
+ rbEffectiveInvMass(handle) {
+ const ret = wasm.rawrigidbodyset_rbEffectiveInvMass(this.__wbg_ptr, handle);
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * @param {number} handle
+ * @param {boolean} locked
+ * @param {boolean} wake_up
+ */
+ rbLockTranslations(handle, locked, wake_up) {
+ wasm.rawrigidbodyset_rbLockTranslations(this.__wbg_ptr, handle, locked, wake_up);
+ }
+ /**
+ * The angular inertia along the principal inertia axes of the rigid-body.
+ * @param {number} handle
+ * @returns {number}
+ */
+ rbPrincipalInertia(handle) {
+ const ret = wasm.rawrigidbodyset_rbPrincipalInertia(this.__wbg_ptr, handle);
+ return ret;
+ }
+ /**
+ * @param {number} handle
+ * @param {number} factor
+ */
+ rbSetLinearDamping(handle, factor) {
+ wasm.rawrigidbodyset_rbSetLinearDamping(this.__wbg_ptr, handle, factor);
+ }
+ /**
+ * @param {number} handle
+ * @param {number} mass
+ * @param {boolean} wake_up
+ */
+ rbSetAdditionalMass(handle, mass, wake_up) {
+ wasm.rawrigidbodyset_rbSetAdditionalMass(this.__wbg_ptr, handle, mass, wake_up);
+ }
+ /**
+ * @param {number} handle
+ * @param {number} factor
+ */
+ rbSetAngularDamping(handle, factor) {
+ wasm.rawrigidbodyset_rbSetAngularDamping(this.__wbg_ptr, handle, factor);
+ }
+ /**
+ * @param {number} handle
+ * @param {number} group
+ */
+ rbSetDominanceGroup(handle, group) {
+ wasm.rawrigidbodyset_rbSetDominanceGroup(this.__wbg_ptr, handle, group);
+ }
+ /**
+ * @param {number} handle
+ * @returns {number}
+ */
+ rbSoftCcdPrediction(handle) {
+ const ret = wasm.rawrigidbodyset_rbSoftCcdPrediction(this.__wbg_ptr, handle);
+ return ret;
+ }
+ /**
+ * Applies an impulsive torque at the center-of-mass of this rigid-body.
+ *
+ * # Parameters
+ * - `torque impulse`: the torque impulse to apply on the rigid-body.
+ * - `wakeUp`: should the rigid-body be automatically woken-up?
+ * @param {number} handle
+ * @param {number} torque_impulse
+ * @param {boolean} wakeUp
+ */
+ rbApplyTorqueImpulse(handle, torque_impulse, wakeUp) {
+ wasm.rawrigidbodyset_rbApplyTorqueImpulse(this.__wbg_ptr, handle, torque_impulse, wakeUp);
+ }
+ /**
+ * Applies an impulse at the given world-space point of this rigid-body.
+ *
+ * # Parameters
+ * - `impulse`: the world-space impulse to apply on the rigid-body.
+ * - `point`: the world-space point where the impulse is to be applied on the rigid-body.
+ * - `wakeUp`: should the rigid-body be automatically woken-up?
+ * @param {number} handle
+ * @param {RawVector} impulse
+ * @param {RawVector} point
+ * @param {boolean} wakeUp
+ */
+ rbApplyImpulseAtPoint(handle, impulse, point, wakeUp) {
+ _assertClass(impulse, RawVector);
+ _assertClass(point, RawVector);
+ wasm.rawrigidbodyset_rbApplyImpulseAtPoint(this.__wbg_ptr, handle, impulse.__wbg_ptr, point.__wbg_ptr, wakeUp);
+ }
+ /**
+ * The inverse of the principal angular inertia of the rigid-body.
+ *
+ * Components set to zero are assumed to be infinite along the corresponding principal axis.
+ * @param {number} handle
+ * @returns {number}
+ */
+ rbInvPrincipalInertia(handle) {
+ const ret = wasm.rawrigidbodyset_rbInvPrincipalInertia(this.__wbg_ptr, handle);
+ return ret;
+ }
+ /**
+ * @param {number} handle
+ * @param {number} prediction
+ */
+ rbSetSoftCcdPrediction(handle, prediction) {
+ wasm.rawrigidbodyset_rbSetSoftCcdPrediction(this.__wbg_ptr, handle, prediction);
+ }
+ /**
+ * @param {number} handle
+ * @param {boolean} allow_x
+ * @param {boolean} allow_y
+ * @param {boolean} wake_up
+ */
+ rbSetEnabledTranslations(handle, allow_x, allow_y, wake_up) {
+ wasm.rawrigidbodyset_rbSetEnabledTranslations(this.__wbg_ptr, handle, allow_x, allow_y, wake_up);
+ }
+ /**
+ * The effective world-space angular inertia (that takes the potential rotation locking into account) of
+ * this rigid-body.
+ * @param {number} handle
+ * @returns {number}
+ */
+ rbEffectiveAngularInertia(handle) {
+ const ret = wasm.rawrigidbodyset_rbEffectiveAngularInertia(this.__wbg_ptr, handle);
+ return ret;
+ }
+ /**
+ * The world-space inverse angular inertia tensor of the rigid-body,
+ * taking into account rotation locking.
+ * @param {number} handle
+ * @returns {number}
+ */
+ rbEffectiveWorldInvInertia(handle) {
+ const ret = wasm.rawrigidbodyset_rbEffectiveWorldInvInertia(this.__wbg_ptr, handle);
+ return ret;
+ }
+ /**
+ * If this rigid body is kinematic, sets its future rotation after the next timestep integration.
+ *
+ * This should be used instead of `rigidBody.setRotation` to make the dynamic object
+ * interacting with this kinematic body behave as expected. Internally, Rapier will compute
+ * an artificial velocity for this rigid-body from its current position and its next kinematic
+ * position. This velocity will be used to compute forces on dynamic bodies interacting with
+ * this body.
+ *
+ * # Parameters
+ * - `angle`: the rotation angle, in radians.
+ * @param {number} handle
+ * @param {number} angle
+ */
+ rbSetNextKinematicRotation(handle, angle) {
+ wasm.rawrigidbodyset_rbSetNextKinematicRotation(this.__wbg_ptr, handle, angle);
+ }
+ /**
+ * @param {number} handle
+ * @returns {number}
+ */
+ rbAdditionalSolverIterations(handle) {
+ const ret = wasm.rawrigidbodyset_rbAdditionalSolverIterations(this.__wbg_ptr, handle);
+ return ret >>> 0;
+ }
+ /**
+ * @param {number} handle
+ * @param {number} mass
+ * @param {RawVector} centerOfMass
+ * @param {number} principalAngularInertia
+ * @param {boolean} wake_up
+ */
+ rbSetAdditionalMassProperties(handle, mass, centerOfMass, principalAngularInertia, wake_up) {
+ _assertClass(centerOfMass, RawVector);
+ wasm.rawrigidbodyset_rbSetAdditionalMassProperties(this.__wbg_ptr, handle, mass, centerOfMass.__wbg_ptr, principalAngularInertia, wake_up);
+ }
+ /**
+ * If this rigid body is kinematic, sets its future translation after the next timestep integration.
+ *
+ * This should be used instead of `rigidBody.setTranslation` to make the dynamic object
+ * interacting with this kinematic body behave as expected. Internally, Rapier will compute
+ * an artificial velocity for this rigid-body from its current position and its next kinematic
+ * position. This velocity will be used to compute forces on dynamic bodies interacting with
+ * this body.
+ *
+ * # Parameters
+ * - `x`: the world-space position of the rigid-body along the `x` axis.
+ * - `y`: the world-space position of the rigid-body along the `y` axis.
+ * @param {number} handle
+ * @param {number} x
+ * @param {number} y
+ */
+ rbSetNextKinematicTranslation(handle, x, y) {
+ wasm.rawrigidbodyset_rbSetNextKinematicTranslation(this.__wbg_ptr, handle, x, y);
+ }
+ /**
+ * @param {number} handle
+ * @param {number} iters
+ */
+ rbSetAdditionalSolverIterations(handle, iters) {
+ wasm.rawrigidbodyset_rbSetAdditionalSolverIterations(this.__wbg_ptr, handle, iters);
+ }
+ /**
+ * @param {number} handle
+ * @param {RawColliderSet} colliders
+ */
+ rbRecomputeMassPropertiesFromColliders(handle, colliders) {
+ _assertClass(colliders, RawColliderSet);
+ wasm.rawrigidbodyset_rbRecomputeMassPropertiesFromColliders(this.__wbg_ptr, handle, colliders.__wbg_ptr);
+ }
+ /**
+ * The mass of this rigid-body.
+ * @param {number} handle
+ * @returns {number}
+ */
+ rbMass(handle) {
+ const ret = wasm.rawrigidbodyset_rbMass(this.__wbg_ptr, handle);
+ return ret;
+ }
+ /**
+ * Put the given rigid-body to sleep.
+ * @param {number} handle
+ */
+ rbSleep(handle) {
+ wasm.rawrigidbodyset_rbSleep(this.__wbg_ptr, handle);
+ }
+ /**
+ * The angular velocity of this rigid-body.
+ * @param {number} handle
+ * @returns {number}
+ */
+ rbAngvel(handle) {
+ const ret = wasm.rawrigidbodyset_rbAngvel(this.__wbg_ptr, handle);
+ return ret;
+ }
+ /**
+ * The linear velocity of this rigid-body.
+ * @param {number} handle
+ * @returns {RawVector}
+ */
+ rbLinvel(handle) {
+ const ret = wasm.rawrigidbodyset_rbLinvel(this.__wbg_ptr, handle);
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * Wakes this rigid-body up.
+ *
+ * A dynamic rigid-body that does not move during several consecutive frames will
+ * be put to sleep by the physics engine, i.e., it will stop being simulated in order
+ * to avoid useless computations.
+ * This method forces a sleeping rigid-body to wake-up. This is useful, e.g., before modifying
+ * the position of a dynamic body so that it is properly simulated afterwards.
+ * @param {number} handle
+ */
+ rbWakeUp(handle) {
+ wasm.rawrigidbodyset_rbWakeUp(this.__wbg_ptr, handle);
+ }
+ /**
+ * The inverse of the mass of a rigid-body.
+ *
+ * If this is zero, the rigid-body is assumed to have infinite mass.
+ * @param {number} handle
+ * @returns {number}
+ */
+ rbInvMass(handle) {
+ const ret = wasm.rawrigidbodyset_rbInvMass(this.__wbg_ptr, handle);
+ return ret;
+ }
+ /**
+ * Is this rigid-body fixed?
+ * @param {number} handle
+ * @returns {boolean}
+ */
+ rbIsFixed(handle) {
+ const ret = wasm.rawrigidbodyset_rbIsFixed(this.__wbg_ptr, handle);
+ return ret !== 0;
+ }
+ /**
+ * @param {boolean} enabled
+ * @param {RawVector} translation
+ * @param {RawRotation} rotation
+ * @param {number} gravityScale
+ * @param {number} mass
+ * @param {boolean} massOnly
+ * @param {RawVector} centerOfMass
+ * @param {RawVector} linvel
+ * @param {number} angvel
+ * @param {number} principalAngularInertia
+ * @param {boolean} translationEnabledX
+ * @param {boolean} translationEnabledY
+ * @param {boolean} rotationsEnabled
+ * @param {number} linearDamping
+ * @param {number} angularDamping
+ * @param {RawRigidBodyType} rb_type
+ * @param {boolean} canSleep
+ * @param {boolean} sleeping
+ * @param {number} softCcdPrediciton
+ * @param {boolean} ccdEnabled
+ * @param {number} dominanceGroup
+ * @param {number} additional_solver_iterations
+ * @returns {number}
+ */
+ createRigidBody(enabled, translation, rotation, gravityScale, mass, massOnly, centerOfMass, linvel, angvel, principalAngularInertia, translationEnabledX, translationEnabledY, rotationsEnabled, linearDamping, angularDamping, rb_type, canSleep, sleeping, softCcdPrediciton, ccdEnabled, dominanceGroup, additional_solver_iterations) {
+ _assertClass(translation, RawVector);
+ _assertClass(rotation, RawRotation);
+ _assertClass(centerOfMass, RawVector);
+ _assertClass(linvel, RawVector);
+ const ret = wasm.rawrigidbodyset_createRigidBody(this.__wbg_ptr, enabled, translation.__wbg_ptr, rotation.__wbg_ptr, gravityScale, mass, massOnly, centerOfMass.__wbg_ptr, linvel.__wbg_ptr, angvel, principalAngularInertia, translationEnabledX, translationEnabledY, rotationsEnabled, linearDamping, angularDamping, rb_type, canSleep, sleeping, softCcdPrediciton, ccdEnabled, dominanceGroup, additional_solver_iterations);
+ return ret;
+ }
+ /**
+ * Applies the given JavaScript function to the integer handle of each rigid-body managed by this set.
+ *
+ * # Parameters
+ * - `f(handle)`: the function to apply to the integer handle of each rigid-body managed by this set. Called as `f(collider)`.
+ * @param {Function} f
+ */
+ forEachRigidBodyHandle(f) {
+ try {
+ wasm.rawrigidbodyset_forEachRigidBodyHandle(this.__wbg_ptr, addBorrowedObject(f));
+ } finally {
+ heap[stack_pointer++] = undefined;
+ }
+ }
+ /**
+ * The number of rigid-bodies on this set.
+ * @returns {number}
+ */
+ len() {
+ const ret = wasm.rawrigidbodyset_len(this.__wbg_ptr);
+ return ret >>> 0;
+ }
+ constructor() {
+ const ret = wasm.rawrigidbodyset_new();
+ this.__wbg_ptr = ret >>> 0;
+ RawRigidBodySetFinalization.register(this, this.__wbg_ptr, this);
+ return this;
+ }
+ /**
+ * @param {RawColliderSet} colliders
+ */
+ propagateModifiedBodyPositionsToColliders(colliders) {
+ _assertClass(colliders, RawColliderSet);
+ wasm.rawrigidbodyset_propagateModifiedBodyPositionsToColliders(this.__wbg_ptr, colliders.__wbg_ptr);
+ }
+ /**
+ * @param {number} handle
+ * @param {RawIslandManager} islands
+ * @param {RawColliderSet} colliders
+ * @param {RawImpulseJointSet} joints
+ * @param {RawMultibodyJointSet} articulations
+ */
+ remove(handle, islands, colliders, joints, articulations) {
+ _assertClass(islands, RawIslandManager);
+ _assertClass(colliders, RawColliderSet);
+ _assertClass(joints, RawImpulseJointSet);
+ _assertClass(articulations, RawMultibodyJointSet);
+ wasm.rawrigidbodyset_remove(this.__wbg_ptr, handle, islands.__wbg_ptr, colliders.__wbg_ptr, joints.__wbg_ptr, articulations.__wbg_ptr);
+ }
+ /**
+ * Checks if a rigid-body with the given integer handle exists.
+ * @param {number} handle
+ * @returns {boolean}
+ */
+ contains(handle) {
+ const ret = wasm.rawrigidbodyset_contains(this.__wbg_ptr, handle);
+ return ret !== 0;
+ }
+}
+
+const RawRotationFinalization = (typeof FinalizationRegistry === 'undefined')
+ ? { register: () => {}, unregister: () => {} }
+ : new FinalizationRegistry(ptr => wasm.__wbg_rawrotation_free(ptr >>> 0, 1));
+/**
+ * A rotation quaternion.
+ */
+export class RawRotation {
+
+ static __wrap(ptr) {
+ ptr = ptr >>> 0;
+ const obj = Object.create(RawRotation.prototype);
+ obj.__wbg_ptr = ptr;
+ RawRotationFinalization.register(obj, obj.__wbg_ptr, obj);
+ return obj;
+ }
+
+ __destroy_into_raw() {
+ const ptr = this.__wbg_ptr;
+ this.__wbg_ptr = 0;
+ RawRotationFinalization.unregister(this);
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_rawrotation_free(ptr, 0);
+ }
+ /**
+ * The imaginary part of this complex number.
+ * @returns {number}
+ */
+ get im() {
+ const ret = wasm.rawkinematiccharactercontroller_offset(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * The real part of this complex number.
+ * @returns {number}
+ */
+ get re() {
+ const ret = wasm.rawintegrationparameters_dt(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * The rotation angle in radians.
+ * @returns {number}
+ */
+ get angle() {
+ const ret = wasm.rawrotation_angle(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * The identity rotation.
+ * @returns {RawRotation}
+ */
+ static identity() {
+ const ret = wasm.rawrotation_identity();
+ return RawRotation.__wrap(ret);
+ }
+ /**
+ * The rotation with thegiven angle.
+ * @param {number} angle
+ * @returns {RawRotation}
+ */
+ static fromAngle(angle) {
+ const ret = wasm.rawrotation_fromAngle(angle);
+ return RawRotation.__wrap(ret);
+ }
+}
+
+const RawSerializationPipelineFinalization = (typeof FinalizationRegistry === 'undefined')
+ ? { register: () => {}, unregister: () => {} }
+ : new FinalizationRegistry(ptr => wasm.__wbg_rawserializationpipeline_free(ptr >>> 0, 1));
+
+export class RawSerializationPipeline {
+
+ __destroy_into_raw() {
+ const ptr = this.__wbg_ptr;
+ this.__wbg_ptr = 0;
+ RawSerializationPipelineFinalization.unregister(this);
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_rawserializationpipeline_free(ptr, 0);
+ }
+ /**
+ * @param {RawVector} gravity
+ * @param {RawIntegrationParameters} integrationParameters
+ * @param {RawIslandManager} islands
+ * @param {RawBroadPhase} broadPhase
+ * @param {RawNarrowPhase} narrowPhase
+ * @param {RawRigidBodySet} bodies
+ * @param {RawColliderSet} colliders
+ * @param {RawImpulseJointSet} impulse_joints
+ * @param {RawMultibodyJointSet} multibody_joints
+ * @returns {Uint8Array | undefined}
+ */
+ serializeAll(gravity, integrationParameters, islands, broadPhase, narrowPhase, bodies, colliders, impulse_joints, multibody_joints) {
+ _assertClass(gravity, RawVector);
+ _assertClass(integrationParameters, RawIntegrationParameters);
+ _assertClass(islands, RawIslandManager);
+ _assertClass(broadPhase, RawBroadPhase);
+ _assertClass(narrowPhase, RawNarrowPhase);
+ _assertClass(bodies, RawRigidBodySet);
+ _assertClass(colliders, RawColliderSet);
+ _assertClass(impulse_joints, RawImpulseJointSet);
+ _assertClass(multibody_joints, RawMultibodyJointSet);
+ const ret = wasm.rawserializationpipeline_serializeAll(this.__wbg_ptr, gravity.__wbg_ptr, integrationParameters.__wbg_ptr, islands.__wbg_ptr, broadPhase.__wbg_ptr, narrowPhase.__wbg_ptr, bodies.__wbg_ptr, colliders.__wbg_ptr, impulse_joints.__wbg_ptr, multibody_joints.__wbg_ptr);
+ return takeObject(ret);
+ }
+ /**
+ * @param {Uint8Array} data
+ * @returns {RawDeserializedWorld | undefined}
+ */
+ deserializeAll(data) {
+ const ret = wasm.rawserializationpipeline_deserializeAll(this.__wbg_ptr, addHeapObject(data));
+ return ret === 0 ? undefined : RawDeserializedWorld.__wrap(ret);
+ }
+ constructor() {
+ const ret = wasm.rawccdsolver_new();
+ this.__wbg_ptr = ret >>> 0;
+ RawSerializationPipelineFinalization.register(this, this.__wbg_ptr, this);
+ return this;
+ }
+}
+
+const RawShapeFinalization = (typeof FinalizationRegistry === 'undefined')
+ ? { register: () => {}, unregister: () => {} }
+ : new FinalizationRegistry(ptr => wasm.__wbg_rawshape_free(ptr >>> 0, 1));
+
+export class RawShape {
+
+ static __wrap(ptr) {
+ ptr = ptr >>> 0;
+ const obj = Object.create(RawShape.prototype);
+ obj.__wbg_ptr = ptr;
+ RawShapeFinalization.register(obj, obj.__wbg_ptr, obj);
+ return obj;
+ }
+
+ __destroy_into_raw() {
+ const ptr = this.__wbg_ptr;
+ this.__wbg_ptr = 0;
+ RawShapeFinalization.unregister(this);
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_rawshape_free(ptr, 0);
+ }
+ /**
+ * @param {Float32Array} points
+ * @returns {RawShape | undefined}
+ */
+ static convexHull(points) {
+ const ptr0 = passArrayF32ToWasm0(points, wasm.__wbindgen_export_2);
+ const len0 = WASM_VECTOR_LEN;
+ const ret = wasm.rawshape_convexHull(ptr0, len0);
+ return ret === 0 ? undefined : RawShape.__wrap(ret);
+ }
+ /**
+ * @param {Float32Array} heights
+ * @param {RawVector} scale
+ * @returns {RawShape}
+ */
+ static heightfield(heights, scale) {
+ const ptr0 = passArrayF32ToWasm0(heights, wasm.__wbindgen_export_2);
+ const len0 = WASM_VECTOR_LEN;
+ _assertClass(scale, RawVector);
+ const ret = wasm.rawshape_heightfield(ptr0, len0, scale.__wbg_ptr);
+ return RawShape.__wrap(ret);
+ }
+ /**
+ * @param {number} hx
+ * @param {number} hy
+ * @param {number} borderRadius
+ * @returns {RawShape}
+ */
+ static roundCuboid(hx, hy, borderRadius) {
+ const ret = wasm.rawshape_roundCuboid(hx, hy, borderRadius);
+ return RawShape.__wrap(ret);
+ }
+ /**
+ * @param {RawVector} shapePos1
+ * @param {RawRotation} shapeRot1
+ * @param {RawShape} shape2
+ * @param {RawVector} shapePos2
+ * @param {RawRotation} shapeRot2
+ * @param {number} prediction
+ * @returns {RawShapeContact | undefined}
+ */
+ contactShape(shapePos1, shapeRot1, shape2, shapePos2, shapeRot2, prediction) {
+ _assertClass(shapePos1, RawVector);
+ _assertClass(shapeRot1, RawRotation);
+ _assertClass(shape2, RawShape);
+ _assertClass(shapePos2, RawVector);
+ _assertClass(shapeRot2, RawRotation);
+ const ret = wasm.rawshape_contactShape(this.__wbg_ptr, shapePos1.__wbg_ptr, shapeRot1.__wbg_ptr, shape2.__wbg_ptr, shapePos2.__wbg_ptr, shapeRot2.__wbg_ptr, prediction);
+ return ret === 0 ? undefined : RawShapeContact.__wrap(ret);
+ }
+ /**
+ * @param {RawVector} shapePos
+ * @param {RawRotation} shapeRot
+ * @param {RawVector} point
+ * @param {boolean} solid
+ * @returns {RawPointProjection}
+ */
+ projectPoint(shapePos, shapeRot, point, solid) {
+ _assertClass(shapePos, RawVector);
+ _assertClass(shapeRot, RawRotation);
+ _assertClass(point, RawVector);
+ const ret = wasm.rawshape_projectPoint(this.__wbg_ptr, shapePos.__wbg_ptr, shapeRot.__wbg_ptr, point.__wbg_ptr, solid);
+ return RawPointProjection.__wrap(ret);
+ }
+ /**
+ * @param {RawVector} shapePos
+ * @param {RawRotation} shapeRot
+ * @param {RawVector} point
+ * @returns {boolean}
+ */
+ containsPoint(shapePos, shapeRot, point) {
+ _assertClass(shapePos, RawVector);
+ _assertClass(shapeRot, RawRotation);
+ _assertClass(point, RawVector);
+ const ret = wasm.rawshape_containsPoint(this.__wbg_ptr, shapePos.__wbg_ptr, shapeRot.__wbg_ptr, point.__wbg_ptr);
+ return ret !== 0;
+ }
+ /**
+ * @param {RawVector} shapePos
+ * @param {RawRotation} shapeRot
+ * @param {RawVector} rayOrig
+ * @param {RawVector} rayDir
+ * @param {number} maxToi
+ * @returns {boolean}
+ */
+ intersectsRay(shapePos, shapeRot, rayOrig, rayDir, maxToi) {
+ _assertClass(shapePos, RawVector);
+ _assertClass(shapeRot, RawRotation);
+ _assertClass(rayOrig, RawVector);
+ _assertClass(rayDir, RawVector);
+ const ret = wasm.rawshape_intersectsRay(this.__wbg_ptr, shapePos.__wbg_ptr, shapeRot.__wbg_ptr, rayOrig.__wbg_ptr, rayDir.__wbg_ptr, maxToi);
+ return ret !== 0;
+ }
+ /**
+ * @param {RawVector} p1
+ * @param {RawVector} p2
+ * @param {RawVector} p3
+ * @param {number} borderRadius
+ * @returns {RawShape}
+ */
+ static roundTriangle(p1, p2, p3, borderRadius) {
+ _assertClass(p1, RawVector);
+ _assertClass(p2, RawVector);
+ _assertClass(p3, RawVector);
+ const ret = wasm.rawshape_roundTriangle(p1.__wbg_ptr, p2.__wbg_ptr, p3.__wbg_ptr, borderRadius);
+ return RawShape.__wrap(ret);
+ }
+ /**
+ * @param {Float32Array} vertices
+ * @returns {RawShape | undefined}
+ */
+ static convexPolyline(vertices) {
+ const ptr0 = passArrayF32ToWasm0(vertices, wasm.__wbindgen_export_2);
+ const len0 = WASM_VECTOR_LEN;
+ const ret = wasm.rawshape_convexPolyline(ptr0, len0);
+ return ret === 0 ? undefined : RawShape.__wrap(ret);
+ }
+ /**
+ * @param {RawVector} shapePos1
+ * @param {RawRotation} shapeRot1
+ * @param {RawShape} shape2
+ * @param {RawVector} shapePos2
+ * @param {RawRotation} shapeRot2
+ * @returns {boolean}
+ */
+ intersectsShape(shapePos1, shapeRot1, shape2, shapePos2, shapeRot2) {
+ _assertClass(shapePos1, RawVector);
+ _assertClass(shapeRot1, RawRotation);
+ _assertClass(shape2, RawShape);
+ _assertClass(shapePos2, RawVector);
+ _assertClass(shapeRot2, RawRotation);
+ const ret = wasm.rawshape_intersectsShape(this.__wbg_ptr, shapePos1.__wbg_ptr, shapeRot1.__wbg_ptr, shape2.__wbg_ptr, shapePos2.__wbg_ptr, shapeRot2.__wbg_ptr);
+ return ret !== 0;
+ }
+ /**
+ * @param {Float32Array} points
+ * @param {number} borderRadius
+ * @returns {RawShape | undefined}
+ */
+ static roundConvexHull(points, borderRadius) {
+ const ptr0 = passArrayF32ToWasm0(points, wasm.__wbindgen_export_2);
+ const len0 = WASM_VECTOR_LEN;
+ const ret = wasm.rawshape_roundConvexHull(ptr0, len0, borderRadius);
+ return ret === 0 ? undefined : RawShape.__wrap(ret);
+ }
+ /**
+ * @param {RawVector} voxel_size
+ * @param {Float32Array} points
+ * @returns {RawShape}
+ */
+ static voxelsFromPoints(voxel_size, points) {
+ _assertClass(voxel_size, RawVector);
+ const ptr0 = passArrayF32ToWasm0(points, wasm.__wbindgen_export_2);
+ const len0 = WASM_VECTOR_LEN;
+ const ret = wasm.rawshape_voxelsFromPoints(voxel_size.__wbg_ptr, ptr0, len0);
+ return RawShape.__wrap(ret);
+ }
+ /**
+ * @param {RawVector} shapePos
+ * @param {RawRotation} shapeRot
+ * @param {RawVector} rayOrig
+ * @param {RawVector} rayDir
+ * @param {number} maxToi
+ * @param {boolean} solid
+ * @returns {RawRayIntersection | undefined}
+ */
+ castRayAndGetNormal(shapePos, shapeRot, rayOrig, rayDir, maxToi, solid) {
+ _assertClass(shapePos, RawVector);
+ _assertClass(shapeRot, RawRotation);
+ _assertClass(rayOrig, RawVector);
+ _assertClass(rayDir, RawVector);
+ const ret = wasm.rawshape_castRayAndGetNormal(this.__wbg_ptr, shapePos.__wbg_ptr, shapeRot.__wbg_ptr, rayOrig.__wbg_ptr, rayDir.__wbg_ptr, maxToi, solid);
+ return ret === 0 ? undefined : RawRayIntersection.__wrap(ret);
+ }
+ /**
+ * @param {Float32Array} vertices
+ * @param {number} borderRadius
+ * @returns {RawShape | undefined}
+ */
+ static roundConvexPolyline(vertices, borderRadius) {
+ const ptr0 = passArrayF32ToWasm0(vertices, wasm.__wbindgen_export_2);
+ const len0 = WASM_VECTOR_LEN;
+ const ret = wasm.rawshape_roundConvexPolyline(ptr0, len0, borderRadius);
+ return ret === 0 ? undefined : RawShape.__wrap(ret);
+ }
+ /**
+ * @param {number} radius
+ * @returns {RawShape}
+ */
+ static ball(radius) {
+ const ret = wasm.rawshape_ball(radius);
+ return RawShape.__wrap(ret);
+ }
+ /**
+ * @param {number} hx
+ * @param {number} hy
+ * @returns {RawShape}
+ */
+ static cuboid(hx, hy) {
+ const ret = wasm.rawshape_cuboid(hx, hy);
+ return RawShape.__wrap(ret);
+ }
+ /**
+ * @param {RawVector} voxel_size
+ * @param {Int32Array} grid_coords
+ * @returns {RawShape}
+ */
+ static voxels(voxel_size, grid_coords) {
+ _assertClass(voxel_size, RawVector);
+ const ptr0 = passArray32ToWasm0(grid_coords, wasm.__wbindgen_export_2);
+ const len0 = WASM_VECTOR_LEN;
+ const ret = wasm.rawshape_voxels(voxel_size.__wbg_ptr, ptr0, len0);
+ return RawShape.__wrap(ret);
+ }
+ /**
+ * @param {number} halfHeight
+ * @param {number} radius
+ * @returns {RawShape}
+ */
+ static capsule(halfHeight, radius) {
+ const ret = wasm.rawshape_capsule(halfHeight, radius);
+ return RawShape.__wrap(ret);
+ }
+ /**
+ * @param {RawVector} shapePos
+ * @param {RawRotation} shapeRot
+ * @param {RawVector} rayOrig
+ * @param {RawVector} rayDir
+ * @param {number} maxToi
+ * @param {boolean} solid
+ * @returns {number}
+ */
+ castRay(shapePos, shapeRot, rayOrig, rayDir, maxToi, solid) {
+ _assertClass(shapePos, RawVector);
+ _assertClass(shapeRot, RawRotation);
+ _assertClass(rayOrig, RawVector);
+ _assertClass(rayDir, RawVector);
+ const ret = wasm.rawshape_castRay(this.__wbg_ptr, shapePos.__wbg_ptr, shapeRot.__wbg_ptr, rayOrig.__wbg_ptr, rayDir.__wbg_ptr, maxToi, solid);
+ return ret;
+ }
+ /**
+ * @param {RawVector} p1
+ * @param {RawVector} p2
+ * @returns {RawShape}
+ */
+ static segment(p1, p2) {
+ _assertClass(p1, RawVector);
+ _assertClass(p2, RawVector);
+ const ret = wasm.rawshape_segment(p1.__wbg_ptr, p2.__wbg_ptr);
+ return RawShape.__wrap(ret);
+ }
+ /**
+ * @param {Float32Array} vertices
+ * @param {Uint32Array} indices
+ * @param {number} flags
+ * @returns {RawShape | undefined}
+ */
+ static trimesh(vertices, indices, flags) {
+ const ptr0 = passArrayF32ToWasm0(vertices, wasm.__wbindgen_export_2);
+ const len0 = WASM_VECTOR_LEN;
+ const ptr1 = passArray32ToWasm0(indices, wasm.__wbindgen_export_2);
+ const len1 = WASM_VECTOR_LEN;
+ const ret = wasm.rawshape_trimesh(ptr0, len0, ptr1, len1, flags);
+ return ret === 0 ? undefined : RawShape.__wrap(ret);
+ }
+ /**
+ * @param {Float32Array} vertices
+ * @param {Uint32Array} indices
+ * @returns {RawShape}
+ */
+ static polyline(vertices, indices) {
+ const ptr0 = passArrayF32ToWasm0(vertices, wasm.__wbindgen_export_2);
+ const len0 = WASM_VECTOR_LEN;
+ const ptr1 = passArray32ToWasm0(indices, wasm.__wbindgen_export_2);
+ const len1 = WASM_VECTOR_LEN;
+ const ret = wasm.rawshape_polyline(ptr0, len0, ptr1, len1);
+ return RawShape.__wrap(ret);
+ }
+ /**
+ * @param {RawVector} p1
+ * @param {RawVector} p2
+ * @param {RawVector} p3
+ * @returns {RawShape}
+ */
+ static triangle(p1, p2, p3) {
+ _assertClass(p1, RawVector);
+ _assertClass(p2, RawVector);
+ _assertClass(p3, RawVector);
+ const ret = wasm.rawshape_triangle(p1.__wbg_ptr, p2.__wbg_ptr, p3.__wbg_ptr);
+ return RawShape.__wrap(ret);
+ }
+ /**
+ * @param {RawVector} shapePos1
+ * @param {RawRotation} shapeRot1
+ * @param {RawVector} shapeVel1
+ * @param {RawShape} shape2
+ * @param {RawVector} shapePos2
+ * @param {RawRotation} shapeRot2
+ * @param {RawVector} shapeVel2
+ * @param {number} target_distance
+ * @param {number} maxToi
+ * @param {boolean} stop_at_penetration
+ * @returns {RawShapeCastHit | undefined}
+ */
+ castShape(shapePos1, shapeRot1, shapeVel1, shape2, shapePos2, shapeRot2, shapeVel2, target_distance, maxToi, stop_at_penetration) {
+ _assertClass(shapePos1, RawVector);
+ _assertClass(shapeRot1, RawRotation);
+ _assertClass(shapeVel1, RawVector);
+ _assertClass(shape2, RawShape);
+ _assertClass(shapePos2, RawVector);
+ _assertClass(shapeRot2, RawRotation);
+ _assertClass(shapeVel2, RawVector);
+ const ret = wasm.rawshape_castShape(this.__wbg_ptr, shapePos1.__wbg_ptr, shapeRot1.__wbg_ptr, shapeVel1.__wbg_ptr, shape2.__wbg_ptr, shapePos2.__wbg_ptr, shapeRot2.__wbg_ptr, shapeVel2.__wbg_ptr, target_distance, maxToi, stop_at_penetration);
+ return ret === 0 ? undefined : RawShapeCastHit.__wrap(ret);
+ }
+ /**
+ * @param {RawVector} normal
+ * @returns {RawShape}
+ */
+ static halfspace(normal) {
+ _assertClass(normal, RawVector);
+ const ret = wasm.rawshape_halfspace(normal.__wbg_ptr);
+ return RawShape.__wrap(ret);
+ }
+}
+
+const RawShapeCastHitFinalization = (typeof FinalizationRegistry === 'undefined')
+ ? { register: () => {}, unregister: () => {} }
+ : new FinalizationRegistry(ptr => wasm.__wbg_rawshapecasthit_free(ptr >>> 0, 1));
+
+export class RawShapeCastHit {
+
+ static __wrap(ptr) {
+ ptr = ptr >>> 0;
+ const obj = Object.create(RawShapeCastHit.prototype);
+ obj.__wbg_ptr = ptr;
+ RawShapeCastHitFinalization.register(obj, obj.__wbg_ptr, obj);
+ return obj;
+ }
+
+ __destroy_into_raw() {
+ const ptr = this.__wbg_ptr;
+ this.__wbg_ptr = 0;
+ RawShapeCastHitFinalization.unregister(this);
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_rawshapecasthit_free(ptr, 0);
+ }
+ /**
+ * @returns {number}
+ */
+ time_of_impact() {
+ const ret = wasm.rawintegrationparameters_dt(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * @returns {RawVector}
+ */
+ normal1() {
+ const ret = wasm.rawcollidershapecasthit_witness2(this.__wbg_ptr);
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * @returns {RawVector}
+ */
+ normal2() {
+ const ret = wasm.rawcollidershapecasthit_normal1(this.__wbg_ptr);
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * @returns {RawVector}
+ */
+ witness1() {
+ const ret = wasm.rawshapecasthit_witness1(this.__wbg_ptr);
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * @returns {RawVector}
+ */
+ witness2() {
+ const ret = wasm.rawcollidershapecasthit_witness1(this.__wbg_ptr);
+ return RawVector.__wrap(ret);
+ }
+}
+
+const RawShapeContactFinalization = (typeof FinalizationRegistry === 'undefined')
+ ? { register: () => {}, unregister: () => {} }
+ : new FinalizationRegistry(ptr => wasm.__wbg_rawshapecontact_free(ptr >>> 0, 1));
+
+export class RawShapeContact {
+
+ static __wrap(ptr) {
+ ptr = ptr >>> 0;
+ const obj = Object.create(RawShapeContact.prototype);
+ obj.__wbg_ptr = ptr;
+ RawShapeContactFinalization.register(obj, obj.__wbg_ptr, obj);
+ return obj;
+ }
+
+ __destroy_into_raw() {
+ const ptr = this.__wbg_ptr;
+ this.__wbg_ptr = 0;
+ RawShapeContactFinalization.unregister(this);
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_rawshapecontact_free(ptr, 0);
+ }
+ /**
+ * @returns {RawVector}
+ */
+ point1() {
+ const ret = wasm.rawpointprojection_point(this.__wbg_ptr);
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * @returns {RawVector}
+ */
+ point2() {
+ const ret = wasm.rawpointcolliderprojection_point(this.__wbg_ptr);
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * @returns {RawVector}
+ */
+ normal1() {
+ const ret = wasm.rawcontactforceevent_total_force(this.__wbg_ptr);
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * @returns {RawVector}
+ */
+ normal2() {
+ const ret = wasm.rawcharactercollision_translationDeltaApplied(this.__wbg_ptr);
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * @returns {number}
+ */
+ distance() {
+ const ret = wasm.rawcontactforceevent_total_force_magnitude(this.__wbg_ptr);
+ return ret;
+ }
+}
+
+const RawVectorFinalization = (typeof FinalizationRegistry === 'undefined')
+ ? { register: () => {}, unregister: () => {} }
+ : new FinalizationRegistry(ptr => wasm.__wbg_rawvector_free(ptr >>> 0, 1));
+/**
+ * A vector.
+ */
+export class RawVector {
+
+ static __wrap(ptr) {
+ ptr = ptr >>> 0;
+ const obj = Object.create(RawVector.prototype);
+ obj.__wbg_ptr = ptr;
+ RawVectorFinalization.register(obj, obj.__wbg_ptr, obj);
+ return obj;
+ }
+
+ __destroy_into_raw() {
+ const ptr = this.__wbg_ptr;
+ this.__wbg_ptr = 0;
+ RawVectorFinalization.unregister(this);
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_rawvector_free(ptr, 0);
+ }
+ /**
+ * The `x` component of this vector.
+ * @returns {number}
+ */
+ get x() {
+ const ret = wasm.rawintegrationparameters_dt(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * The `y` component of this vector.
+ * @returns {number}
+ */
+ get y() {
+ const ret = wasm.rawkinematiccharactercontroller_offset(this.__wbg_ptr);
+ return ret;
+ }
+ /**
+ * Create a new 2D vector from this vector with its components rearranged as `{x, y}`.
+ * @returns {RawVector}
+ */
+ xy() {
+ const ret = wasm.rawvector_xy(this.__wbg_ptr);
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * Create a new 2D vector from this vector with its components rearranged as `{y, x}`.
+ * @returns {RawVector}
+ */
+ yx() {
+ const ret = wasm.rawvector_yx(this.__wbg_ptr);
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * Creates a new 2D vector from its two components.
+ *
+ * # Parameters
+ * - `x`: the `x` component of this 2D vector.
+ * - `y`: the `y` component of this 2D vector.
+ * @param {number} x
+ * @param {number} y
+ */
+ constructor(x, y) {
+ const ret = wasm.rawvector_new(x, y);
+ this.__wbg_ptr = ret >>> 0;
+ RawVectorFinalization.register(this, this.__wbg_ptr, this);
+ return this;
+ }
+ /**
+ * Creates a new vector filled with zeros.
+ * @returns {RawVector}
+ */
+ static zero() {
+ const ret = wasm.rawvector_zero();
+ return RawVector.__wrap(ret);
+ }
+ /**
+ * Sets the `x` component of this vector.
+ * @param {number} x
+ */
+ set x(x) {
+ wasm.rawintegrationparameters_set_dt(this.__wbg_ptr, x);
+ }
+ /**
+ * Sets the `y` component of this vector.
+ * @param {number} y
+ */
+ set y(y) {
+ wasm.rawvector_set_y(this.__wbg_ptr, y);
+ }
+}
+
+async function __wbg_load(module, imports) {
+ if (typeof Response === 'function' && module instanceof Response) {
+ if (typeof WebAssembly.instantiateStreaming === 'function') {
+ try {
+ return await WebAssembly.instantiateStreaming(module, imports);
+
+ } catch (e) {
+ if (module.headers.get('Content-Type') != 'application/wasm') {
+ console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e);
+
+ } else {
+ throw e;
+ }
+ }
+ }
+
+ const bytes = await module.arrayBuffer();
+ return await WebAssembly.instantiate(bytes, imports);
+
+ } else {
+ const instance = await WebAssembly.instantiate(module, imports);
+
+ if (instance instanceof WebAssembly.Instance) {
+ return { instance, module };
+
+ } else {
+ return instance;
+ }
+ }
+}
+
+function __wbg_get_imports() {
+ const imports = {};
+ imports.wbg = {};
+ imports.wbg.__wbg_bind_c8359b1cba058168 = function(arg0, arg1, arg2, arg3) {
+ const ret = getObject(arg0).bind(getObject(arg1), getObject(arg2), getObject(arg3));
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_buffer_609cc3eee51ed158 = function(arg0) {
+ const ret = getObject(arg0).buffer;
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_call_672a4d21634d4a24 = function() { return handleError(function (arg0, arg1) {
+ const ret = getObject(arg0).call(getObject(arg1));
+ return addHeapObject(ret);
+ }, arguments) };
+ imports.wbg.__wbg_call_7cccdd69e0791ae2 = function() { return handleError(function (arg0, arg1, arg2) {
+ const ret = getObject(arg0).call(getObject(arg1), getObject(arg2));
+ return addHeapObject(ret);
+ }, arguments) };
+ imports.wbg.__wbg_call_833bed5770ea2041 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
+ const ret = getObject(arg0).call(getObject(arg1), getObject(arg2), getObject(arg3));
+ return addHeapObject(ret);
+ }, arguments) };
+ imports.wbg.__wbg_call_b8adc8b1d0a0d8eb = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
+ const ret = getObject(arg0).call(getObject(arg1), getObject(arg2), getObject(arg3), getObject(arg4));
+ return addHeapObject(ret);
+ }, arguments) };
+ imports.wbg.__wbg_length_3b4f022188ae8db6 = function(arg0) {
+ const ret = getObject(arg0).length;
+ return ret;
+ };
+ imports.wbg.__wbg_length_a446193dc22c12f8 = function(arg0) {
+ const ret = getObject(arg0).length;
+ return ret;
+ };
+ imports.wbg.__wbg_new_a12002a7f91c75be = function(arg0) {
+ const ret = new Uint8Array(getObject(arg0));
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_newnoargs_105ed471475aaf50 = function(arg0, arg1) {
+ const ret = new Function(getStringFromWasm0(arg0, arg1));
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_newwithbyteoffsetandlength_d97e637ebe145a9a = function(arg0, arg1, arg2) {
+ const ret = new Uint8Array(getObject(arg0), arg1 >>> 0, arg2 >>> 0);
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_newwithbyteoffsetandlength_e6b7e69acd4c7354 = function(arg0, arg1, arg2) {
+ const ret = new Float32Array(getObject(arg0), arg1 >>> 0, arg2 >>> 0);
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_newwithlength_5a5efe313cfd59f1 = function(arg0) {
+ const ret = new Float32Array(arg0 >>> 0);
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_now_2c95c9de01293173 = function(arg0) {
+ const ret = getObject(arg0).now();
+ return ret;
+ };
+ imports.wbg.__wbg_performance_7a3ffd0b17f663ad = function(arg0) {
+ const ret = getObject(arg0).performance;
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_rawcontactforceevent_new = function(arg0) {
+ const ret = RawContactForceEvent.__wrap(arg0);
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_rawraycolliderintersection_new = function(arg0) {
+ const ret = RawRayColliderIntersection.__wrap(arg0);
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_set_10bad9bee0e9c58b = function(arg0, arg1, arg2) {
+ getObject(arg0).set(getObject(arg1), arg2 >>> 0);
+ };
+ imports.wbg.__wbg_set_65595bdd868b3009 = function(arg0, arg1, arg2) {
+ getObject(arg0).set(getObject(arg1), arg2 >>> 0);
+ };
+ imports.wbg.__wbg_static_accessor_GLOBAL_88a902d13a557d07 = function() {
+ const ret = typeof global === 'undefined' ? null : global;
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ };
+ imports.wbg.__wbg_static_accessor_GLOBAL_THIS_56578be7e9f832b0 = function() {
+ const ret = typeof globalThis === 'undefined' ? null : globalThis;
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ };
+ imports.wbg.__wbg_static_accessor_SELF_37c5d418e4bf5819 = function() {
+ const ret = typeof self === 'undefined' ? null : self;
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ };
+ imports.wbg.__wbg_static_accessor_WINDOW_5de37043a91a9c40 = function() {
+ const ret = typeof window === 'undefined' ? null : window;
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ };
+ imports.wbg.__wbindgen_boolean_get = function(arg0) {
+ const v = getObject(arg0);
+ const ret = typeof(v) === 'boolean' ? (v ? 1 : 0) : 2;
+ return ret;
+ };
+ imports.wbg.__wbindgen_is_function = function(arg0) {
+ const ret = typeof(getObject(arg0)) === 'function';
+ return ret;
+ };
+ imports.wbg.__wbindgen_is_undefined = function(arg0) {
+ const ret = getObject(arg0) === undefined;
+ return ret;
+ };
+ imports.wbg.__wbindgen_memory = function() {
+ const ret = wasm.memory;
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbindgen_number_get = function(arg0, arg1) {
+ const obj = getObject(arg1);
+ const ret = typeof(obj) === 'number' ? obj : undefined;
+ getDataViewMemory0().setFloat64(arg0 + 8 * 1, isLikeNone(ret) ? 0 : ret, true);
+ getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true);
+ };
+ imports.wbg.__wbindgen_number_new = function(arg0) {
+ const ret = arg0;
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbindgen_object_clone_ref = function(arg0) {
+ const ret = getObject(arg0);
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbindgen_object_drop_ref = function(arg0) {
+ takeObject(arg0);
+ };
+ imports.wbg.__wbindgen_throw = function(arg0, arg1) {
+ throw new Error(getStringFromWasm0(arg0, arg1));
+ };
+
+ return imports;
+}
+
+function __wbg_init_memory(imports, memory) {
+
+}
+
+function __wbg_finalize_init(instance, module) {
+ wasm = instance.exports;
+ __wbg_init.__wbindgen_wasm_module = module;
+ cachedDataViewMemory0 = null;
+ cachedFloat32ArrayMemory0 = null;
+ cachedInt32ArrayMemory0 = null;
+ cachedUint32ArrayMemory0 = null;
+ cachedUint8ArrayMemory0 = null;
+
+
+
+ return wasm;
+}
+
+function initSync(module) {
+ if (wasm !== undefined) return wasm;
+
+
+ if (typeof module !== 'undefined') {
+ if (Object.getPrototypeOf(module) === Object.prototype) {
+ ({module} = module)
+ } else {
+ console.warn('using deprecated parameters for `initSync()`; pass a single object instead')
+ }
+ }
+
+ const imports = __wbg_get_imports();
+
+ __wbg_init_memory(imports);
+
+ if (!(module instanceof WebAssembly.Module)) {
+ module = new WebAssembly.Module(module);
+ }
+
+ const instance = new WebAssembly.Instance(module, imports);
+
+ return __wbg_finalize_init(instance, module);
+}
+
+async function __wbg_init(module_or_path) {
+ if (wasm !== undefined) return wasm;
+
+
+ if (typeof module_or_path !== 'undefined') {
+ if (Object.getPrototypeOf(module_or_path) === Object.prototype) {
+ ({module_or_path} = module_or_path)
+ } else {
+ console.warn('using deprecated parameters for the initialization function; pass a single object instead')
+ }
+ }
+
+ if (typeof module_or_path === 'undefined') {
+ module_or_path = new URL('rapier_wasm2d_bg.wasm', import.meta.url);
+ }
+ const imports = __wbg_get_imports();
+
+ if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) {
+ module_or_path = fetch(module_or_path);
+ }
+
+ __wbg_init_memory(imports);
+
+ const { instance, module } = await __wbg_load(await module_or_path, imports);
+
+ return __wbg_finalize_init(instance, module);
+}
+
+export { initSync };
+export default __wbg_init;
diff --git a/packages/rapier2d/pkg/rapier_wasm2d_bg.wasm b/packages/rapier2d/pkg/rapier_wasm2d_bg.wasm
new file mode 100644
index 0000000000000000000000000000000000000000..9c3912c9e75702f82ed85e7b7f5046d4b8d385dc
GIT binary patch
literal 1202309
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%0DSJkqm{_FQiaK#=XZx|2{2fM#A9-gK1|m
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