/** * PhysicsStep.ts * * Fixed-timestep physics wrapper that integrates with the SpatialEngine. * Implements the EngineSystem interface, running PhysicsWorld at a * deterministic tick rate and syncing body transforms back to SceneNodes. * * @module engine */ import type { EngineSystem } from './SpatialEngine'; export interface Vec3 { x: number; y: number; z: number; [index: number]: number; } export interface PhysicsBodyState { id: string; position: Vec3; rotation: Vec3; velocity: Vec3; angularVelocity: Vec3; mass: number; isStatic: boolean; restitution: number; friction: number; } export interface CollisionEvent { bodyA: string; bodyB: string; contactPoint: Vec3; normal: Vec3; impulse: number; } export type CollisionCallback = (event: CollisionEvent) => void; export declare class PhysicsStep implements EngineSystem { readonly name = "PhysicsStep"; readonly priority = 100; private bodies; private gravity; private collisionCallbacks; private broadphaseGrid; private cellSize; setGravity(x: number, y: number, z: number): void; setCellSize(size: number): void; onCollision(callback: CollisionCallback): void; addBody(body: PhysicsBodyState): void; removeBody(id: string): boolean; getBody(id: string): PhysicsBodyState | undefined; getAllBodies(): PhysicsBodyState[]; fixedUpdate(dt: number): void; private resolveCollision; private hashPosition; /** Raycast against all bodies, returns first hit. */ raycast(origin: Vec3, direction: Vec3, maxDist: number): { bodyId: string; distance: number; point: Vec3; } | null; /** Get count of active (non-static) bodies. */ getActiveBodyCount(): number; destroy(): void; } //# sourceMappingURL=PhysicsStep.d.ts.map