crashcat docs
    Preparing search index...

    Type Alias Contact

    contact between two shapes.

    every live contact is nested under exactly one persistent pair record: it lives in that record's chain (headed by pairs.firstContact[pairRecord]) via the prevInPair/nextInPair links. the chain is doubly-linked (unlike jolt's singly-linked manifold chain) so a contact can be unlinked in O(1) when destroyed in place.

    type Contact = {
        bodyIdA: number;
        bodyIdB: number;
        bodyIndexA: number;
        bodyIndexB: number;
        contactIndex: number;
        lastProcessedFrame: number;
        manifolds: [CachedManifold, CachedManifold];
        nextInPair: number;
        pairRecord: number;
        prevInPair: number;
        subShapeIdA: number;
        subShapeIdB: number;
    }
    Index

    Properties

    bodyIdA: number

    body A ID (always <= bodyIdB for consistent ordering)

    bodyIdB: number

    body B ID (always >= bodyIdA for consistent ordering)

    bodyIndexA: number

    body A index

    bodyIndexB: number

    body B index

    contactIndex: number

    contact index (index in contacts.contacts when active, -1 when freed)

    lastProcessedFrame: number

    frameStamp of the last step that processed this contact (for stale contact cleanup); init 0

    Double-buffered cached manifold (read / write side per step). Use getReadManifold / getWriteManifold to access via the Contacts.readIdx flip — never index directly.

    nextInPair: number

    next contact index in the owning pair's chain (or INVALID_CONTACT_KEY)

    pairRecord: number

    owning pair record index; -1 when freed

    prevInPair: number

    previous contact index in the owning pair's chain (or INVALID_CONTACT_KEY)

    subShapeIdA: number

    sub-shape A ID

    subShapeIdB: number

    sub-shape B ID