Skip to main content

Class: RigidControls

Inspired by THREE.JS's PointerLockControls, a rigid body based first person controls.

Example​

// Create the controls.
const controls = new RigidControls(
camera,
renderer.domElement,
world
);

// Printing the voxel that the client is in.
console.log(controls.voxel);

// Call the controls update function in the render loop.
controls.update();

Hierarchy​

Implements​

Constructors​

constructor​

• new RigidControls(camera, domElement, world, options?): RigidControls

Construct a Voxelize rigid body based first person controls. This adds a rigid body to the world's physics engine, and applies movement to the camera.

Parameters​

NameTypeDescription
cameraPerspectiveCameraThe camera to apply the controls to.
domElementHTMLElementThe DOM element to apply the controls to.
worldWorld<any>The world to apply the controls to.
optionsPartial<RigidControlsOptions>The options to initialize the controls with.

Returns​

RigidControls

Overrides​

EventEmitter.constructor

Properties​

INPUT_IDENTIFIER​

▪ Static Readonly INPUT_IDENTIFIER: "voxelize-rigid-controls"

This is the identifier that is used to bind the rigid controls' keyboard inputs when RigidControls.connect is called.


arm​

• Optional arm: Arm

A potential link to a Arm instance. This can be added by calling RigidControls.attachArm to add a mesh for the first person view.


body​

• body: RigidBody

The physical rigid body of the client, dimensions described by:

  • options.bodyWidth
  • options.bodyHeight
  • options.bodyDepth

camera​

• camera: PerspectiveCamera

Reference linking to the Voxelize camera instance.


character​

• Optional character: Character

A potential link to a Character instance. This can be added by calling RigidControls.attachCharacter to add a mesh for 2nd and 3rd person view.


domElement​

• domElement: HTMLElement

The DOM element that pointerlock controls are applied to.


inputs​

• Optional inputs: Inputs<any>

Reference linking to the Voxelize Inputs instance. You can link an inputs manager by calling RigidControls.connect, which registers the keyboard inputs for the controls.


isLocked​

• isLocked: boolean = false

Flag indicating whether pointerlock controls have control over the cursor.


movements​

• movements: Object

Whether or not the client has certain movement potentials. For example, if the forward key is pressed, then "front" would be true. Vice versa for "back".

Type declaration​

NameType
backboolean
downboolean
frontboolean
leftboolean
rightboolean
sprintboolean
upboolean

object​

• object: Group<Object3DEventMap>

A THREE.JS object, parent to the camera for pointerlock controls.


options​

• options: RigidControlsOptions

Parameters to initialize the Voxelize controls.


ownID​

• ownID: string = ""

The client's own peer ID. This is set when the client first connects to the server.


state​

• state: RigidControlState

The state of the control, indicating things like whether or not the client is running.


teleportCount​

• teleportCount: number = 0

How many times these controls have been teleported. A reader that follows the body frame by frame (a fall meter, a trail) starts over when it changes: the body did not travel the distance a teleport moves it.


world​

• world: World<any>

Reference linking to the Voxelize world instance.

Accessors​

chunk​

• get chunk(): Coords2

The chunk that the client is situated in.

Returns​

Coords2


flyMode​

• get flyMode(): boolean

Whether if the client is in fly mode. Fly mode means client can fly but not through blocks.

Returns​

boolean


ghostMode​

• get ghostMode(): boolean

Whether if the client is in ghost mode. Ghost mode means client can fly through blocks.

Returns​

boolean


isCrouching​

• get isCrouching(): boolean

Returns​

boolean


isSwimPoseActive​

• get isSwimPoseActive(): boolean

Returns​

boolean


isSwimming​

• get isSwimming(): boolean

Returns​

boolean


isSwimmingIdleStanding​

• get isSwimmingIdleStanding(): boolean

Returns​

boolean


position​

• get position(): Vector3

The 3D world coordinates that the client is at. This is where the bottom of the client's body is located.

Returns​

Vector3


voxel​

• get voxel(): Coords3

The voxel coordinates that the client is at. This is where the bottom of the client's body is located, floored to the voxel coordinate.

Returns​

Coords3

Methods​

attachArm​

▸ attachArm(arm): void

Attach a Arm to this controls instance. This can be seen in 1st person mode.

Parameters​

NameTypeDescription
armArmThe Arm to attach to this controls instance.

Returns​

void


attachCharacter​

▸ attachCharacter(character, newLerpFactor?, newRotationLerpFactor?): void

Attach a Character to this controls instance. This can be seen in 2nd/3rd person mode.

The character's height drives the collision height and eye level so the camera sits where the model's eyes are. Width and depth deliberately stay at options.bodyWidth/options.bodyDepth: the visual model is wider than the hull should be (a model-width hull could not fit through an open door's leaf gap), and a collision hull narrower than the body is the norm players expect.

Parameters​

NameTypeDefault valueDescription
characterCharacterundefinedThe Character to attach to this controls instance.
newLerpFactornumber1The position lerp factor to use for the character. 1 pins the body to the eye, which is what the controls' own body wants: its pose is local and known every frame, not a network sample.
newRotationLerpFactor?numberundefinedThe rotation lerp factor for the character's head and body; left as the character's own setting when omitted.

Returns​

void


connect​

▸ connect(inputs, namespace?): () => void

Sets up all event listeners for controls, including:

  • Mouse move event
  • Pointer-lock events
  • Canvas click event
  • Key up/down events
  • Control lock/unlock events

This function returns a function that can be called to disconnect the controls. Keep in mind that if Inputs.remap is used to remap any controls, they will not be unbound when the returned function is called.

Parameters​

NameTypeDefault value
inputsInputs<any>undefined
namespacestring"*"

Returns​

fn

▸ (): void

Returns​

void

Options

inputs Inputs instance to bind the controls to.

Options

namespace The namespace to bind the controls to.


getDirection​

▸ getDirection(): Vector3

Get the direction that the client is looking at.

Returns​

Vector3


lock​

▸ lock(callback?): void

Lock the cursor to the game, calling requestPointerLock on the dom element. Needs to be called within a DOM event listener callback!

Parameters​

NameTypeDescription
callback?() => voidCallback to be run once done.

Returns​

void


lookAt​

▸ lookAt(x, y, z): void

Make the client look at a coordinate.

Parameters​

NameTypeDescription
xnumberX-coordinate to look at.
ynumberY-coordinate to look at.
znumberZ-coordinate to look at.

Returns​

void


moveForward​

▸ moveForward(distance): void

Move the client forward/backward by a certain distance.

Parameters​

NameTypeDescription
distancenumberDistance to move forward by.

Returns​

void


moveRight​

▸ moveRight(distance): void

Move the client left/right by a certain distance.

Parameters​

NameTypeDescription
distancenumberDistance to move left/right by.

Returns​

void


on​

▸ on(event, listener): RigidControls

An event handler for when the pointerlock is locked/unlocked. The events supported so far are:

  • lock: When the pointerlock is locked.
  • unlock: When the pointerlock is unlocked.

Parameters​

NameTypeDescription
event"lock" | "unlock"The event name, either lock or unlock.
listener() => voidThe listener to call when the event is emitted.

Returns​

RigidControls

The controls instance for chaining.

Overrides​

EventEmitter.on


onMessage​

▸ onMessage(message): void

Parameters​

NameType
messageMessageProtocol<any, any, any, [number, number, number]>

Returns​

void

Implementation of​

NetIntercept.onMessage


reset​

▸ reset(): void

Reset the controls instance. This will reset the camera's position and rotation, and reset all movements.

Returns​

void


resetMovements​

▸ resetMovements(): void

Reset all of the control's movements.

Returns​

void


restoreSwimming​

▸ restoreSwimming(): void

Returns​

void


setDirection​

▸ setDirection(dx, dy, dz): void

Parameters​

NameType
dxnumber
dynumber
dznumber

Returns​

void


snapBodyHeight​

▸ snapBodyHeight(): void

Snap the smoothed body height (the crouch-transition ease) straight to its target and re-derive the eye anchor from the rigid body now. Call this after re-anchoring the body instantaneously — e.g. attaching to a mount — where easing the eye toward the new height would misplace everything derived from the anchor (mount attachment, streamed position) for the duration of the ease.

Returns​

void


teleport​

▸ teleport(vx, vy, vz): void

Teleport this rigid controls to a new voxel coordinate.

Parameters​

NameTypeDescription
vxnumberThe x voxel coordinate to teleport to.
vynumberThe y voxel coordinate to teleport to.
vznumberThe z voxel coordinate to teleport to.

Returns​

void


teleportToExact​

▸ teleportToExact(x, y, z): void

Parameters​

NameType
xnumber
ynumber
znumber

Returns​

void


teleportToTop​

▸ teleportToTop(vx?, vz?, yOffset?): void

Teleport the rigid controls to the top of this voxel column.

Parameters​

NameTypeDefault value
vx?numberundefined
vz?numberundefined
yOffsetnumber0

Returns​

void


toggleFly​

▸ toggleFly(): void

Toggle fly mode. Fly mode is like ghost mode, but the client can't fly through blocks.

Returns​

void


toggleGhostMode​

▸ toggleGhostMode(): void

Toggle ghost mode. Ghost mode is when a client can fly through blocks.

Returns​

void


unlock​

▸ unlock(callback?): void

Unlock the cursor from the game, calling exitPointerLock on the HTML document. Needs to be called within a DOM event listener callback!

Parameters​

NameTypeDescription
callback?() => voidCallback to be run once done.

Returns​

void


update​

▸ update(): void

Update for the camera of the game. This should be called in the game update loop. What this does is that it updates the rigid body, and then interpolates the camera's position and rotation to the new position and rotation. If a character is attached, then the character is also updated. If the arm is attached, then the arm is also updated.

Returns​

void