/cannon-es

💣 A lightweight 3D physics engine written in JavaScript.

Primary LanguageTypeScriptMIT LicenseMIT

cannon-es

This is a maintained fork of cannon.js, originally created by Stefan Hedman @schteppe.

It's a type-safe flatbundle (esm and cjs) which allows for tree shaking and usage in modern environments.

These minor changes and improvements were also made:

  • These PRs from the original repo were merged: schteppe/cannon.js#433, schteppe/cannon.js#430, schteppe/cannon.js#418, schteppe/cannon.js#360, schteppe/cannon.js#265, schteppe/cannon.js#392
  • The ConvexPolyhedron constructor now accepts an object instead of a list of arguments. #6
  • The Cylinder is now oriented on the Y axis. #30
  • The type property of the Cylinder is now equal to Shape.types.CYLINDER. #59
  • Body.applyImpulse() and Body.applyForce() are now relative to the center of the body instead of the center of the world 86b0444
  • Sleeping bodies now wake up if a force or an impulse is applied to them #61
  • Added a property World.hasActiveBodies: boolean which will be false when all physics bodies are sleeping. This allows for invalidating frames when physics aren't active for increased performance.
  • Deprecated properties and methods have been removed.
  • The original cannon.js debugger, which shows the wireframes of each body, has been moved to its own repo cannon-es-debugger.

If instead you're using three.js in a React environment with react-three-fiber, check out use-cannon! It's a wrapper around cannon-es.

Installation

yarn add cannon-es

Usage

import { World } from 'cannon-es'

// ...

or, if you're using webpack, you can import it like this while still taking advantage of tree shaking:

import * as CANNON from 'cannon-es'

// ...

Examples

TO DO: