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
// 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
_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
cleanupFuncs
readonly
cleanupFuncs: () =>void
[]
Defined in: packages/core/src/ecs/system.ts:63
Returns
void
Inherited from
config
config:
SystemConfigSignals
<S
>
Defined in: packages/core/src/ecs/system.ts:48
Inherited from
createEntity()
createEntity: () =>
Entity
Defined in: packages/core/src/ecs/system.ts:69
Returns
Entity
Inherited from
globals
globals:
Record
<string
,any
>
Defined in: packages/core/src/ecs/system.ts:53
Inherited from
input
readonly
input:XRInputManager
Defined in: packages/core/src/ecs/system.ts:58
Inherited from
isPaused
isPaused:
boolean
Defined in: packages/core/src/ecs/system.ts:47
Inherited from
player
readonly
player:XROrigin
Defined in: packages/core/src/ecs/system.ts:57
Inherited from
priority
priority:
number
Defined in: packages/core/src/ecs/system.ts:52
Inherited from
queries
queries:
Record
<keyofQ
,Query
>
Defined in: packages/core/src/ecs/system.ts:49
Inherited from
queryManager
queryManager:
QueryManager
Defined in: packages/core/src/ecs/system.ts:51
Inherited from
renderer
readonly
renderer:WebGLRenderer
Defined in: packages/core/src/ecs/system.ts:61
Inherited from
scene
readonly
scene:Scene
Defined in: packages/core/src/ecs/system.ts:59
Inherited from
visibilityState
readonly
visibilityState:Signal
<VisibilityState
>
Defined in: packages/core/src/ecs/system.ts:62
Inherited from
world
world:
World
Defined in: packages/core/src/ecs/system.ts:50
Inherited from
xrFrame
xrFrame:
XRFrame
Defined in: packages/core/src/ecs/system.ts:55
Inherited from
xrManager
xrManager:
WebXRManager
Defined in: packages/core/src/ecs/system.ts:54
Inherited from
Methods
init()
init():
Promise
<void
>
Defined in: packages/core/src/physics/physics-system.ts:84
Returns
Promise
<void
>
Overrides
play()
play():
void
Defined in: packages/core/src/ecs/system.ts:67
Returns
void
Inherited from
stop()
stop():
void
Defined in: packages/core/src/ecs/system.ts:68
Returns
void
Inherited from
update()
update(
delta
):void
Defined in: packages/core/src/physics/physics-system.ts:108
Parameters
delta
number
Returns
void