import { b2Color, b2Draw } from "../common/b2_draw";
import { b2Vec2, b2Transform, XY } from "../common/b2_math";
import { b2Readonly } from "../common/b2_readonly";
import { b2AABB, b2RayCastInput, b2RayCastOutput } from "./b2_collision";
import { b2DistanceProxy } from "./b2_distance";
import { b2MassData, b2Shape } from "./b2_shape";
/**
 * A line segment (edge) shape. These can be connected in chains or loops
 * to other edge shapes. Edges created independently are two-sided and do
 * no provide smooth movement across junctions.
 */
export declare class b2EdgeShape extends b2Shape {
    /** These are the edge vertices */
    readonly m_vertex1: b2Vec2;
    readonly m_vertex2: b2Vec2;
    /** Optional adjacent vertices. These are used for smooth collision. */
    readonly m_vertex0: b2Vec2;
    readonly m_vertex3: b2Vec2;
    /** Uses m_vertex0 and m_vertex3 to create smooth collision. */
    m_oneSided: boolean;
    constructor();
    /**
     * Set this as a part of a sequence. Vertex v0 precedes the edge and vertex v3
     * follows. These extra vertices are used to provide smooth movement
     * across junctions. This also makes the collision one-sided. The edge
     * normal points to the right looking from v1 to v2.
     */
    SetOneSided(v0: XY, v1: XY, v2: XY, v3: XY): b2EdgeShape;
    /**
     * Set this as an isolated edge. Collision is two-sided.
     */
    SetTwoSided(v1: XY, v2: XY): b2EdgeShape;
    /**
     * Implement b2Shape.
     */
    Clone(): b2EdgeShape;
    Copy(other: b2EdgeShape): b2EdgeShape;
    /**
     * @see b2Shape::GetChildCount
     */
    GetChildCount(): number;
    /**
     * @see b2Shape::TestPoint
     */
    TestPoint(_xf: b2Readonly<b2Transform>, _p: XY): boolean;
    private static RayCast_s_p1;
    private static RayCast_s_p2;
    private static RayCast_s_d;
    private static RayCast_s_e;
    private static RayCast_s_q;
    private static RayCast_s_r;
    /**
     * Implement b2Shape.
     *
     * p = p1 + t * d
     * v = v1 + s * e
     * p1 + t * d = v1 + s * e
     * s * e - t * d = p1 - v1
     */
    RayCast(output: b2RayCastOutput, input: b2RayCastInput, xf: b2Readonly<b2Transform>, _childIndex: number): boolean;
    private static ComputeAABB_s_v1;
    private static ComputeAABB_s_v2;
    /**
     * @see b2Shape::ComputeAABB
     */
    ComputeAABB(aabb: b2AABB, xf: b2Readonly<b2Transform>, _childIndex: number): void;
    /**
     * @see b2Shape::ComputeMass
     */
    ComputeMass(massData: b2MassData, _density: number): void;
    SetupDistanceProxy(proxy: b2DistanceProxy, _index: number): void;
    Draw(draw: b2Draw, color: b2Color): void;
}
//# sourceMappingURL=b2_edge_shape.d.ts.map