UNPKG

@box2d/debug-draw

Version:

Debug drawing helper for @box2d

115 lines 4.86 kB
import { b2Vec2 } from "../common/b2_math"; import { b2Manifold } from "../collision/b2_collision"; import { b2Contact } from "./b2_contact"; import { b2Joint } from "./b2_joint"; import { b2Fixture } from "./b2_fixture"; import { b2Readonly } from "../common/b2_readonly"; /** * Joints and fixtures are destroyed when their associated * body is destroyed. Implement this listener so that you * may nullify references to these joints and shapes. */ export declare class b2DestructionListener { /** * Called when any joint is about to be destroyed due * to the destruction of one of its attached bodies. */ SayGoodbyeJoint(_joint: b2Joint): void; /** * Called when any fixture is about to be destroyed due * to the destruction of its parent body. */ SayGoodbyeFixture(_fixture: b2Fixture): void; } /** * Implement this class to provide collision filtering. In other words, you can implement * this class if you want finer control over contact creation. */ export declare class b2ContactFilter { /** * Return true if contact calculations should be performed between these two shapes. * * @warning for performance reasons this is only called when the AABBs begin to overlap. */ ShouldCollide(fixtureA: b2Fixture, fixtureB: b2Fixture): boolean; static readonly b2_defaultFilter: b2ContactFilter; } /** * Contact impulses for reporting. Impulses are used instead of forces because * sub-step forces may approach infinity for rigid body collisions. These * match up one-to-one with the contact points in b2Manifold. */ export declare class b2ContactImpulse { normalImpulses: number[]; tangentImpulses: number[]; count: number; } /** * Implement this class to get contact information. You can use these results for * things like sounds and game logic. You can also get contact results by * traversing the contact lists after the time step. However, you might miss * some contacts because continuous physics leads to sub-stepping. * Additionally you may receive multiple callbacks for the same contact in a * single time step. * You should strive to make your callbacks efficient because there may be * many callbacks per time step. * * @warning You cannot create/destroy Box2D entities inside these callbacks. */ export declare class b2ContactListener { /** * Called when two fixtures begin to touch. */ BeginContact(_contact: b2Contact): void; /** * Called when two fixtures cease to touch. */ EndContact(_contact: b2Contact): void; /** * This is called after a contact is updated. This allows you to inspect a * contact before it goes to the solver. If you are careful, you can modify the * contact manifold (e.g. disable contact). * A copy of the old manifold is provided so that you can detect changes. * Note: this is called only for awake bodies. * Note: this is called even when the number of contact points is zero. * Note: this is not called for sensors. * Note: if you set the number of contact points to zero, you will not * get an EndContact callback. However, you may get a BeginContact callback * the next step. */ PreSolve(_contact: b2Contact, _oldManifold: b2Manifold): void; /** * This lets you inspect a contact after the solver is finished. This is useful * for inspecting impulses. * Note: the contact manifold does not include time of impact impulses, which can be * arbitrarily large if the sub-step is small. Hence the impulse is provided explicitly * in a separate data structure. * Note: this is only called for contacts that are touching, solid, and awake. */ PostSolve(_contact: b2Contact, _impulse: b2ContactImpulse): void; static readonly b2_defaultListener: b2ContactListener; } /** * Callback class for AABB queries * See b2World::Query */ export type b2QueryCallback = (fixture: b2Fixture) => boolean; /** * Callback class for ray casts. * See b2World::RayCast * Called for each fixture found in the query. You control how the ray cast * proceeds by returning a float: * return -1: ignore this fixture and continue * return 0: terminate the ray cast * return fraction: clip the ray to this point * return 1: don't clip the ray and continue * * @param fixture The fixture hit by the ray * @param point The point of initial intersection * @param normal The normal vector at the point of intersection * @param fraction The fraction along the ray at the point of intersection * @returns -1 to filter, 0 to terminate, fraction to clip the ray for * closest hit, 1 to continue */ export type b2RayCastCallback = (fixture: b2Fixture, point: b2Readonly<b2Vec2>, normal: b2Readonly<b2Vec2>, fraction: number) => number; //# sourceMappingURL=b2_world_callbacks.d.ts.map