@flighthq/collision 0.3.0-next.906.07cea63 → 0.3.1-next.209.43ef1bc
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/collideContactManifold.d.ts +3 -0
- package/dist/collideContactManifold.d.ts.map +1 -0
- package/dist/collideContactManifold.js +109 -0
- package/dist/collideContactManifold.js.map +1 -0
- package/dist/collisionShapeValidation.d.ts +4 -0
- package/dist/collisionShapeValidation.d.ts.map +1 -0
- package/dist/collisionShapeValidation.js +99 -0
- package/dist/collisionShapeValidation.js.map +1 -0
- package/dist/contactFeatureId.d.ts +3 -0
- package/dist/contactFeatureId.d.ts.map +1 -0
- package/dist/contactFeatureId.js +26 -0
- package/dist/contactFeatureId.js.map +1 -0
- package/dist/contactManifold.d.ts +4 -0
- package/dist/contactManifold.d.ts.map +1 -0
- package/dist/contactManifold.js +30 -0
- package/dist/contactManifold.js.map +1 -0
- package/dist/contract.d.ts +7 -0
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js +7 -0
- package/dist/contract.js.map +1 -1
- package/dist/convexVertices.d.ts +4 -0
- package/dist/convexVertices.d.ts.map +1 -0
- package/dist/convexVertices.js +41 -0
- package/dist/convexVertices.js.map +1 -0
- package/dist/enableCollisionGuards.d.ts +4 -0
- package/dist/enableCollisionGuards.d.ts.map +1 -0
- package/dist/enableCollisionGuards.js +41 -0
- package/dist/enableCollisionGuards.js.map +1 -0
- package/dist/explainCollisionTest.d.ts +3 -0
- package/dist/explainCollisionTest.d.ts.map +1 -0
- package/dist/explainCollisionTest.js +21 -0
- package/dist/explainCollisionTest.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/pointContainment.d.ts.map +1 -1
- package/dist/pointContainment.js +35 -6
- package/dist/pointContainment.js.map +1 -1
- package/dist/raycastCollisionShape.d.ts +4 -0
- package/dist/raycastCollisionShape.d.ts.map +1 -0
- package/dist/raycastCollisionShape.js +295 -0
- package/dist/raycastCollisionShape.js.map +1 -0
- package/dist/segmentCollision.d.ts.map +1 -1
- package/dist/segmentCollision.js +67 -30
- package/dist/segmentCollision.js.map +1 -1
- package/dist/shapeCollision.d.ts.map +1 -1
- package/dist/shapeCollision.js +139 -73
- package/dist/shapeCollision.js.map +1 -1
- package/dist/shapeContact.d.ts +12 -0
- package/dist/shapeContact.d.ts.map +1 -0
- package/dist/shapeContact.js +331 -0
- package/dist/shapeContact.js.map +1 -0
- package/dist/sweepCollisionShape.d.ts +4 -0
- package/dist/sweepCollisionShape.d.ts.map +1 -0
- package/dist/sweepCollisionShape.js +309 -0
- package/dist/sweepCollisionShape.js.map +1 -0
- package/dist/testCollision.d.ts +2 -1
- package/dist/testCollision.d.ts.map +1 -1
- package/dist/testCollision.js +7 -0
- package/dist/testCollision.js.map +1 -1
- package/package.json +7 -4
- package/src/collideContactManifold.test.ts +133 -0
- package/src/collisionShapeValidation.test.ts +35 -0
- package/src/contactFeatureId.test.ts +50 -0
- package/src/contactManifold.test.ts +55 -0
- package/src/convexVertices.test.ts +55 -0
- package/src/enableCollisionGuards.test.ts +79 -0
- package/src/explainCollisionTest.test.ts +52 -0
- package/src/pointContainment.test.ts +23 -0
- package/src/raycastCollisionShape.test.ts +65 -0
- package/src/segmentCollision.test.ts +20 -0
- package/src/shapeCollision.test.ts +80 -0
- package/src/shapeContact.test.ts +422 -0
- package/src/sweepCollisionShape.test.ts +131 -0
- package/src/testCollision.test.ts +38 -1
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { CollisionContactManifold, CollisionShape } from '@flighthq/types/contract';
|
|
2
|
+
export declare function collideContactManifold(a: Readonly<CollisionShape>, b: Readonly<CollisionShape>, out: CollisionContactManifold): boolean;
|
|
3
|
+
//# sourceMappingURL=collideContactManifold.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collideContactManifold.d.ts","sourceRoot":"","sources":["../src/collideContactManifold.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,cAAc,EAAsB,MAAM,0BAA0B,CAAC;AA0C7G,wBAAgB,sBAAsB,CACpC,CAAC,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC3B,CAAC,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC3B,GAAG,EAAE,wBAAwB,GAC5B,OAAO,CAiET"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { clearCollisionContactManifold } from './contactManifold';
|
|
2
|
+
import { collideAabbAabbContactManifold, collideAabbObbContactManifold, collideAabbPolygonContactManifold, collideCircleAabbContactManifold, collideCircleCircleContactManifold, collideCircleObbContactManifold, collideCirclePolygonContactManifold, collideObbObbContactManifold, collideObbPolygonContactManifold, collidePolygonPolygonContactManifold, } from './shapeContact';
|
|
3
|
+
// Generic narrow-phase contact test: the `testCollision` dispatcher's contact-resolving twin.
|
|
4
|
+
// Dispatches on the two shapes' `kind`s and writes the full contact manifold pushing **A out of B**.
|
|
5
|
+
// Shapes are ordered by kind rank before dispatch, and the normal is negated when the arguments
|
|
6
|
+
// arrived reversed, exactly as `testCollision` does. Contact points are world-space and need no such
|
|
7
|
+
// correction.
|
|
8
|
+
//
|
|
9
|
+
// **Argument order.** Overlap, normal, and depth are order-invariant for every pair (the normal
|
|
10
|
+
// negates, nothing else moves). Contact points and their feature ids are order-invariant only for
|
|
11
|
+
// pairs of DIFFERENT kinds, where the kind rank fixes which shape owns the reference face. For two
|
|
12
|
+
// shapes of the SAME kind the caller's order decides: two coincident faces tie exactly on separation
|
|
13
|
+
// (a box resting squarely on a box is the common case), the tie resolves toward the first argument,
|
|
14
|
+
// and the reference shape is the one whose face the contact points then lie on. Reversing the
|
|
15
|
+
// arguments moves the points to the opposite surface — one penetration depth away, both correct —
|
|
16
|
+
// and renumbers their ids.
|
|
17
|
+
//
|
|
18
|
+
// This is a property of the pair, not a defect to fix here. Resolving it would need a tie-break
|
|
19
|
+
// derived from the shapes' own coordinates, and any such rule is a pure function of values that flips
|
|
20
|
+
// the moment those values cross — reintroducing, at dispatch, the frame-to-frame flapping that the
|
|
21
|
+
// reference-face bias exists to prevent. Stability across frames needs memory of the previous frame,
|
|
22
|
+
// which a stateless narrow phase does not have and a simulation does. So a caller that keys anything
|
|
23
|
+
// on feature identity (a warm-start cache) must pass each pair in a STABLE order of its own — ordering
|
|
24
|
+
// by persistent body identity, not by geometry, since only identity survives motion. `@flighthq/
|
|
25
|
+
// physics2d` orders every pair by body index before it calls.
|
|
26
|
+
//
|
|
27
|
+
// Area-less kinds (`segment`, `point`) and unknown kinds carry no contact — the pair is reported as
|
|
28
|
+
// non-overlapping. The direct per-pair functions remain the hot path.
|
|
29
|
+
export function collideContactManifold(a, b, out) {
|
|
30
|
+
const rankA = contactShapeKindRank(a.kind);
|
|
31
|
+
const rankB = contactShapeKindRank(b.kind);
|
|
32
|
+
if (rankA < 0 || rankB < 0) {
|
|
33
|
+
clearCollisionContactManifold(out);
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
const swapped = rankA > rankB;
|
|
37
|
+
const lo = swapped ? b : a;
|
|
38
|
+
const hi = swapped ? a : b;
|
|
39
|
+
let overlapping = false;
|
|
40
|
+
switch (lo.kind) {
|
|
41
|
+
case 'circle':
|
|
42
|
+
switch (hi.kind) {
|
|
43
|
+
case 'circle':
|
|
44
|
+
overlapping = collideCircleCircleContactManifold(lo, hi, out);
|
|
45
|
+
break;
|
|
46
|
+
case 'aabb':
|
|
47
|
+
overlapping = collideCircleAabbContactManifold(lo, hi, out);
|
|
48
|
+
break;
|
|
49
|
+
case 'obb':
|
|
50
|
+
overlapping = collideCircleObbContactManifold(lo, hi, out);
|
|
51
|
+
break;
|
|
52
|
+
case 'polygon':
|
|
53
|
+
overlapping = collideCirclePolygonContactManifold(lo, hi, out);
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
break;
|
|
57
|
+
case 'aabb':
|
|
58
|
+
switch (hi.kind) {
|
|
59
|
+
case 'aabb':
|
|
60
|
+
overlapping = collideAabbAabbContactManifold(lo, hi, out);
|
|
61
|
+
break;
|
|
62
|
+
case 'obb':
|
|
63
|
+
overlapping = collideAabbObbContactManifold(lo, hi, out);
|
|
64
|
+
break;
|
|
65
|
+
case 'polygon':
|
|
66
|
+
overlapping = collideAabbPolygonContactManifold(lo, hi, out);
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
break;
|
|
70
|
+
case 'obb':
|
|
71
|
+
switch (hi.kind) {
|
|
72
|
+
case 'obb':
|
|
73
|
+
overlapping = collideObbObbContactManifold(lo, hi, out);
|
|
74
|
+
break;
|
|
75
|
+
case 'polygon':
|
|
76
|
+
overlapping = collideObbPolygonContactManifold(lo, hi, out);
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
break;
|
|
80
|
+
case 'polygon':
|
|
81
|
+
if (hi.kind === 'polygon') {
|
|
82
|
+
overlapping = collidePolygonPolygonContactManifold(lo, hi, out);
|
|
83
|
+
}
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
if (overlapping && swapped) {
|
|
87
|
+
out.normalX = -out.normalX;
|
|
88
|
+
out.normalY = -out.normalY;
|
|
89
|
+
}
|
|
90
|
+
return overlapping;
|
|
91
|
+
}
|
|
92
|
+
// Canonical dispatch rank of a shape kind, or -1 for kinds that carry no contact (segment, point,
|
|
93
|
+
// and any custom kind). Ordering the pair by rank collapses the 4x4 kind matrix to its ten lower-
|
|
94
|
+
// triangular contact pairs.
|
|
95
|
+
function contactShapeKindRank(kind) {
|
|
96
|
+
switch (kind) {
|
|
97
|
+
case 'circle':
|
|
98
|
+
return 0;
|
|
99
|
+
case 'aabb':
|
|
100
|
+
return 1;
|
|
101
|
+
case 'obb':
|
|
102
|
+
return 2;
|
|
103
|
+
case 'polygon':
|
|
104
|
+
return 3;
|
|
105
|
+
default:
|
|
106
|
+
return -1;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=collideContactManifold.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collideContactManifold.js","sourceRoot":"","sources":["../src/collideContactManifold.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { CollisionShape, CollisionTestStatus } from '@flighthq/types/contract';
|
|
2
|
+
export declare function getCollisionPolygonValidationStatus(points: readonly number[]): CollisionTestStatus | null;
|
|
3
|
+
export declare function getCollisionShapeValidationStatus(shape: Readonly<CollisionShape>): CollisionTestStatus | null;
|
|
4
|
+
//# sourceMappingURL=collisionShapeValidation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collisionShapeValidation.d.ts","sourceRoot":"","sources":["../src/collisionShapeValidation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAIpF,wBAAgB,mCAAmC,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,mBAAmB,GAAG,IAAI,CA2CzG;AAID,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,QAAQ,CAAC,cAAc,CAAC,GAAG,mBAAmB,GAAG,IAAI,CAwC7G"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
// Validates the flat polygon contract and distinguishes zero-area/malformed input from a real but
|
|
2
|
+
// non-convex polygon. Winding and collinear vertices are accepted when the polygon still has area.
|
|
3
|
+
export function getCollisionPolygonValidationStatus(points) {
|
|
4
|
+
if (points.length < 6 || (points.length & 1) !== 0)
|
|
5
|
+
return 'degenerate-shape';
|
|
6
|
+
let minX = Infinity;
|
|
7
|
+
let minY = Infinity;
|
|
8
|
+
let maxX = -Infinity;
|
|
9
|
+
let maxY = -Infinity;
|
|
10
|
+
for (let i = 0; i < points.length; i += 2) {
|
|
11
|
+
const x = points[i];
|
|
12
|
+
const y = points[i + 1];
|
|
13
|
+
if (!Number.isFinite(x) || !Number.isFinite(y))
|
|
14
|
+
return 'degenerate-shape';
|
|
15
|
+
if (x < minX)
|
|
16
|
+
minX = x;
|
|
17
|
+
if (x > maxX)
|
|
18
|
+
maxX = x;
|
|
19
|
+
if (y < minY)
|
|
20
|
+
minY = y;
|
|
21
|
+
if (y > maxY)
|
|
22
|
+
maxY = y;
|
|
23
|
+
}
|
|
24
|
+
const extent = Math.max(maxX - minX, maxY - minY);
|
|
25
|
+
if (!(extent > 0))
|
|
26
|
+
return 'degenerate-shape';
|
|
27
|
+
const crossEpsilon = extent * extent * RELATIVE_EPSILON;
|
|
28
|
+
const xOrigin = points[0];
|
|
29
|
+
const yOrigin = points[1];
|
|
30
|
+
let areaTwice = 0;
|
|
31
|
+
let turnSign = 0;
|
|
32
|
+
const count = points.length >> 1;
|
|
33
|
+
for (let i = 0; i < count; i++) {
|
|
34
|
+
const previous = (i + count - 1) % count;
|
|
35
|
+
const next = (i + 1) % count;
|
|
36
|
+
const x = points[i << 1] - xOrigin;
|
|
37
|
+
const y = points[(i << 1) + 1] - yOrigin;
|
|
38
|
+
const nextX = points[next << 1] - xOrigin;
|
|
39
|
+
const nextY = points[(next << 1) + 1] - yOrigin;
|
|
40
|
+
areaTwice += x * nextY - y * nextX;
|
|
41
|
+
const ax = x - (points[previous << 1] - xOrigin);
|
|
42
|
+
const ay = y - (points[(previous << 1) + 1] - yOrigin);
|
|
43
|
+
const bx = nextX - x;
|
|
44
|
+
const by = nextY - y;
|
|
45
|
+
const cross = ax * by - ay * bx;
|
|
46
|
+
if (Math.abs(cross) <= crossEpsilon)
|
|
47
|
+
continue;
|
|
48
|
+
const sign = cross > 0 ? 1 : -1;
|
|
49
|
+
if (turnSign !== 0 && sign !== turnSign)
|
|
50
|
+
return 'non-convex-polygon';
|
|
51
|
+
turnSign = sign;
|
|
52
|
+
}
|
|
53
|
+
return Math.abs(areaTwice) <= crossEpsilon || turnSign === 0 ? 'degenerate-shape' : null;
|
|
54
|
+
}
|
|
55
|
+
// Returns the invalid/unsupported status that prevents a shape from participating in a manifold,
|
|
56
|
+
// or null when it is a finite, positive-area member of the supported manifold shape set.
|
|
57
|
+
export function getCollisionShapeValidationStatus(shape) {
|
|
58
|
+
switch (shape.kind) {
|
|
59
|
+
case 'circle':
|
|
60
|
+
return Number.isFinite(shape.x) && Number.isFinite(shape.y) && Number.isFinite(shape.radius) && shape.radius > 0
|
|
61
|
+
? null
|
|
62
|
+
: 'degenerate-shape';
|
|
63
|
+
case 'aabb':
|
|
64
|
+
return Number.isFinite(shape.minX) &&
|
|
65
|
+
Number.isFinite(shape.minY) &&
|
|
66
|
+
Number.isFinite(shape.maxX) &&
|
|
67
|
+
Number.isFinite(shape.maxY) &&
|
|
68
|
+
shape.maxX > shape.minX &&
|
|
69
|
+
shape.maxY > shape.minY
|
|
70
|
+
? null
|
|
71
|
+
: 'degenerate-shape';
|
|
72
|
+
case 'obb':
|
|
73
|
+
return Number.isFinite(shape.x) &&
|
|
74
|
+
Number.isFinite(shape.y) &&
|
|
75
|
+
Number.isFinite(shape.halfW) &&
|
|
76
|
+
Number.isFinite(shape.halfH) &&
|
|
77
|
+
Number.isFinite(shape.rotation) &&
|
|
78
|
+
shape.halfW > 0 &&
|
|
79
|
+
shape.halfH > 0
|
|
80
|
+
? null
|
|
81
|
+
: 'degenerate-shape';
|
|
82
|
+
case 'polygon':
|
|
83
|
+
return getCollisionPolygonValidationStatus(shape.points);
|
|
84
|
+
case 'segment':
|
|
85
|
+
return Number.isFinite(shape.x0) &&
|
|
86
|
+
Number.isFinite(shape.y0) &&
|
|
87
|
+
Number.isFinite(shape.x1) &&
|
|
88
|
+
Number.isFinite(shape.y1) &&
|
|
89
|
+
(shape.x0 !== shape.x1 || shape.y0 !== shape.y1)
|
|
90
|
+
? 'unsupported-shape-kind'
|
|
91
|
+
: 'degenerate-shape';
|
|
92
|
+
case 'point':
|
|
93
|
+
return Number.isFinite(shape.x) && Number.isFinite(shape.y) ? 'unsupported-shape-kind' : 'degenerate-shape';
|
|
94
|
+
default:
|
|
95
|
+
return 'unsupported-shape-kind';
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
const RELATIVE_EPSILON = 1e-12;
|
|
99
|
+
//# sourceMappingURL=collisionShapeValidation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collisionShapeValidation.js","sourceRoot":"","sources":["../src/collisionShapeValidation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contactFeatureId.d.ts","sourceRoot":"","sources":["../src/contactFeatureId.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,mBAAmB,QAAU,CAAC;AAY3C,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,OAAO,EACrB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,OAAO,GACnB,MAAM,CAOR"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// Contact feature identity: the packing that lets a solver recognise, next frame, that it is looking
|
|
2
|
+
// at the same contact and may reuse the impulse it converged on. Private to the package — the packed
|
|
3
|
+
// value is opaque to callers, so only `CollisionContactPoint.featureId` crosses the boundary.
|
|
4
|
+
// The largest vertex count whose face indices still pack without aliasing. Face indices take 25 bits
|
|
5
|
+
// each, above a 1-bit contact-point slot and below the reference-shape bit. A convex polygon at this
|
|
6
|
+
// bound carries 67 million coordinates.
|
|
7
|
+
export const FEATURE_INDEX_LIMIT = 1 << 25;
|
|
8
|
+
// Packs the four components that identify a contact feature — which shape owned the reference face,
|
|
9
|
+
// which face of each shape met, and which end of the clipped span this point is — into one opaque
|
|
10
|
+
// integer.
|
|
11
|
+
//
|
|
12
|
+
// Positional multiplication, not bit shifts. `<<` truncates to 32 bits, so a shift-packed id silently
|
|
13
|
+
// WRAPS once a face index outgrows its field, and two unrelated face pairs collide on one id. That is
|
|
14
|
+
// not a crash: it is a solver warm-starting a contact with an impulse belonging to somewhere else on
|
|
15
|
+
// the shape, which surfaces as jitter that no stack trace explains. Here each field's scale exceeds
|
|
16
|
+
// the largest value packed below it, so distinct components can never sum to the same id, and the
|
|
17
|
+
// widest possible id is 2^52 - 1 — inside the exact-integer range, so no id is ever rounded.
|
|
18
|
+
export function packContactFeatureId(referenceIsA, referenceEdge, incidentEdge, secondPoint) {
|
|
19
|
+
return ((referenceIsA ? FEATURE_REFERENCE_SCALE : 0) +
|
|
20
|
+
referenceEdge * FEATURE_EDGE_SCALE +
|
|
21
|
+
incidentEdge * 2 +
|
|
22
|
+
(secondPoint ? 1 : 0));
|
|
23
|
+
}
|
|
24
|
+
const FEATURE_EDGE_SCALE = FEATURE_INDEX_LIMIT * 2;
|
|
25
|
+
const FEATURE_REFERENCE_SCALE = FEATURE_INDEX_LIMIT * FEATURE_EDGE_SCALE;
|
|
26
|
+
//# sourceMappingURL=contactFeatureId.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contactFeatureId.js","sourceRoot":"","sources":["../src/contactFeatureId.ts"],"names":[],"mappings":"AAAA,qGAAqG;AACrG,qGAAqG;AACrG,8FAA8F;AAE9F,qGAAqG;AACrG,qGAAqG;AACrG,wCAAwC;AACxC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,IAAI,EAAE,CAAC;AAE3C,oGAAoG;AACpG,kGAAkG;AAClG,WAAW;AACX,EAAE;AACF,sGAAsG;AACtG,sGAAsG;AACtG,qGAAqG;AACrG,oGAAoG;AACpG,kGAAkG;AAClG,6FAA6F;AAC7F,MAAM,UAAU,oBAAoB,CAClC,YAAqB,EACrB,aAAqB,EACrB,YAAoB,EACpB,WAAoB;IAEpB,OAAO,CACL,CAAC,YAAY,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,aAAa,GAAG,kBAAkB;QAClC,YAAY,GAAG,CAAC;QAChB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CACtB,CAAC;AACJ,CAAC;AAED,MAAM,kBAAkB,GAAG,mBAAmB,GAAG,CAAC,CAAC;AACnD,MAAM,uBAAuB,GAAG,mBAAmB,GAAG,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { CollisionContactManifold } from '@flighthq/types/contract';
|
|
2
|
+
export declare function clearCollisionContactManifold(out: CollisionContactManifold): void;
|
|
3
|
+
export declare function createCollisionContactManifold(): CollisionContactManifold;
|
|
4
|
+
//# sourceMappingURL=contactManifold.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contactManifold.d.ts","sourceRoot":"","sources":["../src/contactManifold.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAyB,MAAM,0BAA0B,CAAC;AAUhG,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,wBAAwB,GAAG,IAAI,CAMjF;AAID,wBAAgB,8BAA8B,IAAI,wBAAwB,CASzE"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// Lifecycle for the contact manifold the `collide*ContactManifold` functions write. The two contact
|
|
2
|
+
// points are allocated once, here, and reused for the manifold's whole life — a solver's per-frame
|
|
3
|
+
// narrow-phase loop over thousands of pairs allocates nothing.
|
|
4
|
+
// Clears a manifold to the non-overlapping state: `overlapping` false, normal, depth, and point
|
|
5
|
+
// count zero. The contact-point entries themselves are left untouched — `pointCount` alone bounds
|
|
6
|
+
// what is readable, so clearing does not need to walk them and a stale point can never be read
|
|
7
|
+
// through the documented contract.
|
|
8
|
+
export function clearCollisionContactManifold(out) {
|
|
9
|
+
out.overlapping = false;
|
|
10
|
+
out.normalX = 0;
|
|
11
|
+
out.normalY = 0;
|
|
12
|
+
out.depth = 0;
|
|
13
|
+
out.pointCount = 0;
|
|
14
|
+
}
|
|
15
|
+
// Allocates a fresh contact manifold in the non-overlapping state, with its fixed two-point array
|
|
16
|
+
// already populated, ready to be passed as an `out` parameter.
|
|
17
|
+
export function createCollisionContactManifold() {
|
|
18
|
+
return {
|
|
19
|
+
overlapping: false,
|
|
20
|
+
normalX: 0,
|
|
21
|
+
normalY: 0,
|
|
22
|
+
depth: 0,
|
|
23
|
+
pointCount: 0,
|
|
24
|
+
points: [createContactPoint(), createContactPoint()],
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
function createContactPoint() {
|
|
28
|
+
return { x: 0, y: 0, depth: 0, featureId: 0 };
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=contactManifold.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contactManifold.js","sourceRoot":"","sources":["../src/contactManifold.ts"],"names":[],"mappings":"AAEA,oGAAoG;AACpG,mGAAmG;AACnG,+DAA+D;AAE/D,gGAAgG;AAChG,kGAAkG;AAClG,+FAA+F;AAC/F,mCAAmC;AACnC,MAAM,UAAU,6BAA6B,CAAC,GAA6B;IACzE,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC;IACxB,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC;IAChB,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC;IAChB,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC;IACd,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC;AACrB,CAAC;AAED,kGAAkG;AAClG,+DAA+D;AAC/D,MAAM,UAAU,8BAA8B;IAC5C,OAAO;QACL,WAAW,EAAE,KAAK;QAClB,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;QACV,KAAK,EAAE,CAAC;QACR,UAAU,EAAE,CAAC;QACb,MAAM,EAAE,CAAC,kBAAkB,EAAE,EAAE,kBAAkB,EAAE,CAAC;KACrD,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB;IACzB,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;AAChD,CAAC"}
|
package/dist/contract.d.ts
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
|
+
export * from './collideContactManifold';
|
|
2
|
+
export * from './contactManifold';
|
|
3
|
+
export * from './enableCollisionGuards';
|
|
4
|
+
export * from './explainCollisionTest';
|
|
1
5
|
export * from './manifold';
|
|
2
6
|
export * from './pointContainment';
|
|
7
|
+
export * from './raycastCollisionShape';
|
|
3
8
|
export * from './segmentCollision';
|
|
4
9
|
export * from './shapeCollision';
|
|
10
|
+
export * from './shapeContact';
|
|
11
|
+
export * from './sweepCollisionShape';
|
|
5
12
|
export * from './testCollision';
|
|
6
13
|
//# sourceMappingURL=contract.d.ts.map
|
package/dist/contract.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC"}
|
package/dist/contract.js
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
|
+
export * from './collideContactManifold';
|
|
2
|
+
export * from './contactManifold';
|
|
3
|
+
export * from './enableCollisionGuards';
|
|
4
|
+
export * from './explainCollisionTest';
|
|
1
5
|
export * from './manifold';
|
|
2
6
|
export * from './pointContainment';
|
|
7
|
+
export * from './raycastCollisionShape';
|
|
3
8
|
export * from './segmentCollision';
|
|
4
9
|
export * from './shapeCollision';
|
|
10
|
+
export * from './shapeContact';
|
|
11
|
+
export * from './sweepCollisionShape';
|
|
5
12
|
export * from './testCollision';
|
|
6
13
|
//# sourceMappingURL=contract.js.map
|
package/dist/contract.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { CollisionAabb, CollisionObb } from '@flighthq/types/contract';
|
|
2
|
+
export declare function writeAabbVertices(aabb: Readonly<CollisionAabb>, out: Float64Array): void;
|
|
3
|
+
export declare function writeObbVertices(obb: Readonly<CollisionObb>, out: Float64Array): void;
|
|
4
|
+
//# sourceMappingURL=convexVertices.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convexVertices.d.ts","sourceRoot":"","sources":["../src/convexVertices.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAQ5E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE,YAAY,GAAG,IAAI,CAaxF;AAGD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,YAAY,GAAG,IAAI,CAmBrF"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
// Materializes a box collider as the flat `[x0,y0,...]` vertex list the convex cores consume, so
|
|
2
|
+
// AABB, OBB, and polygon all reduce to one representation. Package-internal: these are a detail of
|
|
3
|
+
// how the SAT and contact-clipping cores read boxes, not part of the collision API. Both writers
|
|
4
|
+
// emit their four corners in consistent winding, which the cores rely on to walk edges in order.
|
|
5
|
+
// Writes the four corners of an axis-aligned box into `out` as a flat `[x0,y0,...]` list.
|
|
6
|
+
export function writeAabbVertices(aabb, out) {
|
|
7
|
+
const minX = aabb.minX;
|
|
8
|
+
const minY = aabb.minY;
|
|
9
|
+
const maxX = aabb.maxX;
|
|
10
|
+
const maxY = aabb.maxY;
|
|
11
|
+
out[0] = minX;
|
|
12
|
+
out[1] = minY;
|
|
13
|
+
out[2] = maxX;
|
|
14
|
+
out[3] = minY;
|
|
15
|
+
out[4] = maxX;
|
|
16
|
+
out[5] = maxY;
|
|
17
|
+
out[6] = minX;
|
|
18
|
+
out[7] = maxY;
|
|
19
|
+
}
|
|
20
|
+
// Writes the four world-space corners of an oriented box into `out` as a flat `[x0,y0,...]` list.
|
|
21
|
+
export function writeObbVertices(obb, out) {
|
|
22
|
+
const cx = obb.x;
|
|
23
|
+
const cy = obb.y;
|
|
24
|
+
const halfW = obb.halfW;
|
|
25
|
+
const halfH = obb.halfH;
|
|
26
|
+
const cos = Math.cos(obb.rotation);
|
|
27
|
+
const sin = Math.sin(obb.rotation);
|
|
28
|
+
const wx = cos * halfW;
|
|
29
|
+
const wy = sin * halfW;
|
|
30
|
+
const hx = -sin * halfH;
|
|
31
|
+
const hy = cos * halfH;
|
|
32
|
+
out[0] = cx - wx - hx;
|
|
33
|
+
out[1] = cy - wy - hy;
|
|
34
|
+
out[2] = cx + wx - hx;
|
|
35
|
+
out[3] = cy + wy - hy;
|
|
36
|
+
out[4] = cx + wx + hx;
|
|
37
|
+
out[5] = cy + wy + hy;
|
|
38
|
+
out[6] = cx - wx + hx;
|
|
39
|
+
out[7] = cy - wy + hy;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=convexVertices.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convexVertices.js","sourceRoot":"","sources":["../src/convexVertices.ts"],"names":[],"mappings":"AAEA,iGAAiG;AACjG,mGAAmG;AACnG,iGAAiG;AACjG,iGAAiG;AAEjG,0FAA0F;AAC1F,MAAM,UAAU,iBAAiB,CAAC,IAA6B,EAAE,GAAiB;IAChF,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACvB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACvB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACvB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACvB,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACd,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACd,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACd,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACd,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACd,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACd,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACd,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AAChB,CAAC;AAED,kGAAkG;AAClG,MAAM,UAAU,gBAAgB,CAAC,GAA2B,EAAE,GAAiB;IAC7E,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;IACjB,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;IACjB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;IACxB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;IACxB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC;IACvB,MAAM,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC;IACvB,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC;IACxB,MAAM,EAAE,GAAG,GAAG,GAAG,KAAK,CAAC;IACvB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IACtB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IACtB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IACtB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IACtB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IACtB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IACtB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IACtB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enableCollisionGuards.d.ts","sourceRoot":"","sources":["../src/enableCollisionGuards.ts"],"names":[],"mappings":"AAOA,wBAAgB,yBAAyB,IAAI,OAAO,CAEnD;AAED,wBAAgB,sBAAsB,IAAI,IAAI,CAG7C;AAID,wBAAgB,qBAAqB,IAAI,IAAI,CAG5C"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { logOnce } from '@flighthq/log/contract';
|
|
2
|
+
import { LogLevel } from '@flighthq/types/contract';
|
|
3
|
+
import { getCollisionShapeValidationStatus } from './collisionShapeValidation';
|
|
4
|
+
import { setCollisionTestGuard } from './testCollision';
|
|
5
|
+
export function areCollisionGuardsEnabled() {
|
|
6
|
+
return collisionGuardsEnabled;
|
|
7
|
+
}
|
|
8
|
+
export function disableCollisionGuards() {
|
|
9
|
+
setCollisionTestGuard(null);
|
|
10
|
+
collisionGuardsEnabled = false;
|
|
11
|
+
}
|
|
12
|
+
// Installs opt-in diagnostics for invalid generic manifold inputs. Direct typed pair functions stay
|
|
13
|
+
// logger-free, and applications that omit this module shed both the message text and @flighthq/log.
|
|
14
|
+
export function enableCollisionGuards() {
|
|
15
|
+
setCollisionTestGuard(warnOnInvalidCollisionShapes);
|
|
16
|
+
collisionGuardsEnabled = true;
|
|
17
|
+
}
|
|
18
|
+
function warnOnInvalidCollisionShapes(a, b) {
|
|
19
|
+
const statusA = getCollisionShapeValidationStatus(a);
|
|
20
|
+
if (statusA === 'degenerate-shape' || statusA === 'non-convex-polygon') {
|
|
21
|
+
warnOnInvalidCollisionShape({ kind: a.kind, overlapping: false, shapeIndex: 0, status: statusA });
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
const statusB = getCollisionShapeValidationStatus(b);
|
|
25
|
+
if (statusB === 'degenerate-shape' || statusB === 'non-convex-polygon') {
|
|
26
|
+
warnOnInvalidCollisionShape({ kind: b.kind, overlapping: false, shapeIndex: 1, status: statusB });
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function warnOnInvalidCollisionShape(explanation) {
|
|
30
|
+
const message = explanation.status === 'non-convex-polygon'
|
|
31
|
+
? 'testCollision: a polygon is non-convex and cannot produce a supported manifold — call explainCollisionTest(a, b) and replace the reported shape with a convex polygon.'
|
|
32
|
+
: 'testCollision: a shape is degenerate and cannot produce a manifold — call explainCollisionTest(a, b) and replace the reported shape with a finite positive-area collider.';
|
|
33
|
+
logOnce(`collision:${explanation.status}:${explanation.shapeIndex}:${explanation.kind}`, LogLevel.Warn, {
|
|
34
|
+
kind: explanation.kind,
|
|
35
|
+
message,
|
|
36
|
+
shapeIndex: explanation.shapeIndex,
|
|
37
|
+
status: explanation.status,
|
|
38
|
+
}, 'collision');
|
|
39
|
+
}
|
|
40
|
+
let collisionGuardsEnabled = false;
|
|
41
|
+
//# sourceMappingURL=enableCollisionGuards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enableCollisionGuards.js","sourceRoot":"","sources":["../src/enableCollisionGuards.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,OAAO,EAAE,iCAAiC,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,UAAU,yBAAyB;IACvC,OAAO,sBAAsB,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAC5B,sBAAsB,GAAG,KAAK,CAAC;AACjC,CAAC;AAED,oGAAoG;AACpG,oGAAoG;AACpG,MAAM,UAAU,qBAAqB;IACnC,qBAAqB,CAAC,4BAA4B,CAAC,CAAC;IACpD,sBAAsB,GAAG,IAAI,CAAC;AAChC,CAAC;AAED,SAAS,4BAA4B,CAAC,CAA2B,EAAE,CAA2B;IAC5F,MAAM,OAAO,GAAG,iCAAiC,CAAC,CAAC,CAAC,CAAC;IACrD,IAAI,OAAO,KAAK,kBAAkB,IAAI,OAAO,KAAK,oBAAoB,EAAE,CAAC;QACvE,2BAA2B,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QAClG,OAAO;IACT,CAAC;IACD,MAAM,OAAO,GAAG,iCAAiC,CAAC,CAAC,CAAC,CAAC;IACrD,IAAI,OAAO,KAAK,kBAAkB,IAAI,OAAO,KAAK,oBAAoB,EAAE,CAAC;QACvE,2BAA2B,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IACpG,CAAC;AACH,CAAC;AAED,SAAS,2BAA2B,CAAC,WAA+C;IAClF,MAAM,OAAO,GACX,WAAW,CAAC,MAAM,KAAK,oBAAoB;QACzC,CAAC,CAAC,wKAAwK;QAC1K,CAAC,CAAC,2KAA2K,CAAC;IAClL,OAAO,CACL,aAAa,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,UAAU,IAAI,WAAW,CAAC,IAAI,EAAE,EAC/E,QAAQ,CAAC,IAAI,EACb;QACE,IAAI,EAAE,WAAW,CAAC,IAAI;QACtB,OAAO;QACP,UAAU,EAAE,WAAW,CAAC,UAAU;QAClC,MAAM,EAAE,WAAW,CAAC,MAAM;KAC3B,EACD,WAAW,CACZ,CAAC;AACJ,CAAC;AAED,IAAI,sBAAsB,GAAG,KAAK,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"explainCollisionTest.d.ts","sourceRoot":"","sources":["../src/explainCollisionTest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAQzF,wBAAgB,oBAAoB,CAClC,CAAC,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC3B,CAAC,EAAE,QAAQ,CAAC,cAAc,CAAC,GAC1B,wBAAwB,CAY1B"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { getCollisionShapeValidationStatus } from './collisionShapeValidation';
|
|
2
|
+
import { testCollision } from './testCollision';
|
|
3
|
+
// Pure diagnostic twin of testCollision. It classifies invalid and unsupported inputs before
|
|
4
|
+
// running the ordinary dispatcher, so callers can distinguish its silent false sentinel from a
|
|
5
|
+
// legitimate separated pair without retaining state or enabling guards.
|
|
6
|
+
export function explainCollisionTest(a, b) {
|
|
7
|
+
const statusA = getCollisionShapeValidationStatus(a);
|
|
8
|
+
if (statusA !== null)
|
|
9
|
+
return { kind: a.kind, overlapping: false, shapeIndex: 0, status: statusA };
|
|
10
|
+
const statusB = getCollisionShapeValidationStatus(b);
|
|
11
|
+
if (statusB !== null)
|
|
12
|
+
return { kind: b.kind, overlapping: false, shapeIndex: 1, status: statusB };
|
|
13
|
+
const overlapping = testCollision(a, b, { depth: 0, normalX: 0, normalY: 0, overlapping: false });
|
|
14
|
+
return {
|
|
15
|
+
kind: null,
|
|
16
|
+
overlapping,
|
|
17
|
+
shapeIndex: null,
|
|
18
|
+
status: overlapping ? 'overlapping' : 'separated',
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=explainCollisionTest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"explainCollisionTest.js","sourceRoot":"","sources":["../src/explainCollisionTest.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iCAAiC,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,6FAA6F;AAC7F,+FAA+F;AAC/F,wEAAwE;AACxE,MAAM,UAAU,oBAAoB,CAClC,CAA2B,EAC3B,CAA2B;IAE3B,MAAM,OAAO,GAAG,iCAAiC,CAAC,CAAC,CAAC,CAAC;IACrD,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAClG,MAAM,OAAO,GAAG,iCAAiC,CAAC,CAAC,CAAC,CAAC;IACrD,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAClG,MAAM,WAAW,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;IAClG,OAAO;QACL,IAAI,EAAE,IAAI;QACV,WAAW;QACX,UAAU,EAAE,IAAI;QAChB,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW;KAClD,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { clearCollisionManifold, createCollisionManifold, getCollisionShapeContainsPoint, testAabbAabbCollision, testAabbObbCollision, testAabbPolygonCollision, testCircleAabbCollision, testCircleCircleCollision, testCircleObbCollision, testCirclePolygonCollision, testCollision, testObbObbCollision, testObbPolygonCollision, testPolygonPolygonCollision, testSegmentAabbCollision, testSegmentCircleCollision, testSegmentObbCollision, testSegmentPolygonCollision, testSegmentSegmentCollision, } from './contract';
|
|
1
|
+
export { clearCollisionContactManifold, clearCollisionManifold, collideAabbAabbContactManifold, collideAabbObbContactManifold, collideAabbPolygonContactManifold, collideCircleAabbContactManifold, collideCircleCircleContactManifold, collideCircleObbContactManifold, collideCirclePolygonContactManifold, collideContactManifold, collideObbObbContactManifold, collideObbPolygonContactManifold, collidePolygonPolygonContactManifold, createCollisionContactManifold, createCollisionManifold, areCollisionGuardsEnabled, disableCollisionGuards, enableCollisionGuards, explainCollisionTest, getCollisionShapeContainsPoint, createCollisionRaycastHit, createCollisionTimeOfImpact, raycastCollisionShape, sweepCollisionShape, testAabbAabbCollision, testAabbObbCollision, testAabbPolygonCollision, testCircleAabbCollision, testCircleCircleCollision, testCircleObbCollision, testCirclePolygonCollision, testCollision, testObbObbCollision, testObbPolygonCollision, testPolygonPolygonCollision, testSegmentAabbCollision, testSegmentCircleCollision, testSegmentObbCollision, testSegmentPolygonCollision, testSegmentSegmentCollision, } from './contract';
|
|
2
2
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,8BAA8B,EAC9B,qBAAqB,EACrB,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,EACvB,yBAAyB,EACzB,sBAAsB,EACtB,0BAA0B,EAC1B,aAAa,EACb,mBAAmB,EACnB,uBAAuB,EACvB,2BAA2B,EAC3B,wBAAwB,EACxB,0BAA0B,EAC1B,uBAAuB,EACvB,2BAA2B,EAC3B,2BAA2B,GAC5B,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,6BAA6B,EAC7B,sBAAsB,EACtB,8BAA8B,EAC9B,6BAA6B,EAC7B,iCAAiC,EACjC,gCAAgC,EAChC,kCAAkC,EAClC,+BAA+B,EAC/B,mCAAmC,EACnC,sBAAsB,EACtB,4BAA4B,EAC5B,gCAAgC,EAChC,oCAAoC,EACpC,8BAA8B,EAC9B,uBAAuB,EACvB,yBAAyB,EACzB,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,8BAA8B,EAC9B,yBAAyB,EACzB,2BAA2B,EAC3B,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,EACvB,yBAAyB,EACzB,sBAAsB,EACtB,0BAA0B,EAC1B,aAAa,EACb,mBAAmB,EACnB,uBAAuB,EACvB,2BAA2B,EAC3B,wBAAwB,EACxB,0BAA0B,EAC1B,uBAAuB,EACvB,2BAA2B,EAC3B,2BAA2B,GAC5B,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { clearCollisionManifold, createCollisionManifold, getCollisionShapeContainsPoint, testAabbAabbCollision, testAabbObbCollision, testAabbPolygonCollision, testCircleAabbCollision, testCircleCircleCollision, testCircleObbCollision, testCirclePolygonCollision, testCollision, testObbObbCollision, testObbPolygonCollision, testPolygonPolygonCollision, testSegmentAabbCollision, testSegmentCircleCollision, testSegmentObbCollision, testSegmentPolygonCollision, testSegmentSegmentCollision, } from './contract';
|
|
1
|
+
export { clearCollisionContactManifold, clearCollisionManifold, collideAabbAabbContactManifold, collideAabbObbContactManifold, collideAabbPolygonContactManifold, collideCircleAabbContactManifold, collideCircleCircleContactManifold, collideCircleObbContactManifold, collideCirclePolygonContactManifold, collideContactManifold, collideObbObbContactManifold, collideObbPolygonContactManifold, collidePolygonPolygonContactManifold, createCollisionContactManifold, createCollisionManifold, areCollisionGuardsEnabled, disableCollisionGuards, enableCollisionGuards, explainCollisionTest, getCollisionShapeContainsPoint, createCollisionRaycastHit, createCollisionTimeOfImpact, raycastCollisionShape, sweepCollisionShape, testAabbAabbCollision, testAabbObbCollision, testAabbPolygonCollision, testCircleAabbCollision, testCircleCircleCollision, testCircleObbCollision, testCirclePolygonCollision, testCollision, testObbObbCollision, testObbPolygonCollision, testPolygonPolygonCollision, testSegmentAabbCollision, testSegmentCircleCollision, testSegmentObbCollision, testSegmentPolygonCollision, testSegmentSegmentCollision, } from './contract';
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,8BAA8B,EAC9B,qBAAqB,EACrB,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,EACvB,yBAAyB,EACzB,sBAAsB,EACtB,0BAA0B,EAC1B,aAAa,EACb,mBAAmB,EACnB,uBAAuB,EACvB,2BAA2B,EAC3B,wBAAwB,EACxB,0BAA0B,EAC1B,uBAAuB,EACvB,2BAA2B,EAC3B,2BAA2B,GAC5B,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,6BAA6B,EAC7B,sBAAsB,EACtB,8BAA8B,EAC9B,6BAA6B,EAC7B,iCAAiC,EACjC,gCAAgC,EAChC,kCAAkC,EAClC,+BAA+B,EAC/B,mCAAmC,EACnC,sBAAsB,EACtB,4BAA4B,EAC5B,gCAAgC,EAChC,oCAAoC,EACpC,8BAA8B,EAC9B,uBAAuB,EACvB,yBAAyB,EACzB,sBAAsB,EACtB,qBAAqB,EACrB,oBAAoB,EACpB,8BAA8B,EAC9B,yBAAyB,EACzB,2BAA2B,EAC3B,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,EACvB,yBAAyB,EACzB,sBAAsB,EACtB,0BAA0B,EAC1B,aAAa,EACb,mBAAmB,EACnB,uBAAuB,EACvB,2BAA2B,EAC3B,wBAAwB,EACxB,0BAA0B,EAC1B,uBAAuB,EACvB,2BAA2B,EAC3B,2BAA2B,GAC5B,MAAM,YAAY,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pointContainment.d.ts","sourceRoot":"","sources":["../src/pointContainment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"pointContainment.d.ts","sourceRoot":"","sources":["../src/pointContainment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAU/D,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CA8C7G"}
|