UNPKG

playcanvas

Version:

Open-source WebGL/WebGPU 3D engine for the web

90 lines (89 loc) 3.51 kB
/** * Represents a single point of contact between two colliding rigid bodies in the physics * simulation. Each contact point stores detailed spatial information about the collision, * including both local and world space coordinates of the exact contact points on both entities, * the contact normal direction, and the collision impulse force. * * Contact points are generated by the physics engine during collision detection and are typically * accessed through a {@link ContactResult} object, which can contain multiple contact points for a * single collision between two entities. Multiple contact points commonly occur when objects * collide along edges or faces rather than at a single point. * * The impulse property can be particularly useful for gameplay mechanics that need to respond * differently based on the force of impact, such as damage calculations or sound effect volume. * * @example * // Access contact points from a collision event * entity.collision.on('contact', (result) => { * // Get the first contact point * const contact = result.contacts[0]; * * // Get the contact position in world space * const worldPos = contact.point; * * // Check how hard the collision was * if (contact.impulse > 10) { * console.log("That was a hard impact!"); * } * }); * * @category Physics */ export class ContactPoint { /** * Create a new ContactPoint instance. * * @param {Vec3} [localPoint] - The point on the entity where the contact occurred, relative to * the entity. * @param {Vec3} [localPointOther] - The point on the other entity where the contact occurred, * relative to the other entity. * @param {Vec3} [point] - The point on the entity where the contact occurred, in world space. * @param {Vec3} [pointOther] - The point on the other entity where the contact occurred, in * world space. * @param {Vec3} [normal] - The normal vector of the contact on the other entity, in world * space. * @param {number} [impulse] - The total accumulated impulse applied by the constraint solver * during the last sub-step. Describes how hard two objects collide. Defaults to 0. * @ignore */ constructor(localPoint?: Vec3, localPointOther?: Vec3, point?: Vec3, pointOther?: Vec3, normal?: Vec3, impulse?: number); /** * The point on the entity where the contact occurred, relative to the entity. * * @type {Vec3} */ localPoint: Vec3; /** * The point on the other entity where the contact occurred, relative to the other entity. * * @type {Vec3} */ localPointOther: Vec3; /** * The point on the entity where the contact occurred, in world space. * * @type {Vec3} */ point: Vec3; /** * The point on the other entity where the contact occurred, in world space. * * @type {Vec3} */ pointOther: Vec3; /** * The normal vector of the contact on the other entity, in world space. This vector points * away from the surface of the other entity at the point of contact. * * @type {Vec3} */ normal: Vec3; /** * The total accumulated impulse applied by the constraint solver during the last sub-step. * This value represents how hard two objects collided. Higher values indicate stronger impacts. * * @type {number} */ impulse: number; } import { Vec3 } from '../../../core/math/vec3.js';