UNPKG

@dimforge/rapier3d

Version:

3-dimensional physics engine in Rust - official JS bindings.

260 lines (259 loc) 10.7 kB
import { Rotation, Vector } from "../math"; import { RawGenericJoint, RawImpulseJointSet, RawJointAxis } from "../raw"; import { RigidBody } from "./rigid_body"; import { RigidBodySet } from "./rigid_body_set"; /** * The integer identifier of a collider added to a `ColliderSet`. */ export type ImpulseJointHandle = number; /** * An enum grouping all possible types of joints: * * - `Revolute`: A revolute joint that removes all degrees of freedom between the affected * bodies except for the rotation along one axis. * - `Fixed`: A fixed joint that removes all relative degrees of freedom between the affected bodies. * - `Prismatic`: A prismatic joint that removes all degrees of freedom between the affected * bodies except for the translation along one axis. * - `Spherical`: (3D only) A spherical joint that removes all relative linear degrees of freedom between the affected bodies. * - `Generic`: (3D only) A joint with customizable degrees of freedom, allowing any of the 6 axes to be locked. */ export declare enum JointType { Revolute = 0, Fixed = 1, Prismatic = 2, Rope = 3, Spring = 4, Spherical = 5, Generic = 6 } export declare enum MotorModel { AccelerationBased = 0, ForceBased = 1 } /** * An enum representing the possible joint axes of a generic joint. * They can be ORed together, like: * JointAxesMask.LinX || JointAxesMask.LinY * to get a joint that is only free in the X and Y translational (positional) axes. * * Possible free axes are: * * - `X`: X translation axis * - `Y`: Y translation axis * - `Z`: Z translation axis * - `AngX`: X angular rotation axis * - `AngY`: Y angular rotations axis * - `AngZ`: Z angular rotation axis */ export declare enum JointAxesMask { LinX = 1, LinY = 2, LinZ = 4, AngX = 8, AngY = 16, AngZ = 32 } export declare class ImpulseJoint { protected rawSet: RawImpulseJointSet; protected bodySet: RigidBodySet; handle: ImpulseJointHandle; constructor(rawSet: RawImpulseJointSet, bodySet: RigidBodySet, handle: ImpulseJointHandle); static newTyped(rawSet: RawImpulseJointSet, bodySet: RigidBodySet, handle: ImpulseJointHandle): ImpulseJoint; /** @internal */ finalizeDeserialization(bodySet: RigidBodySet): void; /** * Checks if this joint is still valid (i.e. that it has * not been deleted from the joint set yet). */ isValid(): boolean; /** * The first rigid-body this joint it attached to. */ body1(): RigidBody; /** * The second rigid-body this joint is attached to. */ body2(): RigidBody; /** * The type of this joint given as a string. */ type(): JointType; /** * The rotation quaternion that aligns this joint's first local axis to the `x` axis. */ frameX1(): Rotation; /** * The rotation matrix that aligns this joint's second local axis to the `x` axis. */ frameX2(): Rotation; /** * The position of the first anchor of this joint. * * The first anchor gives the position of the application point on the * local frame of the first rigid-body it is attached to. */ anchor1(): Vector; /** * The position of the second anchor of this joint. * * The second anchor gives the position of the application point on the * local frame of the second rigid-body it is attached to. */ anchor2(): Vector; /** * Sets the position of the first anchor of this joint. * * The first anchor gives the position of the application point on the * local frame of the first rigid-body it is attached to. */ setAnchor1(newPos: Vector): void; /** * Sets the position of the second anchor of this joint. * * The second anchor gives the position of the application point on the * local frame of the second rigid-body it is attached to. */ setAnchor2(newPos: Vector): void; /** * Controls whether contacts are computed between colliders attached * to the rigid-bodies linked by this joint. */ setContactsEnabled(enabled: boolean): void; /** * Indicates if contacts are enabled between colliders attached * to the rigid-bodies linked by this joint. */ contactsEnabled(): boolean; } export declare class UnitImpulseJoint extends ImpulseJoint { /** * The axis left free by this joint. */ protected rawAxis?(): RawJointAxis; /** * Are the limits enabled for this joint? */ limitsEnabled(): boolean; /** * The min limit of this joint. */ limitsMin(): number; /** * The max limit of this joint. */ limitsMax(): number; /** * Sets the limits of this joint. * * @param min - The minimum bound of this joint’s free coordinate. * @param max - The maximum bound of this joint’s free coordinate. */ setLimits(min: number, max: number): void; configureMotorModel(model: MotorModel): void; configureMotorVelocity(targetVel: number, factor: number): void; configureMotorPosition(targetPos: number, stiffness: number, damping: number): void; configureMotor(targetPos: number, targetVel: number, stiffness: number, damping: number): void; } export declare class FixedImpulseJoint extends ImpulseJoint { } export declare class RopeImpulseJoint extends ImpulseJoint { } export declare class SpringImpulseJoint extends ImpulseJoint { } export declare class PrismaticImpulseJoint extends UnitImpulseJoint { rawAxis(): RawJointAxis; } export declare class RevoluteImpulseJoint extends UnitImpulseJoint { rawAxis(): RawJointAxis; } export declare class GenericImpulseJoint extends ImpulseJoint { } export declare class SphericalImpulseJoint extends ImpulseJoint { } export declare class JointData { anchor1: Vector; anchor2: Vector; axis: Vector; frame1: Rotation; frame2: Rotation; jointType: JointType; limitsEnabled: boolean; limits: Array<number>; axesMask: JointAxesMask; stiffness: number; damping: number; length: number; private constructor(); /** * Creates a new joint descriptor that builds a Fixed joint. * * A fixed joint removes all the degrees of freedom between the affected bodies, ensuring their * anchor and local frames coincide in world-space. * * @param anchor1 - Point where the joint is attached on the first rigid-body affected by this joint. Expressed in the * local-space of the rigid-body. * @param frame1 - The reference orientation of the joint wrt. the first rigid-body. * @param anchor2 - Point where the joint is attached on the second rigid-body affected by this joint. Expressed in the * local-space of the rigid-body. * @param frame2 - The reference orientation of the joint wrt. the second rigid-body. */ static fixed(anchor1: Vector, frame1: Rotation, anchor2: Vector, frame2: Rotation): JointData; static spring(rest_length: number, stiffness: number, damping: number, anchor1: Vector, anchor2: Vector): JointData; static rope(length: number, anchor1: Vector, anchor2: Vector): JointData; /** * Create a new joint descriptor that builds generic joints. * * A generic joint allows customizing its degrees of freedom * by supplying a mask of the joint axes that should remain locked. * * @param anchor1 - Point where the joint is attached on the first rigid-body affected by this joint. Expressed in the * local-space of the rigid-body. * @param anchor2 - Point where the joint is attached on the second rigid-body affected by this joint. Expressed in the * local-space of the rigid-body. * @param axis - The X axis of the joint, expressed in the local-space of the rigid-bodies it is attached to. * @param axesMask - Mask representing the locked axes of the joint. You can use logical OR to select these from * the JointAxesMask enum. For example, passing (JointAxesMask.AngX || JointAxesMask.AngY) will * create a joint locked in the X and Y rotational axes. */ static generic(anchor1: Vector, anchor2: Vector, axis: Vector, axesMask: JointAxesMask): JointData; /** * Create a new joint descriptor that builds spherical joints. * * A spherical joint allows three relative rotational degrees of freedom * by preventing any relative translation between the anchors of the * two attached rigid-bodies. * * @param anchor1 - Point where the joint is attached on the first rigid-body affected by this joint. Expressed in the * local-space of the rigid-body. * @param anchor2 - Point where the joint is attached on the second rigid-body affected by this joint. Expressed in the * local-space of the rigid-body. */ static spherical(anchor1: Vector, anchor2: Vector): JointData; /** * Creates a new joint descriptor that builds a Prismatic joint. * * A prismatic joint removes all the degrees of freedom between the * affected bodies, except for the translation along one axis. * * @param anchor1 - Point where the joint is attached on the first rigid-body affected by this joint. Expressed in the * local-space of the rigid-body. * @param anchor2 - Point where the joint is attached on the second rigid-body affected by this joint. Expressed in the * local-space of the rigid-body. * @param axis - Axis of the joint, expressed in the local-space of the rigid-bodies it is attached to. */ static prismatic(anchor1: Vector, anchor2: Vector, axis: Vector): JointData; /** * Create a new joint descriptor that builds Revolute joints. * * A revolute joint removes all degrees of freedom between the affected * bodies except for the rotation along one axis. * * @param anchor1 - Point where the joint is attached on the first rigid-body affected by this joint. Expressed in the * local-space of the rigid-body. * @param anchor2 - Point where the joint is attached on the second rigid-body affected by this joint. Expressed in the * local-space of the rigid-body. * @param axis - Axis of the joint, expressed in the local-space of the rigid-bodies it is attached to. */ static revolute(anchor1: Vector, anchor2: Vector, axis: Vector): JointData; intoRaw(): RawGenericJoint; }