UNPKG

@pmndrs/cannon-worker-api

Version:
80 lines (71 loc) 2.44 kB
import type { MaterialOptions } from 'cannon-es' import type { Vector3 } from 'three' import type { CollideBeginEvent, CollideEndEvent, CollideEvent, Quad, Triplet, VectorName } from './types' export type AtomicProps = { allowSleep: boolean angularDamping: number collisionFilterGroup: number collisionFilterMask: number collisionResponse: boolean fixedRotation: boolean isTrigger: boolean linearDamping: number mass: number material: MaterialOptions sleepSpeedLimit: number sleepTimeLimit: number userData: Record<PropertyKey, any> } export type VectorProps = Record<VectorName, Triplet> type VectorTypes = Vector3 | Triplet export type BodyProps<T extends any[] = unknown[]> = Partial<AtomicProps> & Partial<VectorProps> & { args?: T onCollide?: (e: CollideEvent) => void onCollideBegin?: (e: CollideBeginEvent) => void onCollideEnd?: (e: CollideEndEvent) => void /** * Quaternion is preferred over rotation if both are provided */ quaternion?: Quad rotation?: Triplet type?: 'Dynamic' | 'Static' | 'Kinematic' } export type BodyPropsArgsRequired<T extends any[] = unknown[]> = BodyProps<T> & { args: T } export type ShapeType = | 'Box' | 'ConvexPolyhedron' | 'Cylinder' | 'Heightfield' | 'Particle' | 'Plane' | 'Sphere' | 'Trimesh' export type BodyShapeType = ShapeType | 'Compound' export type CylinderArgs = [radiusTop?: number, radiusBottom?: number, height?: number, numSegments?: number] export type SphereArgs = [radius: number] export type TrimeshArgs = [vertices: ArrayLike<number>, indices: ArrayLike<number>] export type HeightfieldArgs = [ data: number[][], options: { elementSize?: number; maxValue?: number; minValue?: number }, ] export type ConvexPolyhedronArgs<V extends VectorTypes = VectorTypes> = [ vertices?: V[], faces?: number[][], normals?: V[], axes?: V[], boundingSphereRadius?: number, ] export type PlaneProps = BodyProps export type BoxProps = BodyProps<Triplet> export type CylinderProps = BodyProps<CylinderArgs> export type ParticleProps = BodyProps export type SphereProps = BodyProps<SphereArgs> export type TrimeshProps = BodyPropsArgsRequired<TrimeshArgs> export type HeightfieldProps = BodyPropsArgsRequired<HeightfieldArgs> export type ConvexPolyhedronProps = BodyProps<ConvexPolyhedronArgs> export interface CompoundBodyProps extends BodyProps { shapes: BodyProps & { type: ShapeType }[] }