import type { Position, Rotation, Scale } from '$lib'; export interface World { worker: Worker & CannonWorker; step(): void; nextBodyId(): number; } export interface CannonWorker { postMessage(request: CannonWorkerRequest, options?: Transferable[] | StructuredSerializeOptions): void; addEventListener(type: 'message', listener: (event: MessageEvent) => void, options?: boolean | AddEventListenerOptions): void; } export declare type CannonWorkerRequest = { type: 'step'; payload: StepPayload; } | { type: 'update_world'; payload: UpdateWorldPayload; } | { type: 'create_body'; payload: CreateBodyPayload; } | { type: 'remove_body'; payload: RemoveBodyPayload; } | { type: 'create_shape'; payload: CreateShapePayload; } | { type: 'remove_shape'; }; export interface StepPayload { timestamp: number; args: [dt: number, timeSinceLastCalled?: number, maxSubSteps?: number]; positions?: Float32Array; quaternions?: Float32Array; } export interface UpdateWorldPayload { gravity?: Position; broadphase?: Broadphase; defaultContactMaterial?: { friction?: number; restitution?: number; }; } export declare type Broadphase = 'sap'; export interface CreateBodyPayload { id: number; options: CreateBodyOptions; } export interface CreateBodyOptions { type?: BodyType; mass?: number; position?: Position; rotation?: Rotation; } export declare type BodyType = 'static' | 'dynamic' | 'kinematic'; export interface RemoveBodyPayload { id: number; } export declare type ShapeType = 'plane' | 'box' | 'sphere'; export declare type CreateShapePayload = { id?: number; type: ShapeType; options: CreateShapeOptions; }; export interface CreateShapeOptions { position?: Position; rotation?: Rotation; scale: Scale; } export declare type CannonWorkerResponse = { type: 'step'; payload: StepResponse; }; export interface StepResponse { timestamp: number; stepnumber: number; positions: Float32Array; quaternions: Float32Array; }