/**
 * Wall-run ability. Activates when the player is airborne with momentum
 * and a wall is detected to their left or right. While active:
 *
 *   - Gravity is reduced to `cfg.wallRun.gravityFactor × base` (typically
 *     25%), letting the player hang on the wall for longer than a normal
 *     jump arc.
 *   - Horizontal velocity is projected onto the wall's tangent each tick,
 *     so the body sticks to the wall and slides along it. Forward
 *     momentum is preserved; into-wall and out-of-wall velocity
 *     components are zeroed.
 *   - Camera tilts into the wall via the shared lean spring (writes the
 *     wall-tilt to `runtime.leanTargetRad` each tick — same channel
 *     base writes its lat-accel-derived lean to, so transitions in and
 *     out share the spring's smoothing).
 *
 * Exits on:
 *   - Timer (`cfg.wallRun.maxDuration`)
 *   - Lost wall contact (sensor's hit flag becomes false)
 *   - Re-grounded (we walked onto a floor at the wall's end)
 *   - Wall-jump preempts (higher priority — WallJump declares priority 60)
 *
 * Priority 50 — above Mantle (30), Slide (10), below Wall-jump (60).
 *
 * @author Alex Goldring
 * @copyright Company Named Limited (c) 2026
 */
export class WallRun extends Ability {
    /** @private Seconds since this ability activated. */
    private _elapsed;
    /** @private "L" or "R" — which wall we're running on. */
    private _side;
    canActivate(controller: any, runtime: any, sensors: any): boolean;
    onActivate(controller: any, runtime: any): void;
    /**
     * Wall-jump (priority 60) should be allowed to preempt freely; that's
     * the canonical chain (wall-run → wall-jump). Any other higher-priority
     * ability is also fine — wall-run is a transient state.
     */
    canInterrupt(): boolean;
    tick(controller: any, runtime: any, bodyTransform: any, dt: any, system: any): boolean;
}
import { Ability } from "./Ability.js";
//# sourceMappingURL=WallRun.d.ts.map