@box2d/debug-draw
Version:
Debug drawing helper for @box2d
115 lines • 4.86 kB
TypeScript
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