Home
/
Packages
/
@hatch:physics
@hatch:physics
v0.1.9
Rapier-backed physics. World2D and World3D from one import — bodies, colliders, gravity, force / impulse, position + velocity reads, raycasts, and contact-event streams. Bundles rapier2d + rapier3d in a single cdylib so games never have to choose between dimensions at the package level. Wires into @hatch:game for a step-per-frame physics loop.
stable
system
updated Jun 4, 2026
source ↗
$
hatch add @hatch:physics
copy
MOD
physics
CL
PhysicsCore
FN
PhysicsCore.static world2dCreate(descriptor)
FN
PhysicsCore.static world2dDestroy(id)
FN
PhysicsCore.static world2dStep(id, dt)
FN
PhysicsCore.static world2dSpawnDynamic(worldId, descriptor)
FN
PhysicsCore.static world2dSpawnStatic(worldId, descriptor)
FN
PhysicsCore.static world2dSpawnKinematic(worldId, descriptor)
FN
PhysicsCore.static world2dDespawn(worldId, bodyId)
FN
PhysicsCore.static world2dPosition(worldId, bodyId)
FN
PhysicsCore.static world2dRotation(worldId, bodyId)
FN
PhysicsCore.static world2dLinearVelocity(worldId, bodyId)
FN
PhysicsCore.static world2dSetLinearVelocity(worldId, bodyId, x, y)
FN
PhysicsCore.static world2dApplyImpulse(worldId, bodyId, x, y)
FN
PhysicsCore.static world2dApplyForce(worldId, bodyId, x, y)
FN
PhysicsCore.static world3dCreate(descriptor)
FN
PhysicsCore.static world3dDestroy(id)
FN
PhysicsCore.static world3dStep(id, dt)
FN
PhysicsCore.static world3dSpawnDynamic(worldId, descriptor)
FN
PhysicsCore.static world3dSpawnStatic(worldId, descriptor)
FN
PhysicsCore.static world3dSpawnKinematic(worldId, descriptor)
FN
PhysicsCore.static world3dDespawn(worldId, bodyId)
FN
PhysicsCore.static world3dPosition(worldId, bodyId)
FN
PhysicsCore.static world3dPositionInto(worldId, bodyId, out, offset)
FN
PhysicsCore.static world3dRotation(worldId, bodyId)
FN
PhysicsCore.static world3dRotationInto(worldId, bodyId, out, offset)
FN
PhysicsCore.static world3dLinearVelocity(worldId, bodyId)
FN
PhysicsCore.static world3dSetLinearVelocity(worldId, bodyId, x, y, z)
FN
PhysicsCore.static world3dApplyImpulse(worldId, bodyId, x, y, z)
FN
PhysicsCore.static world3dApplyForce(worldId, bodyId, x, y, z)
FN
PhysicsCore.static world3dCastRay(worldId, ox, oy, oz, dx, dy, dz, maxToi, solid)
FN
PhysicsCore.static world2dCastRay(worldId, ox, oy, dx, dy, maxToi, solid)
FN
PhysicsCore.static world3dDrainContactEvents(worldId)
FN
PhysicsCore.static world2dDrainContactEvents(worldId)
FN
PhysicsCore.static world3dCastShape(worldId, shape, ox, oy, oz, dx, dy, dz, maxToi)
FN
PhysicsCore.static world2dCastShape(worldId, shape, ox, oy, dx, dy, maxToi)
FN
PhysicsCore.static world3dCreateJoint(worldId, bodyA, bodyB, descriptor)
FN
PhysicsCore.static world3dDestroyJoint(worldId, jointId)
FN
PhysicsCore.static world2dCreateJoint(worldId, bodyA, bodyB, descriptor)
FN
PhysicsCore.static world2dDestroyJoint(worldId, jointId)
CL
World2D
NEW
World2D.new_(id)
GET
World2D.id
GET
World2D.drainContactEvents → List<Map>
GET
World2D.destroy
FN
World2D.static new(descriptor)
FN
World2D.static new()
FN
World2D.step(dt)
FN
World2D.spawnDynamic(descriptor)
FN
World2D.spawnStatic(descriptor)
FN
World2D.spawnKinematic(descriptor)
FN
World2D.despawn(bodyId)
FN
World2D.position(bodyId)
FN
World2D.rotation(bodyId) → Num
FN
World2D.linearVelocity(bodyId)
FN
World2D.setLinearVelocity(bodyId, x, y)
FN
World2D.applyImpulse(bodyId, x, y)
FN
World2D.applyForce(bodyId, x, y)
FN
World2D.castRay(ox: Num, oy: Num, dx: Num, dy: Num, maxToi: Num) → Map?
FN
World2D.castRay(ox, oy, dx, dy, maxToi, solid)
FN
World2D.castShape(shape: Map, ox: Num, oy: Num, dx: Num, dy: Num, maxToi: Num) → Map?
FN
World2D.createJoint(bodyA: Num, bodyB: Num, descriptor: Map) → Num
FN
World2D.destroyJoint(jointId)
CL
Collider2D
FN
Collider2D.static ball(radius)
FN
Collider2D.static ball(radius, options)
FN
Collider2D.static box(halfWidth, halfHeight)
FN
Collider2D.static box(halfWidth, halfHeight, options)
FN
Collider2D.static capsule(halfHeight, radius)
FN
Collider2D.static capsule(halfHeight, radius, options)
FN
Collider2D.static merge_(base, options)
CL
World3D
NEW
World3D.new_(id)
GET
World3D.id
GET
World3D.drainContactEvents → List<Map>
GET
World3D.destroy
FN
World3D.static new(descriptor)
FN
World3D.static new()
FN
World3D.step(dt)
FN
World3D.spawnDynamic(descriptor)
FN
World3D.spawnStatic(descriptor)
FN
World3D.spawnKinematic(descriptor)
FN
World3D.despawn(bodyId)
FN
World3D.position(bodyId)
FN
World3D.positionInto(bodyId: Num, out: Float32Array, offset: Num)
FN
World3D.rotation(bodyId) → List<Num>
FN
World3D.rotationInto(bodyId: Num, out: Float32Array, offset: Num)
FN
World3D.linearVelocity(bodyId)
FN
World3D.setLinearVelocity(bodyId, x, y, z)
FN
World3D.applyImpulse(bodyId, x, y, z)
FN
World3D.applyForce(bodyId, x, y, z)
FN
World3D.castRay(ox: Num, oy: Num, oz: Num, dx: Num, dy: Num, dz: Num, maxToi: Num) → Map?
FN
World3D.castRay(ox, oy, oz, dx, dy, dz, maxToi, solid)
FN
World3D.castShape(shape: Map, ox: Num, oy: Num, oz: Num, dx: Num, dy: Num, dz: Num, maxToi: Num) → Map?
FN
World3D.createJoint(bodyA: Num, bodyB: Num, descriptor: Map) → Num
FN
World3D.destroyJoint(jointId)
CL
Collider3D
FN
Collider3D.static ball(radius)
FN
Collider3D.static ball(radius, options)
FN
Collider3D.static box(halfX, halfY, halfZ)
FN
Collider3D.static box(halfX, halfY, halfZ, options)
FN
Collider3D.static capsule(halfHeight, radius)
FN
Collider3D.static capsule(halfHeight, radius, options)
FN
Collider3D.static merge_(base, options)