102 lines
3.5 KiB
TypeScript
102 lines
3.5 KiB
TypeScript
import { RawContactForceEvent, RawEventQueue } from "../raw";
|
|
import { ColliderHandle } from "../geometry";
|
|
import { Vector } from "../math";
|
|
/**
|
|
* Flags indicating what events are enabled for colliders.
|
|
*/
|
|
export declare enum ActiveEvents {
|
|
NONE = 0,
|
|
/**
|
|
* Enable collision events.
|
|
*/
|
|
COLLISION_EVENTS = 1,
|
|
/**
|
|
* Enable contact force events.
|
|
*/
|
|
CONTACT_FORCE_EVENTS = 2
|
|
}
|
|
/**
|
|
* Event occurring when the sum of the magnitudes of the
|
|
* contact forces between two colliders exceed a threshold.
|
|
*
|
|
* This object should **not** be stored anywhere. Its properties can only be
|
|
* read from within the closure given to `EventHandler.drainContactForceEvents`.
|
|
*/
|
|
export declare class TempContactForceEvent {
|
|
raw: RawContactForceEvent;
|
|
free(): void;
|
|
/**
|
|
* The first collider involved in the contact.
|
|
*/
|
|
collider1(): ColliderHandle;
|
|
/**
|
|
* The second collider involved in the contact.
|
|
*/
|
|
collider2(): ColliderHandle;
|
|
/**
|
|
* The sum of all the forces between the two colliders.
|
|
*/
|
|
totalForce(): Vector;
|
|
/**
|
|
* The sum of the magnitudes of each force between the two colliders.
|
|
*
|
|
* Note that this is **not** the same as the magnitude of `self.total_force`.
|
|
* Here we are summing the magnitude of all the forces, instead of taking
|
|
* the magnitude of their sum.
|
|
*/
|
|
totalForceMagnitude(): number;
|
|
/**
|
|
* The world-space (unit) direction of the force with strongest magnitude.
|
|
*/
|
|
maxForceDirection(): Vector;
|
|
/**
|
|
* The magnitude of the largest force at a contact point of this contact pair.
|
|
*/
|
|
maxForceMagnitude(): number;
|
|
}
|
|
/**
|
|
* A structure responsible for collecting events generated
|
|
* by the physics engine.
|
|
*
|
|
* To avoid leaking WASM resources, this MUST be freed manually with `eventQueue.free()`
|
|
* once you are done using it.
|
|
*/
|
|
export declare class EventQueue {
|
|
raw: RawEventQueue;
|
|
/**
|
|
* Creates a new event collector.
|
|
*
|
|
* @param autoDrain -setting this to `true` is strongly recommended. If true, the collector will
|
|
* be automatically drained before each `world.step(collector)`. If false, the collector will
|
|
* keep all events in memory unless it is manually drained/cleared; this may lead to unbounded use of
|
|
* RAM if no drain is performed.
|
|
*/
|
|
constructor(autoDrain: boolean, raw?: RawEventQueue);
|
|
/**
|
|
* Release the WASM memory occupied by this event-queue.
|
|
*/
|
|
free(): void;
|
|
/**
|
|
* Applies the given javascript closure on each collision event of this collector, then clear
|
|
* the internal collision event buffer.
|
|
*
|
|
* @param f - JavaScript closure applied to each collision event. The
|
|
* closure must take three arguments: two integers representing the handles of the colliders
|
|
* involved in the collision, and a boolean indicating if the collision started (true) or stopped
|
|
* (false).
|
|
*/
|
|
drainCollisionEvents(f: (handle1: ColliderHandle, handle2: ColliderHandle, started: boolean) => void): void;
|
|
/**
|
|
* Applies the given javascript closure on each contact force event of this collector, then clear
|
|
* the internal collision event buffer.
|
|
*
|
|
* @param f - JavaScript closure applied to each collision event. The
|
|
* closure must take one `TempContactForceEvent` argument.
|
|
*/
|
|
drainContactForceEvents(f: (event: TempContactForceEvent) => void): void;
|
|
/**
|
|
* Removes all events contained by this collector
|
|
*/
|
|
clear(): void;
|
|
}
|