Skip to content

Class: PhysicsSystem

Defined in: packages/core/src/physics/physics-system.ts:63

Manages physics simulation using the Havok physics engine.

Remarks

  • Initializes Havok physics engine and creates a physics world with gravity.
  • Supports automatic physics shapes creation based on entity geometry when PhysicsShapeType.Auto is used.
  • Supports multiple collision shapes: Sphere, Box, Cylinder, ConvexHull, and TriMesh.
  • Synchronizes physics body transforms with Three.js Object3D positions and rotations using PhysicsBody.
  • Handles physics manipulations like applying forces and setting velocities in PhysicsManipulation.
  • Automatically cleans up physics resources when entities are removed.

Example

ts
// Add to your world to enable physics
world.addSystem(PhysicsSystem)

// Create a dynamic box that falls due to gravity
const box = world.createTransformEntity(boxMesh)
box.addComponent(PhysicsShape, {
  shape: PhysicsShapeType.Box,
  dimensions: [1, 1, 1]
})
box.addComponent(PhysicsBody, { state: PhysicsState.Dynamic })

See

Extends

  • System<{ gravity: { default: [number, number, number]; type: Vec3; }; }, { manipluatedEntities: { required: (Component<{ _angularVelocity: { default: [number, number, number]; type: Vec3; }; _engineBody: { default: number; type: Float64; }; _engineOffset: { default: number; type: Float64; }; _linearVelocity: { default: [number, number, number]; type: Vec3; }; gravityFactor: { default: number; type: Float32; }; linearDamping: { default: number; type: Float32; }; state: { default: "DYNAMIC"; enum: { Dynamic: "DYNAMIC"; Kinematic: "KINEMATIC"; Static: "STATIC"; }; type: Enum; }; }> | Component<{ angularVelocity: { default: [number, number, number]; type: Vec3; }; force: { default: [number, number, number]; type: Vec3; }; linearVelocity: { default: [number, number, number]; type: Vec3; }; }>)[]; where: ValuePredicate[]; }; physicsEntities: { required: (Component<{ _angularVelocity: { default: [number, number, number]; type: Vec3; }; _engineBody: { default: number; type: Float64; }; _engineOffset: { default: number; type: Float64; }; _linearVelocity: { default: [number, number, number]; type: Vec3; }; gravityFactor: { default: number; type: Float32; }; linearDamping: { default: number; type: Float32; }; state: { default: "DYNAMIC"; enum: { Dynamic: "DYNAMIC"; Kinematic: "KINEMATIC"; Static: "STATIC"; }; type: Enum; }; }> | Component<{ _engineShape: { default: number; type: Float64; }; density: { default: number; type: Float32; }; dimensions: { default: [number, number, number]; type: Vec3; }; friction: { default: number; type: Float32; }; restitution: { default: number; type: Float32; }; shape: { default: "Auto"; enum: { Auto: "Auto"; Box: "Box"; Capsules: "Capsules"; ConvexHull: "ConvexHull"; Cylinder: "Cylinder"; Sphere: "Sphere"; TriMesh: "TriMesh"; }; type: Enum; }; }>)[]; }; }, this>

Constructors

Constructor

new PhysicsSystem(_w, _qm, _p): PhysicsSystem

Defined in: node_modules/.pnpm/elics@3.3.0/node_modules/elics/lib/system.d.ts:73

Parameters

_w

World

_qm

QueryManager

_p

number

Returns

PhysicsSystem

Inherited from

createSystem( { physicsEntities: { required: [PhysicsBody, PhysicsShape], }, manipluatedEntities: { required: [PhysicsBody, PhysicsManipulation], where: [ne(PhysicsBody, '_engineBody', 0)], }, }, { gravity: { type: Types.Vec3, default: [0, -9.81, 0] }, }, ).constructor

Properties

camera

readonly camera: PerspectiveCamera

Defined in: packages/core/src/ecs/system.ts:60

Inherited from

System.camera


cleanupFuncs

readonly cleanupFuncs: () => void[]

Defined in: packages/core/src/ecs/system.ts:63

Returns

void

Inherited from

System.cleanupFuncs


config

config: SystemConfigSignals<S>

Defined in: packages/core/src/ecs/system.ts:48

Inherited from

System.config


createEntity()

createEntity: () => Entity

Defined in: packages/core/src/ecs/system.ts:69

Returns

Entity

Inherited from

System.createEntity


globals

globals: Record<string, any>

Defined in: packages/core/src/ecs/system.ts:53

Inherited from

System.globals


input

readonly input: XRInputManager

Defined in: packages/core/src/ecs/system.ts:58

Inherited from

System.input


isPaused

isPaused: boolean

Defined in: packages/core/src/ecs/system.ts:47

Inherited from

System.isPaused


player

readonly player: XROrigin

Defined in: packages/core/src/ecs/system.ts:57

Inherited from

System.player


priority

priority: number

Defined in: packages/core/src/ecs/system.ts:52

Inherited from

System.priority


queries

queries: Record<keyof Q, Query>

Defined in: packages/core/src/ecs/system.ts:49

Inherited from

System.queries


queryManager

queryManager: QueryManager

Defined in: packages/core/src/ecs/system.ts:51

Inherited from

System.queryManager


renderer

readonly renderer: WebGLRenderer

Defined in: packages/core/src/ecs/system.ts:61

Inherited from

System.renderer


scene

readonly scene: Scene

Defined in: packages/core/src/ecs/system.ts:59

Inherited from

System.scene


visibilityState

readonly visibilityState: Signal<VisibilityState>

Defined in: packages/core/src/ecs/system.ts:62

Inherited from

System.visibilityState


world

world: World

Defined in: packages/core/src/ecs/system.ts:50

Inherited from

System.world


xrFrame

xrFrame: XRFrame

Defined in: packages/core/src/ecs/system.ts:55

Inherited from

System.xrFrame


xrManager

xrManager: WebXRManager

Defined in: packages/core/src/ecs/system.ts:54

Inherited from

System.xrManager

Methods

init()

init(): Promise<void>

Defined in: packages/core/src/physics/physics-system.ts:84

Returns

Promise<void>

Overrides

System.init


play()

play(): void

Defined in: packages/core/src/ecs/system.ts:67

Returns

void

Inherited from

System.play


stop()

stop(): void

Defined in: packages/core/src/ecs/system.ts:68

Returns

void

Inherited from

System.stop


update()

update(delta): void

Defined in: packages/core/src/physics/physics-system.ts:108

Parameters

delta

number

Returns

void

Overrides

System.update