{
let gravity = new rapier2d.Vector2(0.0, -9.81);
let world = new rapier2d.World(gravity);
let eventQueue = new rapier2d.EventQueue(true);
let groundRigidBodyDesc = new rapier2d.RigidBodyDesc(
rapier2d.BodyStatus.Static
);
let groundRigidBody = world.createRigidBody(groundRigidBodyDesc);
let groundColliderDesc = rapier2d.ColliderDesc.cuboid(10.0, 0.1);
world.createCollider(groundColliderDesc, groundRigidBody.handle);
let rigidBodyDesc = new rapier2d.RigidBodyDesc(
rapier2d.BodyStatus.Dynamic
).setTranslation(0.0, 10.0);
let rigidBody = world.createRigidBody(rigidBodyDesc);
let colliderDesc = rapier2d.ColliderDesc.cuboid(0.5, 0.5).setDensity(2.0);
let collider = world.createCollider(colliderDesc, rigidBody.handle);
let force = new rapier2d.Vector2(1.0, 2.0);
let impulse = new rapier2d.Vector2(0.1, 0.2);
let torque = 3.0;
let torqueImpulse = 0.3;
rigidBody.applyForce(force, true);
rigidBody.applyImpulse(impulse, true);
rigidBody.applyTorque(torque, true);
rigidBody.applyTorqueImpulse(torqueImpulse, true);
const events = [];
while (true) {
world.step(eventQueue);
eventQueue.drainContactEvents((handle1, handle2, contactStarted) => {
events.push({ type: "contact", handle1, handle2, contactStarted });
});
eventQueue.drainIntersectionEvents((handle1, handle2, intersecting) => {
events.push({ type: "intersection", handle1, handle2, intersecting });
});
yield events;
}
}