@joroya/physics
v1.0.2
Published
Physics integration for Oroya Animate using cannon-es
Readme
@joroya/physics
cannon-es-backed physics for Oroya Animate scenes.
Rigid-body simulation, joints, sensors, raycast, and a RaycastVehicle
helper, all driven from your Oroya Scene.
Install
npm install @joroya/physics @joroya/coreUsage
import { PhysicsSystem } from '@joroya/physics';
import { Scene, Node, RigidBody, RigidBodyType, Collider, ColliderShape, createBox, createPlane } from '@joroya/core';
const physics = new PhysicsSystem({ gravity: { x: 0, y: -9.82, z: 0 } });
const scene = new Scene();
// Static floor
const floor = new Node('floor');
floor.addComponent(createPlane(20, 20));
floor.addComponent(new RigidBody({ type: RigidBodyType.Static }));
floor.addComponent(new Collider({ shape: ColliderShape.Box, halfExtents: { x: 10, y: 0.1, z: 10 } }));
scene.add(floor);
// Dynamic cube
const cube = new Node('cube');
cube.addComponent(createBox(1, 1, 1));
cube.transform.position = { x: 0, y: 5, z: 0 };
cube.addComponent(new RigidBody({ type: RigidBodyType.Dynamic, mass: 1 }));
cube.addComponent(new Collider({ shape: ColliderShape.Box, halfExtents: { x: 0.5, y: 0.5, z: 0.5 } }));
scene.add(cube);
// Subscribe to collisions
cube.events.on('collide-begin', (e) => console.log('hit', e.other.name));
// In the render loop
function frame(dt) {
physics.update(dt, scene);
renderer.render(dt);
}Features
- Rigid bodies: Dynamic / Static / Kinematic.
- Colliders: Box / Sphere / Plane / Cylinder, with material friction and restitution.
- Joints: hinge, point-to-point, distance.
- Collision events:
collide-begin/collide/collide-endon solid contacts;trigger-enter/trigger-stay/trigger-exiton sensor colliders. - Collision filtering: bitmask
collisionGroup+collisionMask. - Raycast:
raycast(from, to)andraycastAll(...)return{ node, point, normal, distance }. Vehiclehelper: declarativeRaycastVehiclewrapper.
API surface
| Symbol | Stability |
|---|---|
| PhysicsSystem (class) | @public |
| PhysicsSystemOptions (type) | @public |
| PhysicsRaycastHit (type) | @public |
| Vehicle (class) | @experimental |
| WheelOptions (type) | @experimental |
License
MIT
