@dimforge/rapier3d
Version:
3-dimensional physics engine in Rust - official JS bindings.
63 lines (54 loc) • 1.52 kB
text/typescript
import {Vector, VectorOps} from "../math";
import {RawShapeContact} from "../raw";
/**
* The contact info between two shapes.
*/
export class ShapeContact {
/**
* Distance between the two contact points.
* If this is negative, this contact represents a penetration.
*/
distance: number;
/**
* Position of the contact on the first shape.
*/
point1: Vector;
/**
* Position of the contact on the second shape.
*/
point2: Vector;
/**
* Contact normal, pointing towards the exterior of the first shape.
*/
normal1: Vector;
/**
* Contact normal, pointing towards the exterior of the second shape.
* If these contact data are expressed in world-space, this normal is equal to -normal1.
*/
normal2: Vector;
constructor(
dist: number,
point1: Vector,
point2: Vector,
normal1: Vector,
normal2: Vector,
) {
this.distance = dist;
this.point1 = point1;
this.point2 = point2;
this.normal1 = normal1;
this.normal2 = normal2;
}
public static fromRaw(raw: RawShapeContact): ShapeContact {
if (!raw) return null;
const result = new ShapeContact(
raw.distance(),
VectorOps.fromRaw(raw.point1()),
VectorOps.fromRaw(raw.point2()),
VectorOps.fromRaw(raw.normal1()),
VectorOps.fromRaw(raw.normal2()),
);
raw.free();
return result;
}
}