import type { EntityPosition } from "./entityStore.js"; import type { SceneObject } from "./objectStore.js"; export interface ObjectRaycastInput { origin: EntityPosition; direction: EntityPosition; maxDistance: number; halfExtents?: EntityPosition; filter?: (object: SceneObject) => boolean; } export interface ObjectRaycastHit { instanceId: string; catalogId: string; distance: number; point: EntityPosition; normal: EntityPosition; } /** Optional broadphase for large object sets — typically `ObjectStore.inBox`. */ export interface ObjectQueryBroadphase { inBox(min: EntityPosition, max: EntityPosition): readonly SceneObject[]; } export type ObjectRaycastSource = readonly SceneObject[] | ObjectQueryBroadphase; declare function normalize(direction: EntityPosition): EntityPosition; declare function intersectAabb(origin: EntityPosition, direction: EntityPosition, min: EntityPosition, max: EntityPosition, maxDistance: number): { distance: number; normal: EntityPosition; } | null; /** @internal */ export declare function raycastObjects(source: ObjectRaycastSource, input: ObjectRaycastInput): ObjectRaycastHit | null; /** @internal */ export declare function raycastObjectsAll(source: ObjectRaycastSource, input: ObjectRaycastInput): ObjectRaycastHit[]; export { intersectAabb, normalize as normalizeDirection };