/**
 * Test what bodies overlap a convex shape placed at a given pose. Each
 * overlapping body's `body_id` is written to `output` starting at
 * `output_offset`; the function returns the number of body ids written.
 *
 * Use case: speculative physics queries for kinematic / character
 * controllers. An external system can ask "would my body collide with
 * anything if I moved it here?" without committing a tick of
 * simulation. The output is a flat list of body ids so the caller can
 * decide what to do per hit (skip, push, slide, etc.).
 *
 * The pipeline mirrors the narrowphase pair test:
 *   1. Build the query shape's world AABB.
 *   2. Pull candidates from both broadphase trees that overlap that AABB.
 *   3. For each candidate, run GJK in world frame. Convex candidates
 *      go through one GJK call; concave candidates (heightmap / mesh)
 *      go through the per-triangle decomposition path.
 *   4. Apply the optional `filter` callback (same signature as in
 *      raycast / shapeCast) before the GJK test — early-out on bodies
 *      the caller already wants to skip (themselves, allies, etc.).
 *
 * The query shape must be convex (`is_convex === true`). Concave shapes
 * are typically static terrain and not used as kinematic query
 * probes; rejecting them avoids the M×N triangle-pair cost.
 *
 * @param {PhysicsSystem} system
 * @param {AbstractShape3D} shape  query shape, convex; expressed in
 *   its own local frame
 * @param {{x:number,y:number,z:number}} position world position of the
 *   query shape
 * @param {{x:number,y:number,z:number,w:number}} rotation world rotation
 *   of the query shape (unit quaternion)
 * @param {Uint32Array|number[]} output buffer to write body_ids into.
 *   Caller is responsible for sizing it; ids past its end are dropped.
 * @param {number} output_offset float-index in output to start writing at
 * @param {(entity:number, collider:Collider)=>boolean} [filter]
 *   defaults to {@link returnTrue} (accept every candidate)
 * @returns {number} number of overlapping bodies written
 * @throws {Error} if `shape.is_convex === false`
 */
export function overlap_shape(system: PhysicsSystem, shape: AbstractShape3D, position: {
    x: number;
    y: number;
    z: number;
}, rotation: {
    x: number;
    y: number;
    z: number;
    w: number;
}, output: Uint32Array | number[], output_offset: number, filter?: (entity: number, collider: Collider) => boolean): number;
//# sourceMappingURL=overlap_shape.d.ts.map