/**
 * Wall-jump ability — instantaneous off-wall impulse fired when the
 * player presses jump while close to a wall. Designed to chain
 * naturally from wall-run (its priority is higher, so it preempts wall-
 * run's `canInterrupt()=true`) but ALSO fires from "near-wall airborne"
 * — a window where the player is mid-jump near a wall they haven't
 * committed to running.
 *
 * Activation:
 *   - intent.jump just went true (rising edge)
 *   - airborne (`!state.grounded`)
 *   - a side wall sensor has hit within `nearWallMaxDistance`
 *
 * Behaviour:
 *   - Apply impulse: `outwardImpulse * wall.normal + upImpulse * worldUp`
 *     where `upImpulse = jumpInitialVy * upFactor`.
 *   - Clear variableJumpCut so the impulse takes effect cleanly.
 *   - Fire `onJumpStart` and `onLeaveGround{reason:"walljump"}` signals.
 *   - Releases immediately (it's instantaneous, not a sustained state).
 *
 * The impulse goes through `mastery.evaluate(DecisionPoint.WallJumpImpulse)`
 * so any registered evaluators (e.g. breath rhythm, wall-jump-angle
 * timing) can scale it.
 *
 * Priority 60 — highest among movement abilities. Wall-jump must fire
 * reliably on player press, so it preempts wall-run (50), mantle (30),
 * and slide (10).
 *
 * @author Alex Goldring
 * @copyright Company Named Limited (c) 2026
 */
export class WallJump extends Ability {
    canActivate(controller: any, runtime: any, sensors: any): boolean;
    onActivate(controller: any, runtime: any): void;
    /**
     * Wall-jump is instantaneous — it shouldn't ever be "interrupted".
     * tick() returns false on first call so the ability releases
     * immediately. Returning false here doesn't matter (no other ability
     * exceeds priority 60 in the default set).
     */
    canInterrupt(): boolean;
    tick(_controller: any, _runtime: any, _bodyTransform: any, _dt: any, _system: any): boolean;
}
import { Ability } from "./Ability.js";
//# sourceMappingURL=WallJump.d.ts.map