The pack
rigFps
function rigFps(opts: FpsOptions = {}): Pack<{ rig: FpsRigApi }>
The first-person rig: mouse or drag to look, WASD (or the arrows) to move, shift to sprint, and space
and control to rise and fall while flying. Requires a 3D world; it drives the camera as an eye, so the
world's distance stays 0.
Types
FpsOptions
interface FpsOptions
Manifest options.
speed?: number— Metres per second walking. Default 6.sprint?: number— Speed multiplier while the sprint key is held. Default 1.8.eyeHeight?: number— Eye height above the floor, world units. Default 1.7.fly?: boolean— Start flying (no floor, and looking up flies up). Default false.sensitivity?: number— Radians of turn per pixel of mouse movement. Default 0.0022.invertY?: boolean— Look up when the mouse moves down. Default false.lockPointer?: boolean— Lock the pointer on the first click, so looking does not need a held button. Default true.maxPitch?: number— How far down the player may look, radians. Default 1.5.minPitch?: number— How far up, radians (negative looks up). Default −1.5.start?: { x: number; y: number; z: number }— Where to stand at the start. Default 0, eyeHeight, 0.
FpsRigApi
interface FpsRigApi
game.rig: the first-person camera.
floor: ((x: number, z: number) => number) | null— Authoritative ground query while walking; null keeps the original flat floor.canMove: ((from: { x: number; y: number; z: number }, to: { x: number; y: number; z: number }) => boolean) | null— Optional movement validator for terrain slopes, cliffs or world bounds.x: number— Eye x.y: number— Eye y.z: number— Eye z.yaw: number— Look yaw, radians.pitch: number— Look pitch, radians; positive looks down.speed: number— Walking speed.fly: boolean— Fly, or stay at eye height above the floor.eyeHeight: number— Eye height above the floor when walking.readonly locked: boolean— Whether the browser currently has the pointer locked.moveTo(x: number, y: number, z: number): void— Put the player somewhere without a sweep.readonly intent: { x: number; y: number; z: number }— Where the player is trying to go this step, in world units — before anything clamps it. A game that wants walls reads this together withprevious, decides where the player may actually stand, and callsmoveTo.readonly previous: { x: number; y: number; z: number }— Where the player stood at the START of this step. Clamping needs both ends of the move: without it a game cannot tell where the player came from, because the rig has already taken the step.lock(): void— Ask the browser for pointer lock (needs a user gesture).unlock(): void— Release it.


