/// /// /// /// /// declare namespace cp { export class ContactPoint { point: Vect; normal: Vect; dist: number; constructor(point: Vect, normal: Vect, dist: number); } export class CollisionHandler { a: number; b: number; constructor(); begin(arb: Arbiter, space: Space): boolean; preSolve(arb: Arbiter, space: Space): boolean; postSolve(arb: Arbiter, space: Space): void; separate(arb: Arbiter, space: Space): void; } export type ArbiterState = ("first-coll" | "normal" | "ignore" | "cached"); export class Arbiter { e: number; u: number; vrSurface: Vect; a: Shape; body_a: Body; b: Shape; body_b: Body; threadNextA: Arbiter; threadPrevA: Arbiter; threadNextB: Arbiter; threadPrevB: Arbiter; contacts: Contact[]; stamp: number; handler: CollisionHandler; swappedColl: boolean; state: ArbiterState; constructor(a: Shape, b: Shape); getShapes(): [Shape, Shape]; totalImpulse(): Vect; totalImpulseWithFriction(): Vect; totalKE(): number; ignore(): void; getA(): Shape; getB(): Shape; isFirstContact(): boolean; getContactPointSet(): ContactPoint[]; getNormal(i: number): Vect; getPoint(i: number): Vect; getDepth(i: number): number; unthread(): void; update(contacts: Contact[], handler: CollisionHandler, a: Shape, b: Shape): void; preStep(dt: number, slop: number, bias: number): void; applyCachedImpulse(dtCoef: number): void; applyImpulse(): void; callSeparate(space: Space): void; next(body: Body): Arbiter; } }