52 lines
1.4 KiB
TypeScript
52 lines
1.4 KiB
TypeScript
|
|
import type {Testbed} from "../Testbed";
|
||
|
|
|
||
|
|
type RAPIER_API = typeof import("@dimforge/rapier2d");
|
||
|
|
|
||
|
|
export function initWorld(RAPIER: RAPIER_API, testbed: Testbed) {
|
||
|
|
let gravity = new RAPIER.Vector2(0.0, -9.81);
|
||
|
|
let world = new RAPIER.World(gravity);
|
||
|
|
|
||
|
|
/*
|
||
|
|
* The ground
|
||
|
|
*/
|
||
|
|
let ground_size = 1.8;
|
||
|
|
let ground_height = 1.0;
|
||
|
|
|
||
|
|
let bodyDesc = RAPIER.RigidBodyDesc.fixed().setTranslation(
|
||
|
|
0.0,
|
||
|
|
-ground_height,
|
||
|
|
);
|
||
|
|
let body = world.createRigidBody(bodyDesc);
|
||
|
|
let colliderDesc = RAPIER.ColliderDesc.cuboid(ground_size, ground_height);
|
||
|
|
world.createCollider(colliderDesc, body);
|
||
|
|
|
||
|
|
/*
|
||
|
|
* A rectangle that only rotates along the `x` axis.
|
||
|
|
*/
|
||
|
|
bodyDesc = RAPIER.RigidBodyDesc.dynamic()
|
||
|
|
.setTranslation(0.0, 3.0)
|
||
|
|
.lockTranslations();
|
||
|
|
body = world.createRigidBody(bodyDesc);
|
||
|
|
colliderDesc = RAPIER.ColliderDesc.cuboid(2.0, 0.6);
|
||
|
|
world.createCollider(colliderDesc, body);
|
||
|
|
|
||
|
|
/*
|
||
|
|
* A cuboid that cannot rotate.
|
||
|
|
*/
|
||
|
|
bodyDesc = RAPIER.RigidBodyDesc.dynamic()
|
||
|
|
.setTranslation(0.4, 5.0)
|
||
|
|
.lockRotations();
|
||
|
|
body = world.createRigidBody(bodyDesc);
|
||
|
|
colliderDesc = RAPIER.ColliderDesc.cuboid(0.4, 0.6);
|
||
|
|
world.createCollider(colliderDesc, body);
|
||
|
|
|
||
|
|
/*
|
||
|
|
* Setup the testbed.
|
||
|
|
*/
|
||
|
|
testbed.setWorld(world);
|
||
|
|
testbed.lookAt({
|
||
|
|
target: {x: 0.0, y: -2.0},
|
||
|
|
zoom: 50.0,
|
||
|
|
});
|
||
|
|
}
|