@aura3d/physics-rapier 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +43 -0
- package/dist/index.d.ts +169 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +311 -0
- package/dist/index.js.map +1 -0
- package/package.json +44 -0
package/README.md
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# @aura3d/physics-rapier
|
|
2
|
+
|
|
3
|
+
Optional physical simulation for Aura3D, backed by exact
|
|
4
|
+
`@dimforge/rapier3d-compat@0.20.0`. The package is asynchronous and optional.
|
|
5
|
+
The compat build is selected because it is portable across the supported
|
|
6
|
+
bundlers without requiring each application to configure a raw-WASM loader; its
|
|
7
|
+
larger lazy payload is disclosed by the retained bundle report.
|
|
8
|
+
|
|
9
|
+
It is deliberately absent from core, product, and authored-unit arcade bundles.
|
|
10
|
+
Install and initialize it only for physical rigid bodies, joints, queries,
|
|
11
|
+
character collision, or raycast vehicles:
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
import { createRapierPhysics } from "@aura3d/physics-rapier";
|
|
15
|
+
|
|
16
|
+
const physics = await createRapierPhysics({ gravity: [0, -9.81, 0] });
|
|
17
|
+
const floor = physics.createBody({ type: "fixed", shape: { kind: "box", halfExtents: [10, 0.5, 10] } });
|
|
18
|
+
const ball = physics.createBody({ position: [0, 4, 0], shape: { kind: "sphere", radius: 0.5 } });
|
|
19
|
+
physics.step(1 / 60);
|
|
20
|
+
physics.dispose();
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
This is physical simulation. `game.racing` and the default authored-unit arcade
|
|
24
|
+
helpers remain separate and do not claim physical tyre, mass, or force semantics.
|
|
25
|
+
|
|
26
|
+
## Public API
|
|
27
|
+
|
|
28
|
+
- `createRapierPhysics(options?)` lazily initializes Rapier and returns the sole
|
|
29
|
+
Aura3D-owned physical-world adapter.
|
|
30
|
+
- `RapierPhysics` owns rigid bodies, colliders, stepping, ray queries, fixed
|
|
31
|
+
joints, native character controllers, native vehicle controllers, and final
|
|
32
|
+
disposal.
|
|
33
|
+
- `RapierBody` exposes explicit transform, velocity, impulse, and removal
|
|
34
|
+
operations without hiding Rapier's authored-unit physical semantics.
|
|
35
|
+
- `rawModule` and `rawWorld` are documented escape hatches for unsupported
|
|
36
|
+
Rapier features; no private import is required.
|
|
37
|
+
|
|
38
|
+
## Verification
|
|
39
|
+
|
|
40
|
+
Run `pnpm exec vitest run tests/unit/physics-rapier` for adapter and dependency-
|
|
41
|
+
boundary coverage. Run `pnpm exec playwright test
|
|
42
|
+
tests/browser/optional-rapier-physics.spec.ts` for cold/cached initialization,
|
|
43
|
+
browser queries/controllers, repeated disposal, and console-error evidence.
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import type * as Rapier from "@dimforge/rapier3d-compat";
|
|
2
|
+
export type RapierModule = typeof import("@dimforge/rapier3d-compat");
|
|
3
|
+
export type PhysicsVec3 = readonly [number, number, number];
|
|
4
|
+
export type RapierShapeSpec = {
|
|
5
|
+
readonly kind: "box";
|
|
6
|
+
readonly halfExtents: PhysicsVec3;
|
|
7
|
+
} | {
|
|
8
|
+
readonly kind: "sphere";
|
|
9
|
+
readonly radius: number;
|
|
10
|
+
} | {
|
|
11
|
+
readonly kind: "capsule";
|
|
12
|
+
readonly halfHeight: number;
|
|
13
|
+
readonly radius: number;
|
|
14
|
+
} | {
|
|
15
|
+
readonly kind: "plane";
|
|
16
|
+
readonly normal: PhysicsVec3;
|
|
17
|
+
readonly constant: number;
|
|
18
|
+
} | {
|
|
19
|
+
readonly kind: "mesh";
|
|
20
|
+
readonly vertices: readonly PhysicsVec3[];
|
|
21
|
+
readonly indices: readonly number[];
|
|
22
|
+
} | {
|
|
23
|
+
readonly kind: "convex-hull";
|
|
24
|
+
readonly vertices: readonly PhysicsVec3[];
|
|
25
|
+
} | {
|
|
26
|
+
readonly kind: "heightfield";
|
|
27
|
+
readonly rows: number;
|
|
28
|
+
readonly columns: number;
|
|
29
|
+
readonly heights: readonly number[];
|
|
30
|
+
readonly cellSize: number;
|
|
31
|
+
};
|
|
32
|
+
export interface RapierRigidBodySpec {
|
|
33
|
+
readonly type?: "dynamic" | "fixed" | "kinematic-position" | "kinematic-velocity";
|
|
34
|
+
readonly position?: PhysicsVec3;
|
|
35
|
+
readonly rotation?: readonly [number, number, number, number];
|
|
36
|
+
readonly linearVelocity?: PhysicsVec3;
|
|
37
|
+
readonly angularVelocity?: PhysicsVec3;
|
|
38
|
+
readonly linearDamping?: number;
|
|
39
|
+
readonly angularDamping?: number;
|
|
40
|
+
readonly ccd?: boolean;
|
|
41
|
+
readonly canSleep?: boolean;
|
|
42
|
+
readonly mass?: number;
|
|
43
|
+
readonly principalAngularInertia?: PhysicsVec3;
|
|
44
|
+
}
|
|
45
|
+
export interface RapierColliderSpec {
|
|
46
|
+
readonly shape: RapierShapeSpec;
|
|
47
|
+
readonly density?: number;
|
|
48
|
+
readonly friction?: number;
|
|
49
|
+
readonly restitution?: number;
|
|
50
|
+
readonly sensor?: boolean;
|
|
51
|
+
readonly collisionGroups?: number;
|
|
52
|
+
}
|
|
53
|
+
export interface RapierBodySpec extends RapierRigidBodySpec, RapierColliderSpec {
|
|
54
|
+
}
|
|
55
|
+
export type RapierJointSpec = {
|
|
56
|
+
readonly type: "fixed" | "hinge" | "slider" | "spring" | "ball-socket" | "motorised-hinge";
|
|
57
|
+
readonly localAnchorA: PhysicsVec3;
|
|
58
|
+
readonly localAnchorB: PhysicsVec3;
|
|
59
|
+
readonly axis: PhysicsVec3;
|
|
60
|
+
readonly restLength: number;
|
|
61
|
+
readonly stiffness: number;
|
|
62
|
+
readonly damping: number;
|
|
63
|
+
readonly motorSpeed: number;
|
|
64
|
+
readonly maxMotorTorque: number;
|
|
65
|
+
readonly limits?: readonly [number, number];
|
|
66
|
+
};
|
|
67
|
+
export interface RapierPhysicsOptions {
|
|
68
|
+
readonly gravity?: PhysicsVec3;
|
|
69
|
+
readonly moduleLoader?: (() => Promise<RapierModule>) | undefined;
|
|
70
|
+
}
|
|
71
|
+
export declare class RapierBodyHandle {
|
|
72
|
+
#private;
|
|
73
|
+
constructor(world: RapierPhysicsWorld, body: Rapier.RigidBody);
|
|
74
|
+
get id(): number;
|
|
75
|
+
position(): PhysicsVec3;
|
|
76
|
+
velocity(): PhysicsVec3;
|
|
77
|
+
sleeping(): boolean;
|
|
78
|
+
applyForce(force: PhysicsVec3): this;
|
|
79
|
+
applyImpulse(impulse: PhysicsVec3): this;
|
|
80
|
+
setVelocity(velocity: PhysicsVec3): this;
|
|
81
|
+
setPosition(position: PhysicsVec3): this;
|
|
82
|
+
wake(): this;
|
|
83
|
+
sleep(): this;
|
|
84
|
+
remove(): void;
|
|
85
|
+
/** Stable typed escape hatch. The caller does not own or free this object. */
|
|
86
|
+
unsafeRapierBody(): Rapier.RigidBody;
|
|
87
|
+
/** The first attached collider, retained for the one-shape convenience API. */
|
|
88
|
+
unsafeRapierCollider(): Rapier.Collider;
|
|
89
|
+
}
|
|
90
|
+
export declare class RapierColliderHandle {
|
|
91
|
+
#private;
|
|
92
|
+
constructor(world: RapierPhysicsWorld, collider: Rapier.Collider);
|
|
93
|
+
get id(): number;
|
|
94
|
+
remove(): void;
|
|
95
|
+
/** Stable typed escape hatch. The adapter owns and frees this object. */
|
|
96
|
+
unsafeRapierCollider(): Rapier.Collider;
|
|
97
|
+
}
|
|
98
|
+
export declare class RapierJointHandle {
|
|
99
|
+
#private;
|
|
100
|
+
constructor(world: RapierPhysicsWorld, joint: Rapier.ImpulseJoint, module: RapierModule);
|
|
101
|
+
get id(): number;
|
|
102
|
+
remove(): void;
|
|
103
|
+
configureMotor(speed: number, maxTorque: number): void;
|
|
104
|
+
/** Stable typed escape hatch. The adapter owns and frees this object. */
|
|
105
|
+
unsafeRapierJoint(): Rapier.ImpulseJoint;
|
|
106
|
+
}
|
|
107
|
+
export interface RapierRayHit {
|
|
108
|
+
readonly body: RapierBodyHandle;
|
|
109
|
+
readonly colliderHandle: number;
|
|
110
|
+
readonly timeOfImpact: number;
|
|
111
|
+
readonly point: PhysicsVec3;
|
|
112
|
+
}
|
|
113
|
+
export interface RapierCharacterMovement {
|
|
114
|
+
readonly requested: PhysicsVec3;
|
|
115
|
+
readonly applied: PhysicsVec3;
|
|
116
|
+
readonly grounded: boolean;
|
|
117
|
+
readonly collisions: number;
|
|
118
|
+
readonly nextPosition: PhysicsVec3;
|
|
119
|
+
}
|
|
120
|
+
export declare class RapierCharacterControllerHandle {
|
|
121
|
+
#private;
|
|
122
|
+
readonly raw: Rapier.KinematicCharacterController;
|
|
123
|
+
constructor(world: RapierPhysicsWorld, raw: Rapier.KinematicCharacterController);
|
|
124
|
+
enableAutostep(maxHeight: number, minWidth: number, includeDynamicBodies?: boolean): this;
|
|
125
|
+
enableSnapToGround(distance: number): this;
|
|
126
|
+
setMaxSlopeClimbAngle(radians: number): this;
|
|
127
|
+
move(character: RapierColliderHandle | RapierBodyHandle, requested: PhysicsVec3): RapierCharacterMovement;
|
|
128
|
+
dispose(): void;
|
|
129
|
+
}
|
|
130
|
+
export declare class RapierVehicleControllerHandle {
|
|
131
|
+
#private;
|
|
132
|
+
readonly raw: Rapier.DynamicRayCastVehicleController;
|
|
133
|
+
constructor(world: RapierPhysicsWorld, raw: Rapier.DynamicRayCastVehicleController);
|
|
134
|
+
addWheel(connection: PhysicsVec3, direction: PhysicsVec3, axle: PhysicsVec3, restLength: number, radius: number): this;
|
|
135
|
+
update(dt: number): void;
|
|
136
|
+
dispose(): void;
|
|
137
|
+
}
|
|
138
|
+
export declare class RapierPhysicsWorld {
|
|
139
|
+
#private;
|
|
140
|
+
constructor(module: RapierModule, gravity: PhysicsVec3);
|
|
141
|
+
get disposed(): boolean;
|
|
142
|
+
createRigidBody(spec?: RapierRigidBodySpec): RapierBodyHandle;
|
|
143
|
+
createCollider(body: RapierBodyHandle, spec: RapierColliderSpec): RapierColliderHandle;
|
|
144
|
+
createBody(spec: RapierBodySpec): RapierBodyHandle;
|
|
145
|
+
removeBody(handle: RapierBodyHandle): void;
|
|
146
|
+
removeCollider(handle: RapierColliderHandle): void;
|
|
147
|
+
createJoint(spec: RapierJointSpec, a: RapierBodyHandle, b: RapierBodyHandle): RapierJointHandle;
|
|
148
|
+
removeJoint(handle: RapierJointHandle): void;
|
|
149
|
+
createFixedJoint(a: RapierBodyHandle, b: RapierBodyHandle): Rapier.ImpulseJoint;
|
|
150
|
+
createCharacterController(offset?: number): RapierCharacterControllerHandle;
|
|
151
|
+
removeCharacterController(value: RapierCharacterControllerHandle): void;
|
|
152
|
+
createVehicleController(chassis: RapierBodyHandle): RapierVehicleControllerHandle;
|
|
153
|
+
removeVehicleController(value: RapierVehicleControllerHandle): void;
|
|
154
|
+
raycast(origin: PhysicsVec3, direction: PhysicsVec3, maxDistance?: number): RapierRayHit | undefined;
|
|
155
|
+
step(dt?: number): void;
|
|
156
|
+
setGravity(gravity: PhysicsVec3): void;
|
|
157
|
+
bodies(): readonly RapierBodyHandle[];
|
|
158
|
+
/** Stable typed escape hatch. The adapter owns and frees the returned world. */
|
|
159
|
+
unsafeRapierWorld(): Rapier.World;
|
|
160
|
+
dispose(): void;
|
|
161
|
+
}
|
|
162
|
+
export declare function createRapierPhysics(options?: RapierPhysicsOptions): Promise<RapierPhysicsWorld>;
|
|
163
|
+
/**
|
|
164
|
+
* Synchronous construction after this ESM module's one-time top-level WASM initialization.
|
|
165
|
+
* This preserves the established `new PhysicsWorld()` ergonomics without hiding a second
|
|
166
|
+
* JavaScript solver behind the synchronous API.
|
|
167
|
+
*/
|
|
168
|
+
export declare function createRapierPhysicsSync(options?: Omit<RapierPhysicsOptions, "moduleLoader">): RapierPhysicsWorld;
|
|
169
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/physics-rapier/src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
const defaultRapierModule = await import("@dimforge/rapier3d-compat");
|
|
2
|
+
const defaultRapierInit = defaultRapierModule.init;
|
|
3
|
+
if (defaultRapierInit)
|
|
4
|
+
await defaultRapierInit({});
|
|
5
|
+
function finite(value, label) {
|
|
6
|
+
if (!Number.isFinite(value))
|
|
7
|
+
throw new TypeError(`${label} must be finite.`);
|
|
8
|
+
return value;
|
|
9
|
+
}
|
|
10
|
+
function vec(value, label) {
|
|
11
|
+
return { x: finite(value[0], `${label}[0]`), y: finite(value[1], `${label}[1]`), z: finite(value[2], `${label}[2]`) };
|
|
12
|
+
}
|
|
13
|
+
export class RapierBodyHandle {
|
|
14
|
+
#body;
|
|
15
|
+
#world;
|
|
16
|
+
constructor(world, body) { this.#world = world; this.#body = body; }
|
|
17
|
+
get id() { return this.#body.handle; }
|
|
18
|
+
position() { const p = this.#body.translation(); return [p.x, p.y, p.z]; }
|
|
19
|
+
velocity() { const p = this.#body.linvel(); return [p.x, p.y, p.z]; }
|
|
20
|
+
sleeping() { return this.#body.isSleeping(); }
|
|
21
|
+
applyForce(force) { this.#body.addForce(vec(force, "force"), true); return this; }
|
|
22
|
+
applyImpulse(impulse) { this.#body.applyImpulse(vec(impulse, "impulse"), true); return this; }
|
|
23
|
+
setVelocity(velocity) { this.#body.setLinvel(vec(velocity, "velocity"), true); return this; }
|
|
24
|
+
setPosition(position) { this.#body.setTranslation(vec(position, "position"), true); return this; }
|
|
25
|
+
wake() { this.#body.wakeUp(); return this; }
|
|
26
|
+
sleep() { this.#body.sleep(); return this; }
|
|
27
|
+
remove() { this.#world.removeBody(this); }
|
|
28
|
+
/** Stable typed escape hatch. The caller does not own or free this object. */
|
|
29
|
+
unsafeRapierBody() { return this.#body; }
|
|
30
|
+
/** The first attached collider, retained for the one-shape convenience API. */
|
|
31
|
+
unsafeRapierCollider() {
|
|
32
|
+
const collider = this.#body.collider(0);
|
|
33
|
+
if (!collider)
|
|
34
|
+
throw new Error("Rapier body has no collider.");
|
|
35
|
+
return collider;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
export class RapierColliderHandle {
|
|
39
|
+
#collider;
|
|
40
|
+
#world;
|
|
41
|
+
constructor(world, collider) { this.#world = world; this.#collider = collider; }
|
|
42
|
+
get id() { return this.#collider.handle; }
|
|
43
|
+
remove() { this.#world.removeCollider(this); }
|
|
44
|
+
/** Stable typed escape hatch. The adapter owns and frees this object. */
|
|
45
|
+
unsafeRapierCollider() { return this.#collider; }
|
|
46
|
+
}
|
|
47
|
+
export class RapierJointHandle {
|
|
48
|
+
#joint;
|
|
49
|
+
#world;
|
|
50
|
+
#module;
|
|
51
|
+
constructor(world, joint, module) { this.#world = world; this.#joint = joint; this.#module = module; }
|
|
52
|
+
get id() { return this.#joint.handle; }
|
|
53
|
+
remove() { this.#world.removeJoint(this); }
|
|
54
|
+
configureMotor(speed, maxTorque) {
|
|
55
|
+
const joint = this.#joint;
|
|
56
|
+
joint.configureMotorModel(this.#module.MotorModel.ForceBased);
|
|
57
|
+
joint.setMotorMaxForce(finite(maxTorque, "maximum motor torque"));
|
|
58
|
+
joint.configureMotorVelocity(finite(speed, "motor speed"), 1);
|
|
59
|
+
}
|
|
60
|
+
/** Stable typed escape hatch. The adapter owns and frees this object. */
|
|
61
|
+
unsafeRapierJoint() { return this.#joint; }
|
|
62
|
+
}
|
|
63
|
+
export class RapierCharacterControllerHandle {
|
|
64
|
+
#world;
|
|
65
|
+
raw;
|
|
66
|
+
constructor(world, raw) { this.#world = world; this.raw = raw; }
|
|
67
|
+
enableAutostep(maxHeight, minWidth, includeDynamicBodies = false) { this.raw.enableAutostep(maxHeight, minWidth, includeDynamicBodies); return this; }
|
|
68
|
+
enableSnapToGround(distance) { this.raw.enableSnapToGround(distance); return this; }
|
|
69
|
+
setMaxSlopeClimbAngle(radians) { this.raw.setMaxSlopeClimbAngle(radians); return this; }
|
|
70
|
+
move(character, requested) {
|
|
71
|
+
const desired = vec(requested, "character movement");
|
|
72
|
+
this.raw.computeColliderMovement(character.unsafeRapierCollider(), desired);
|
|
73
|
+
const movement = this.raw.computedMovement();
|
|
74
|
+
const body = character.unsafeRapierCollider().parent();
|
|
75
|
+
if (!body)
|
|
76
|
+
throw new Error("Character collider must be attached to a rigid body.");
|
|
77
|
+
const current = body.translation();
|
|
78
|
+
const next = { x: current.x + movement.x, y: current.y + movement.y, z: current.z + movement.z };
|
|
79
|
+
body.setNextKinematicTranslation(next);
|
|
80
|
+
return {
|
|
81
|
+
requested: [...requested],
|
|
82
|
+
applied: [movement.x, movement.y, movement.z],
|
|
83
|
+
grounded: this.raw.computedGrounded(),
|
|
84
|
+
collisions: this.raw.numComputedCollisions(),
|
|
85
|
+
nextPosition: [next.x, next.y, next.z]
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
dispose() { this.#world.removeCharacterController(this); }
|
|
89
|
+
}
|
|
90
|
+
export class RapierVehicleControllerHandle {
|
|
91
|
+
#world;
|
|
92
|
+
raw;
|
|
93
|
+
constructor(world, raw) { this.#world = world; this.raw = raw; }
|
|
94
|
+
addWheel(connection, direction, axle, restLength, radius) {
|
|
95
|
+
this.raw.addWheel(vec(connection, "connection"), vec(direction, "direction"), vec(axle, "axle"), finite(restLength, "restLength"), finite(radius, "radius"));
|
|
96
|
+
return this;
|
|
97
|
+
}
|
|
98
|
+
update(dt) { this.raw.updateVehicle(finite(dt, "dt")); }
|
|
99
|
+
dispose() { this.#world.removeVehicleController(this); }
|
|
100
|
+
}
|
|
101
|
+
export class RapierPhysicsWorld {
|
|
102
|
+
#module;
|
|
103
|
+
#world;
|
|
104
|
+
#bodies = new Map();
|
|
105
|
+
#colliders = new Map();
|
|
106
|
+
#joints = new Map();
|
|
107
|
+
#characters = new Set();
|
|
108
|
+
#vehicles = new Set();
|
|
109
|
+
#disposed = false;
|
|
110
|
+
constructor(module, gravity) { this.#module = module; this.#world = new module.World(vec(gravity, "gravity")); }
|
|
111
|
+
get disposed() { return this.#disposed; }
|
|
112
|
+
createRigidBody(spec = {}) {
|
|
113
|
+
this.#assertAlive();
|
|
114
|
+
const R = this.#module;
|
|
115
|
+
const descriptor = spec.type === "fixed" ? R.RigidBodyDesc.fixed() : spec.type === "kinematic-position" ? R.RigidBodyDesc.kinematicPositionBased() : spec.type === "kinematic-velocity" ? R.RigidBodyDesc.kinematicVelocityBased() : R.RigidBodyDesc.dynamic();
|
|
116
|
+
if (spec.position)
|
|
117
|
+
descriptor.setTranslation(...spec.position.map((value, index) => finite(value, `position[${index}]`)));
|
|
118
|
+
if (spec.rotation)
|
|
119
|
+
descriptor.setRotation({ x: finite(spec.rotation[0], "rotation[0]"), y: finite(spec.rotation[1], "rotation[1]"), z: finite(spec.rotation[2], "rotation[2]"), w: finite(spec.rotation[3], "rotation[3]") });
|
|
120
|
+
if (spec.linearVelocity)
|
|
121
|
+
descriptor.setLinvel(...spec.linearVelocity.map((value, index) => finite(value, `linearVelocity[${index}]`)));
|
|
122
|
+
if (spec.angularVelocity)
|
|
123
|
+
descriptor.setAngvel(vec(spec.angularVelocity, "angularVelocity"));
|
|
124
|
+
if (spec.linearDamping !== undefined)
|
|
125
|
+
descriptor.setLinearDamping(finite(spec.linearDamping, "linearDamping"));
|
|
126
|
+
if (spec.angularDamping !== undefined)
|
|
127
|
+
descriptor.setAngularDamping(finite(spec.angularDamping, "angularDamping"));
|
|
128
|
+
if (spec.ccd !== undefined)
|
|
129
|
+
descriptor.setCcdEnabled(spec.ccd);
|
|
130
|
+
if (spec.canSleep !== undefined)
|
|
131
|
+
descriptor.setCanSleep(spec.canSleep);
|
|
132
|
+
if (spec.mass !== undefined && spec.principalAngularInertia) {
|
|
133
|
+
descriptor.setAdditionalMassProperties(finite(spec.mass, "mass"), { x: 0, y: 0, z: 0 }, vec(spec.principalAngularInertia, "principal angular inertia"), { x: 0, y: 0, z: 0, w: 1 });
|
|
134
|
+
}
|
|
135
|
+
else if (spec.mass !== undefined) {
|
|
136
|
+
descriptor.setAdditionalMass(finite(spec.mass, "mass"));
|
|
137
|
+
}
|
|
138
|
+
const body = this.#world.createRigidBody(descriptor);
|
|
139
|
+
const handle = new RapierBodyHandle(this, body);
|
|
140
|
+
this.#bodies.set(body.handle, handle);
|
|
141
|
+
return handle;
|
|
142
|
+
}
|
|
143
|
+
createCollider(body, spec) {
|
|
144
|
+
this.#assertAlive();
|
|
145
|
+
const R = this.#module;
|
|
146
|
+
const shape = spec.shape;
|
|
147
|
+
let collider;
|
|
148
|
+
if (shape.kind === "box")
|
|
149
|
+
collider = R.ColliderDesc.cuboid(...shape.halfExtents);
|
|
150
|
+
else if (shape.kind === "sphere")
|
|
151
|
+
collider = R.ColliderDesc.ball(shape.radius);
|
|
152
|
+
else if (shape.kind === "capsule")
|
|
153
|
+
collider = R.ColliderDesc.capsule(shape.halfHeight, shape.radius);
|
|
154
|
+
else if (shape.kind === "plane") {
|
|
155
|
+
collider = new R.ColliderDesc(new R.HalfSpace(vec(shape.normal, "plane normal")));
|
|
156
|
+
collider.setTranslation(shape.normal[0] * shape.constant, shape.normal[1] * shape.constant, shape.normal[2] * shape.constant);
|
|
157
|
+
}
|
|
158
|
+
else if (shape.kind === "mesh") {
|
|
159
|
+
collider = R.ColliderDesc.trimesh(flattenVertices(shape.vertices), new Uint32Array(shape.indices));
|
|
160
|
+
}
|
|
161
|
+
else if (shape.kind === "convex-hull") {
|
|
162
|
+
const hull = R.ColliderDesc.convexHull(flattenVertices(shape.vertices));
|
|
163
|
+
if (!hull)
|
|
164
|
+
throw new Error("Rapier could not construct the requested convex hull.");
|
|
165
|
+
collider = hull;
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
collider = R.ColliderDesc.heightfield(shape.rows - 1, shape.columns - 1, new Float32Array(shape.heights), { x: shape.cellSize * (shape.columns - 1), y: 1, z: shape.cellSize * (shape.rows - 1) });
|
|
169
|
+
}
|
|
170
|
+
if (spec.density !== undefined)
|
|
171
|
+
collider.setDensity(finite(spec.density, "density"));
|
|
172
|
+
if (spec.friction !== undefined)
|
|
173
|
+
collider.setFriction(finite(spec.friction, "friction"));
|
|
174
|
+
if (spec.restitution !== undefined)
|
|
175
|
+
collider.setRestitution(finite(spec.restitution, "restitution"));
|
|
176
|
+
if (spec.sensor !== undefined)
|
|
177
|
+
collider.setSensor(spec.sensor);
|
|
178
|
+
if (spec.collisionGroups !== undefined)
|
|
179
|
+
collider.setCollisionGroups(spec.collisionGroups >>> 0);
|
|
180
|
+
collider.setFrictionCombineRule(R.CoefficientCombineRule.Multiply);
|
|
181
|
+
collider.setRestitutionCombineRule(R.CoefficientCombineRule.Max);
|
|
182
|
+
const rawCollider = this.#world.createCollider(collider, body.unsafeRapierBody());
|
|
183
|
+
// Rapier applies descriptor-level additional mass at the next mass-property
|
|
184
|
+
// recomputation. Do that before the first step so initial velocity, force, and
|
|
185
|
+
// inertia never run for one frame against a zero-mass dynamic body.
|
|
186
|
+
body.unsafeRapierBody().recomputeMassPropertiesFromColliders();
|
|
187
|
+
const handle = new RapierColliderHandle(this, rawCollider);
|
|
188
|
+
this.#colliders.set(rawCollider.handle, handle);
|
|
189
|
+
return handle;
|
|
190
|
+
}
|
|
191
|
+
createBody(spec) {
|
|
192
|
+
const body = this.createRigidBody(spec);
|
|
193
|
+
this.createCollider(body, spec);
|
|
194
|
+
return body;
|
|
195
|
+
}
|
|
196
|
+
removeBody(handle) {
|
|
197
|
+
this.#assertAlive();
|
|
198
|
+
const raw = handle.unsafeRapierBody();
|
|
199
|
+
for (let index = 0; index < raw.numColliders(); index += 1)
|
|
200
|
+
this.#colliders.delete(raw.collider(index).handle);
|
|
201
|
+
this.#world.removeRigidBody(raw);
|
|
202
|
+
this.#bodies.delete(raw.handle);
|
|
203
|
+
}
|
|
204
|
+
removeCollider(handle) { this.#assertAlive(); const raw = handle.unsafeRapierCollider(); this.#world.removeCollider(raw, true); this.#colliders.delete(raw.handle); }
|
|
205
|
+
createJoint(spec, a, b) {
|
|
206
|
+
this.#assertAlive();
|
|
207
|
+
const R = this.#module;
|
|
208
|
+
const anchorA = vec(spec.localAnchorA, "joint anchor A");
|
|
209
|
+
const anchorB = vec(spec.localAnchorB, "joint anchor B");
|
|
210
|
+
const axis = vec(spec.axis, "joint axis");
|
|
211
|
+
let data;
|
|
212
|
+
if (spec.type === "fixed")
|
|
213
|
+
data = R.JointData.fixed(anchorA, { x: 0, y: 0, z: 0, w: 1 }, anchorB, { x: 0, y: 0, z: 0, w: 1 });
|
|
214
|
+
else if (spec.type === "slider")
|
|
215
|
+
data = R.JointData.prismatic(anchorA, anchorB, axis);
|
|
216
|
+
else if (spec.type === "spring") {
|
|
217
|
+
// Aura exposes normalized game-facing stiffness/damping; Rapier expects physical
|
|
218
|
+
// coefficients. The adapter owns this unit conversion so public descriptors remain
|
|
219
|
+
// backend-neutral.
|
|
220
|
+
data = R.JointData.spring(spec.restLength, spec.stiffness * 100, spec.damping * 10, anchorA, anchorB);
|
|
221
|
+
}
|
|
222
|
+
else if (spec.type === "ball-socket")
|
|
223
|
+
data = R.JointData.spherical(anchorA, anchorB);
|
|
224
|
+
else
|
|
225
|
+
data = R.JointData.revolute(anchorA, anchorB, axis);
|
|
226
|
+
const raw = this.#world.createImpulseJoint(data, a.unsafeRapierBody(), b.unsafeRapierBody(), true);
|
|
227
|
+
const unit = raw;
|
|
228
|
+
if (spec.limits && "setLimits" in unit)
|
|
229
|
+
unit.setLimits(spec.limits[0], spec.limits[1]);
|
|
230
|
+
const handle = new RapierJointHandle(this, raw, R);
|
|
231
|
+
if (spec.type === "motorised-hinge")
|
|
232
|
+
handle.configureMotor(spec.motorSpeed, spec.maxMotorTorque);
|
|
233
|
+
this.#joints.set(raw.handle, handle);
|
|
234
|
+
return handle;
|
|
235
|
+
}
|
|
236
|
+
removeJoint(handle) { this.#assertAlive(); const raw = handle.unsafeRapierJoint(); this.#world.removeImpulseJoint(raw, true); this.#joints.delete(raw.handle); }
|
|
237
|
+
createFixedJoint(a, b) {
|
|
238
|
+
this.#assertAlive();
|
|
239
|
+
return this.#world.createImpulseJoint(this.#module.JointData.fixed({ x: 0, y: 0, z: 0 }, { x: 0, y: 0, z: 0, w: 1 }, { x: 0, y: 0, z: 0 }, { x: 0, y: 0, z: 0, w: 1 }), a.unsafeRapierBody(), b.unsafeRapierBody(), true);
|
|
240
|
+
}
|
|
241
|
+
createCharacterController(offset = 0.01) { this.#assertAlive(); const value = new RapierCharacterControllerHandle(this, this.#world.createCharacterController(offset)); this.#characters.add(value); return value; }
|
|
242
|
+
removeCharacterController(value) { if (!this.#characters.delete(value))
|
|
243
|
+
return; this.#world.removeCharacterController(value.raw); }
|
|
244
|
+
createVehicleController(chassis) { this.#assertAlive(); const value = new RapierVehicleControllerHandle(this, this.#world.createVehicleController(chassis.unsafeRapierBody())); this.#vehicles.add(value); return value; }
|
|
245
|
+
removeVehicleController(value) { if (!this.#vehicles.delete(value))
|
|
246
|
+
return; this.#world.removeVehicleController(value.raw); }
|
|
247
|
+
raycast(origin, direction, maxDistance = Number.POSITIVE_INFINITY) {
|
|
248
|
+
this.#assertAlive();
|
|
249
|
+
const ray = new this.#module.Ray(vec(origin, "origin"), vec(direction, "direction"));
|
|
250
|
+
const hit = this.#world.castRay(ray, maxDistance, true);
|
|
251
|
+
if (!hit)
|
|
252
|
+
return undefined;
|
|
253
|
+
const collider = this.#world.getCollider(hit.collider.handle);
|
|
254
|
+
const rawBody = collider?.parent();
|
|
255
|
+
if (!rawBody)
|
|
256
|
+
return undefined;
|
|
257
|
+
const body = this.#bodies.get(rawBody.handle);
|
|
258
|
+
if (!body)
|
|
259
|
+
return undefined;
|
|
260
|
+
const point = ray.pointAt(hit.timeOfImpact);
|
|
261
|
+
return { body, colliderHandle: hit.collider.handle, timeOfImpact: hit.timeOfImpact, point: [point.x, point.y, point.z] };
|
|
262
|
+
}
|
|
263
|
+
step(dt = 1 / 60) { this.#assertAlive(); this.#world.timestep = finite(dt, "dt"); this.#world.step(); }
|
|
264
|
+
setGravity(gravity) { this.#assertAlive(); this.#world.gravity = vec(gravity, "gravity"); }
|
|
265
|
+
bodies() { return [...this.#bodies.values()]; }
|
|
266
|
+
/** Stable typed escape hatch. The adapter owns and frees the returned world. */
|
|
267
|
+
unsafeRapierWorld() { this.#assertAlive(); return this.#world; }
|
|
268
|
+
dispose() {
|
|
269
|
+
if (this.#disposed)
|
|
270
|
+
return;
|
|
271
|
+
for (const value of [...this.#vehicles])
|
|
272
|
+
this.removeVehicleController(value);
|
|
273
|
+
for (const value of [...this.#characters])
|
|
274
|
+
this.removeCharacterController(value);
|
|
275
|
+
this.#joints.clear();
|
|
276
|
+
this.#colliders.clear();
|
|
277
|
+
this.#bodies.clear();
|
|
278
|
+
this.#world.free();
|
|
279
|
+
this.#disposed = true;
|
|
280
|
+
}
|
|
281
|
+
#assertAlive() { if (this.#disposed)
|
|
282
|
+
throw new Error("RapierPhysicsWorld is disposed."); }
|
|
283
|
+
}
|
|
284
|
+
function flattenVertices(vertices) {
|
|
285
|
+
const flattened = new Float32Array(vertices.length * 3);
|
|
286
|
+
for (let index = 0; index < vertices.length; index += 1) {
|
|
287
|
+
const vertex = vertices[index];
|
|
288
|
+
flattened[index * 3] = finite(vertex[0], `vertex ${index}[0]`);
|
|
289
|
+
flattened[index * 3 + 1] = finite(vertex[1], `vertex ${index}[1]`);
|
|
290
|
+
flattened[index * 3 + 2] = finite(vertex[2], `vertex ${index}[2]`);
|
|
291
|
+
}
|
|
292
|
+
return flattened;
|
|
293
|
+
}
|
|
294
|
+
export async function createRapierPhysics(options = {}) {
|
|
295
|
+
const module = await (options.moduleLoader ?? (() => import("@dimforge/rapier3d-compat")))();
|
|
296
|
+
// The official compat build exposes explicit async WASM initialization and
|
|
297
|
+
// avoids forcing each consuming bundler to configure a raw `.wasm` loader.
|
|
298
|
+
const explicitInit = module.init;
|
|
299
|
+
if (explicitInit)
|
|
300
|
+
await explicitInit({});
|
|
301
|
+
return new RapierPhysicsWorld(module, options.gravity ?? [0, -9.81, 0]);
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Synchronous construction after this ESM module's one-time top-level WASM initialization.
|
|
305
|
+
* This preserves the established `new PhysicsWorld()` ergonomics without hiding a second
|
|
306
|
+
* JavaScript solver behind the synchronous API.
|
|
307
|
+
*/
|
|
308
|
+
export function createRapierPhysicsSync(options = {}) {
|
|
309
|
+
return new RapierPhysicsWorld(defaultRapierModule, options.gravity ?? [0, -9.81, 0]);
|
|
310
|
+
}
|
|
311
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/physics-rapier/src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@aura3d/physics-rapier",
|
|
3
|
+
"version": "2.0.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"types": "./dist/index.d.ts",
|
|
7
|
+
"sideEffects": false,
|
|
8
|
+
"dependencies": {
|
|
9
|
+
"@dimforge/rapier3d-compat": "0.20.0"
|
|
10
|
+
},
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"types": "./dist/index.d.ts",
|
|
14
|
+
"import": "./dist/index.js"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"description": "Optional asynchronously loaded Rapier physical-simulation adapter for Aura3D.",
|
|
18
|
+
"keywords": [
|
|
19
|
+
"aura3d",
|
|
20
|
+
"physics",
|
|
21
|
+
"rapier",
|
|
22
|
+
"wasm",
|
|
23
|
+
"rigid-body",
|
|
24
|
+
"character-controller",
|
|
25
|
+
"vehicle-controller"
|
|
26
|
+
],
|
|
27
|
+
"homepage": "https://aura3d.auraone.ai",
|
|
28
|
+
"repository": {
|
|
29
|
+
"type": "git",
|
|
30
|
+
"url": "git+https://github.com/auraoneai/aura3d.git",
|
|
31
|
+
"directory": "packages/physics-rapier"
|
|
32
|
+
},
|
|
33
|
+
"bugs": {
|
|
34
|
+
"url": "https://github.com/auraoneai/aura3d/issues"
|
|
35
|
+
},
|
|
36
|
+
"license": "MIT",
|
|
37
|
+
"publishConfig": {
|
|
38
|
+
"access": "public"
|
|
39
|
+
},
|
|
40
|
+
"files": [
|
|
41
|
+
"README.md",
|
|
42
|
+
"dist"
|
|
43
|
+
]
|
|
44
|
+
}
|