Skip to content

jolt-ts-character-controller

Imperative, rendering-free Ecctrl-style character, vehicle, and drone controllers for the jolt-ts physics wrapper. You own the world, the loop, the camera, and the renderer.
import { World } from "jolt-ts";
import { CharacterController } from "jolt-ts-character-controller";
const world = await World.create({ gravity: [0, -9.81, 0] });
const controller = new CharacterController({ world, position: [0, 1, 0] });
controller.setForwardDirection({ x: 0, y: 0, z: 1 });
controller.setMovement({ forward: true, run: true });
controller.step(1 / 60); // apply floating, friction, movement, jump
world.step(1 / 60); // integrate the physics world

Character controller

A floating capsule with Ecctrl-style movement, jumping, slopes, auto-balance, moving-platform coupling, and optional custom (planet / wall-walking) gravity.

Vehicles & drones

Shape-cast wheeled cars with suspension, tire slip, and an automatic gearbox, plus thrust-and-torque multirotor drones with velocity or position control.

Animation, decoupled

A tiny locomotion state machine that turns controller state into IDLE/WALK/RUN/JUMP_* and drives a Three.js AnimationMixer — or any renderer you like.

Network-ready

Deterministic stepping with getSyncState() / applySyncState() for server authority, rollback, and client reconciliation. No allocations on the hot path.

This library is an imperative TypeScript port of Ecctrl by Erdong Chen and contributors. See Acknowledgements for full credits and licensing.