import { b2Draw } from "../common/b2_draw";
import { b2Vec2, b2Mat22, XY } from "../common/b2_math";
import { b2Joint, b2JointDef, b2IJointDef } from "./b2_joint";
import { b2SolverData } from "./b2_time_step";
export interface b2IMouseJointDef extends b2IJointDef {
    target?: XY;
    maxForce?: number;
    stiffness?: number;
    damping?: number;
}
/**
 * Mouse joint definition. This requires a world target point,
 * tuning parameters, and the time step.
 */
export declare class b2MouseJointDef extends b2JointDef implements b2IMouseJointDef {
    /**
     * The initial world target point. This is assumed
     * to coincide with the body anchor initially.
     */
    readonly target: b2Vec2;
    /**
     * The maximum constraint force that can be exerted
     * to move the candidate body. Usually you will express
     * as some multiple of the weight (multiplier * mass * gravity).
     */
    maxForce: number;
    /** The linear stiffness in N/m */
    stiffness: number;
    /** The linear damping in N*s/m */
    damping: number;
    constructor();
}
/**
 * A mouse joint is used to make a point on a body track a
 * specified world point. This a soft constraint with a maximum
 * force. This allows the constraint to stretch and without
 * applying huge forces.
 * NOTE: this joint is not documented in the manual because it was
 * developed to be used in the testbed. If you want to learn how to
 * use the mouse joint, look at the testbed.
 */
export declare class b2MouseJoint extends b2Joint {
    protected readonly m_localAnchorB: b2Vec2;
    protected readonly m_targetA: b2Vec2;
    protected m_stiffness: number;
    protected m_damping: number;
    protected m_beta: number;
    protected readonly m_impulse: b2Vec2;
    protected m_maxForce: number;
    protected m_gamma: number;
    protected m_indexB: number;
    protected readonly m_rB: b2Vec2;
    protected readonly m_localCenterB: b2Vec2;
    protected m_invMassB: number;
    protected m_invIB: number;
    protected readonly m_mass: b2Mat22;
    protected readonly m_C: b2Vec2;
    protected constructor(def: b2IMouseJointDef);
    /** Use this to update the target point. */
    SetTarget(target: XY): void;
    GetTarget(): b2Vec2;
    /** Set the maximum force in Newtons. */
    SetMaxForce(force: number): void;
    /** Get the maximum force in Newtons. */
    GetMaxForce(): number;
    /** Set the linear stiffness in N/m */
    SetStiffness(stiffness: number): void;
    /** Get the linear stiffness in N/m */
    GetStiffness(): number;
    /** Set linear damping in N*s/m */
    SetDamping(damping: number): void;
    /** Get linear damping in N*s/m */
    GetDamping(): number;
    protected InitVelocityConstraints(data: b2SolverData): void;
    protected SolveVelocityConstraints(data: b2SolverData): void;
    protected SolvePositionConstraints(_data: b2SolverData): boolean;
    GetAnchorA<T extends XY>(out: T): T;
    GetAnchorB<T extends XY>(out: T): T;
    GetReactionForce<T extends XY>(inv_dt: number, out: T): T;
    GetReactionTorque(_inv_dt: number): number;
    ShiftOrigin(newOrigin: XY): void;
    Draw(draw: b2Draw): void;
}
//# sourceMappingURL=b2_mouse_joint.d.ts.map