/**
 * Single spatial-query result. Set fields when `hit` is true; ignore them
 * otherwise. `surfaceTag` is optional — populated by future surface-tag
 * systems (grass/wood/metal/etc.) so abilities and audio can react to the
 * material.
 */
export class SensorHit {
    hit: boolean;
    /** Distance from query origin to contact point (meters). */
    distance: number;
    /** World-space contact point. */
    point: Vector3;
    /** Surface normal at contact (unit vector, points away from surface). */
    normal: Vector3;
    /** Optional material/surface tag — e.g. "grass", "metal". */
    surfaceTag: any;
    /** Reset to "no hit" — call before re-using the slot each tick. */
    clear(): void;
}
/**
 * Cached spatial-query results for one first-person controller. Populated
 * by {@link FirstPersonSensorsSystem} once per fixed step, read by
 * abilities and (where useful) by the base controller.
 *
 * The point of cacheing is dedup: mantle and ledge-grab both want a
 * "forward + up obstacle probe". Compute once, both read the cached hit.
 *
 * Sensor slots cleared each tick before population. Abilities should
 * treat any `hit === false` slot as "absent" — never read distance/point
 * when hit is false (they're stale or zero, depending on clear-mode).
 *
 * @author Alex Goldring
 * @copyright Company Named Limited (c) 2026
 */
export class FirstPersonSensors {
    /** Wall to the body-local left, probed at chest height. */
    wallLeft: SensorHit;
    /** Wall to the body-local right, probed at chest height. */
    wallRight: SensorHit;
    /** Wall directly in front of the body. */
    wallFront: SensorHit;
    /**
     * Obstacle ahead at chest/waist height — used by mantle/vault.
     * Distance is along the body's forward direction; normal is the
     * face of the obstacle the player is approaching.
     */
    obstacleAhead: SensorHit;
    /**
     * Ledge edge ahead — for ledge grab. Populated when the forward
     * obstacle probe hits and a downward probe just past the
     * obstacle's top finds empty space, indicating a grabbable edge.
     */
    ledgeAhead: SensorHit;
    /**
     * True when `ledgeAhead`'s top surface is wide enough to STAND on
     * (a standing capsule fits forward of the edge), false when it's a
     * knife-edge / thin wall you could only hang from. Mantle reads this
     * to refuse vaulting onto a top it would immediately fall off; ledge
     * grab ignores it (you can hang from a thin edge). Default false so a
     * mantle never fires on stale data.
     */
    ledgeStandable: boolean;
    /** Clear all sensor slots — call at the start of each tick. */
    clearAll(): void;
}
import Vector3 from "../../../../core/geom/Vector3.js";
//# sourceMappingURL=FirstPersonSensors.d.ts.map