@flighthq/collision 0.4.0-next.1663.d9c5746 → 0.4.0-next.1695.181dea5
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/collideContactManifold2D.d.ts +3 -0
- package/dist/collideContactManifold2D.d.ts.map +1 -0
- package/dist/{collideContactManifold.js → collideContactManifold2D.js} +6 -6
- package/dist/collideContactManifold2D.js.map +1 -0
- package/dist/collisionShapeValidation.d.ts +3 -3
- package/dist/collisionShapeValidation.d.ts.map +1 -1
- package/dist/collisionShapeValidation.js +6 -3
- package/dist/collisionShapeValidation.js.map +1 -1
- package/dist/collisionSupport2D.d.ts +12 -0
- package/dist/collisionSupport2D.d.ts.map +1 -0
- package/dist/collisionSupport2D.js +111 -0
- package/dist/collisionSupport2D.js.map +1 -0
- package/dist/contactFeatureId.js +1 -1
- package/dist/contactFeatureId.js.map +1 -1
- package/dist/contactManifold.d.ts +3 -3
- package/dist/contactManifold.d.ts.map +1 -1
- package/dist/contactManifold.js +2 -2
- package/dist/contactManifold.js.map +1 -1
- package/dist/contract.d.ts +8 -5
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js +8 -5
- package/dist/contract.js.map +1 -1
- package/dist/convexVertices.d.ts +3 -3
- package/dist/convexVertices.d.ts.map +1 -1
- package/dist/convexVertices.js.map +1 -1
- package/dist/enableCollisionGuards.js +30 -11
- package/dist/enableCollisionGuards.js.map +1 -1
- package/dist/explainCollisionTest2D.d.ts +3 -0
- package/dist/explainCollisionTest2D.d.ts.map +1 -0
- package/dist/explainCollisionTest2D.js +38 -0
- package/dist/explainCollisionTest2D.js.map +1 -0
- package/dist/gjk2D.d.ts +4 -0
- package/dist/gjk2D.d.ts.map +1 -0
- package/dist/gjk2D.js +340 -0
- package/dist/gjk2D.js.map +1 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/manifold.d.ts +3 -3
- package/dist/manifold.d.ts.map +1 -1
- package/dist/manifold.js +2 -2
- package/dist/manifold.js.map +1 -1
- package/dist/pointContainment.d.ts +2 -2
- package/dist/pointContainment.d.ts.map +1 -1
- package/dist/pointContainment.js +3 -3
- package/dist/pointContainment.js.map +1 -1
- package/dist/raycastCollisionShape2D.d.ts +4 -0
- package/dist/raycastCollisionShape2D.d.ts.map +1 -0
- package/dist/{raycastCollisionShape.js → raycastCollisionShape2D.js} +7 -7
- package/dist/raycastCollisionShape2D.js.map +1 -0
- package/dist/registerBuiltInCollisionPairTests2D.d.ts +2 -0
- package/dist/registerBuiltInCollisionPairTests2D.d.ts.map +1 -0
- package/dist/registerBuiltInCollisionPairTests2D.js +32 -0
- package/dist/registerBuiltInCollisionPairTests2D.js.map +1 -0
- package/dist/segmentCollision.d.ts +6 -6
- package/dist/segmentCollision.d.ts.map +1 -1
- package/dist/segmentCollision.js +2 -2
- package/dist/segmentCollision.js.map +1 -1
- package/dist/shapeCollision.d.ts +11 -11
- package/dist/shapeCollision.d.ts.map +1 -1
- package/dist/shapeCollision.js +62 -65
- package/dist/shapeCollision.js.map +1 -1
- package/dist/shapeContact.d.ts +11 -11
- package/dist/shapeContact.d.ts.map +1 -1
- package/dist/shapeContact.js +12 -12
- package/dist/shapeContact.js.map +1 -1
- package/dist/sweepCollisionShape2D.d.ts +4 -0
- package/dist/sweepCollisionShape2D.d.ts.map +1 -0
- package/dist/{sweepCollisionShape.js → sweepCollisionShape2D.js} +10 -10
- package/dist/sweepCollisionShape2D.js.map +1 -0
- package/dist/testCollision2D.d.ts +4 -0
- package/dist/testCollision2D.d.ts.map +1 -0
- package/dist/testCollision2D.js +43 -0
- package/dist/testCollision2D.js.map +1 -0
- package/package.json +4 -4
- package/src/{collideContactManifold.test.ts → collideContactManifold2D.test.ts} +54 -54
- package/src/collisionShapeValidation.test.ts +13 -13
- package/src/collisionSupport2D.test.ts +166 -0
- package/src/contactManifold.test.ts +11 -11
- package/src/convexVertices.test.ts +4 -4
- package/src/enableCollisionGuards.test.ts +50 -15
- package/src/explainCollisionTest2D.test.ts +75 -0
- package/src/gjk2D.test.ts +219 -0
- package/src/manifold.test.ts +7 -7
- package/src/pointContainment.test.ts +45 -41
- package/src/{raycastCollisionShape.test.ts → raycastCollisionShape2D.test.ts} +26 -19
- package/src/registerBuiltInCollisionPairTests2D.test.ts +62 -0
- package/src/segmentCollision.test.ts +10 -10
- package/src/shapeCollision.test.ts +103 -103
- package/src/shapeContact.test.ts +76 -76
- package/src/{sweepCollisionShape.test.ts → sweepCollisionShape2D.test.ts} +26 -26
- package/src/testCollision2D.test.ts +175 -0
- package/dist/collideContactManifold.d.ts +0 -3
- package/dist/collideContactManifold.d.ts.map +0 -1
- package/dist/collideContactManifold.js.map +0 -1
- package/dist/explainCollisionTest.d.ts +0 -3
- package/dist/explainCollisionTest.d.ts.map +0 -1
- package/dist/explainCollisionTest.js +0 -21
- package/dist/explainCollisionTest.js.map +0 -1
- package/dist/raycastCollisionShape.d.ts +0 -4
- package/dist/raycastCollisionShape.d.ts.map +0 -1
- package/dist/raycastCollisionShape.js.map +0 -1
- package/dist/sweepCollisionShape.d.ts +0 -4
- package/dist/sweepCollisionShape.d.ts.map +0 -1
- package/dist/sweepCollisionShape.js.map +0 -1
- package/dist/testCollision.d.ts +0 -4
- package/dist/testCollision.d.ts.map +0 -1
- package/dist/testCollision.js +0 -97
- package/dist/testCollision.js.map +0 -1
- package/src/explainCollisionTest.test.ts +0 -52
- package/src/testCollision.test.ts +0 -97
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import type { CollisionShape2D } from '@flighthq/types/contract';
|
|
2
|
+
import { describe, expect, it } from 'vitest';
|
|
3
|
+
|
|
4
|
+
import {
|
|
5
|
+
getCollisionPairTest2D,
|
|
6
|
+
registerBuiltInCollisionSupports2D,
|
|
7
|
+
registerCollisionPairTest2D,
|
|
8
|
+
registerCollisionSupport2D,
|
|
9
|
+
supportCollisionCircle2D,
|
|
10
|
+
} from './collisionSupport2D';
|
|
11
|
+
import { clearCollisionManifold2D, createCollisionManifold2D } from './manifold';
|
|
12
|
+
import { registerBuiltInCollisionPairTests2D } from './registerBuiltInCollisionPairTests2D';
|
|
13
|
+
import { setCollisionTestGuard2D, testCollision2D } from './testCollision2D';
|
|
14
|
+
|
|
15
|
+
// Both doors, because this dispatcher is the one place their precedence is observable. Nothing is
|
|
16
|
+
// registered at module load, so a caller that opens neither gets `false` from every pair — which is what
|
|
17
|
+
// `answers nothing at all until a door is opened` below pins down.
|
|
18
|
+
registerBuiltInCollisionPairTests2D();
|
|
19
|
+
registerBuiltInCollisionSupports2D();
|
|
20
|
+
|
|
21
|
+
afterEach(() => {
|
|
22
|
+
setCollisionTestGuard2D(null);
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
describe('setCollisionTestGuard2D', () => {
|
|
26
|
+
it('installs and removes the invalid-input diagnostics seam', () => {
|
|
27
|
+
const seenKinds: string[] = [];
|
|
28
|
+
const out = createCollisionManifold2D();
|
|
29
|
+
const valid: CollisionShape2D = { kind: 'circle', radius: 1, x: 0, y: 0 };
|
|
30
|
+
const degenerate: CollisionShape2D = { kind: 'circle', radius: 0, x: 0, y: 0 };
|
|
31
|
+
setCollisionTestGuard2D((a, b) => seenKinds.push(a.kind, b.kind));
|
|
32
|
+
testCollision2D(degenerate, valid, out);
|
|
33
|
+
expect(seenKinds).toEqual(['circle', 'circle']);
|
|
34
|
+
|
|
35
|
+
setCollisionTestGuard2D(null);
|
|
36
|
+
testCollision2D(degenerate, valid, out);
|
|
37
|
+
expect(seenKinds).toHaveLength(2);
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
describe('testCollision2D', () => {
|
|
42
|
+
it('dispatches a circle-circle pair to the same result as the direct test', () => {
|
|
43
|
+
const out = createCollisionManifold2D();
|
|
44
|
+
const a: CollisionShape2D = { kind: 'circle', x: 0, y: 0, radius: 1 };
|
|
45
|
+
const b: CollisionShape2D = { kind: 'circle', x: 1, y: 0, radius: 1 };
|
|
46
|
+
expect(testCollision2D(a, b, out)).toBe(true);
|
|
47
|
+
expect(out.normalX).toBeCloseTo(-1);
|
|
48
|
+
expect(out.depth).toBeCloseTo(1);
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it('dispatches an aabb-circle pair in either argument order with a sign-consistent normal', () => {
|
|
52
|
+
const forward = createCollisionManifold2D();
|
|
53
|
+
const reversed = createCollisionManifold2D();
|
|
54
|
+
const circle: CollisionShape2D = { kind: 'circle', x: 15, y: 5, radius: 7 };
|
|
55
|
+
const box: CollisionShape2D = { kind: 'aabb', minX: 0, minY: 0, maxX: 10, maxY: 10 };
|
|
56
|
+
|
|
57
|
+
// circle vs box: pushes the circle (A) off the box -> +X.
|
|
58
|
+
expect(testCollision2D(circle, box, forward)).toBe(true);
|
|
59
|
+
expect(forward.normalX).toBeCloseTo(1);
|
|
60
|
+
expect(forward.depth).toBeCloseTo(2);
|
|
61
|
+
|
|
62
|
+
// box vs circle: pushes the box (A) off the circle -> the opposite direction, -X.
|
|
63
|
+
expect(testCollision2D(box, circle, reversed)).toBe(true);
|
|
64
|
+
expect(reversed.normalX).toBeCloseTo(-1);
|
|
65
|
+
expect(reversed.depth).toBeCloseTo(2);
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
it('dispatches an obb-polygon pair', () => {
|
|
69
|
+
const out = createCollisionManifold2D();
|
|
70
|
+
const obb: CollisionShape2D = { kind: 'obb', x: 0, y: 0, halfW: 3, halfH: 3, rotation: 0 };
|
|
71
|
+
const polygon: CollisionShape2D = { kind: 'polygon', points: [2, -1, 6, -1, 6, 3, 2, 3] };
|
|
72
|
+
expect(testCollision2D(obb, polygon, out)).toBe(true);
|
|
73
|
+
expect(out.normalX).toBeCloseTo(-1);
|
|
74
|
+
expect(out.depth).toBeCloseTo(1);
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
it('reports no overlap for disjoint shapes', () => {
|
|
78
|
+
const out = createCollisionManifold2D();
|
|
79
|
+
const a: CollisionShape2D = { kind: 'circle', x: 0, y: 0, radius: 1 };
|
|
80
|
+
const b: CollisionShape2D = { kind: 'aabb', minX: 10, minY: 10, maxX: 12, maxY: 12 };
|
|
81
|
+
expect(testCollision2D(a, b, out)).toBe(false);
|
|
82
|
+
expect(out.overlapping).toBe(false);
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
it('reports no manifold for the area-less segment and point kinds', () => {
|
|
86
|
+
const out = createCollisionManifold2D();
|
|
87
|
+
const segment: CollisionShape2D = { kind: 'segment', x0: 0, y0: 0, x1: 1, y1: 1 };
|
|
88
|
+
const point: CollisionShape2D = { kind: 'point', x: 0, y: 0 };
|
|
89
|
+
const circle: CollisionShape2D = { kind: 'circle', x: 0, y: 0, radius: 1 };
|
|
90
|
+
expect(testCollision2D(segment, circle, out)).toBe(false);
|
|
91
|
+
expect(testCollision2D(circle, point, out)).toBe(false);
|
|
92
|
+
expect(out.overlapping).toBe(false);
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
it('answers nothing at all until a door is opened', () => {
|
|
96
|
+
const out = createCollisionManifold2D();
|
|
97
|
+
// A vendor kind with neither a support function nor a pair specialization. This is also the state
|
|
98
|
+
// EVERY pair is in before the registrars run, which is the behavioural cost of making the ten SAT
|
|
99
|
+
// pairs tree-shakable: registration is the whole of the dispatcher's knowledge.
|
|
100
|
+
const capsule: CollisionShape2D = { kind: 'acme.capsule' };
|
|
101
|
+
const circle: CollisionShape2D = { kind: 'circle', x: 0, y: 0, radius: 1 };
|
|
102
|
+
expect(testCollision2D(capsule, circle, out)).toBe(false);
|
|
103
|
+
expect(out).toEqual({ depth: 0, normalX: 0, normalY: 0, overlapping: false });
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
it('prefers a registered specialization over the generic support floor, in both orders', () => {
|
|
107
|
+
const out = createCollisionManifold2D();
|
|
108
|
+
const calls: string[] = [];
|
|
109
|
+
// Registered for ONE order only. The reverse call must reach the same specialization with its
|
|
110
|
+
// arguments swapped and the normal negated, which is what keeps the registry at ten entries.
|
|
111
|
+
registerCollisionPairTest2D('circle', 'acme.wall', (_a, _b, manifold) => {
|
|
112
|
+
calls.push('specialized');
|
|
113
|
+
manifold.overlapping = true;
|
|
114
|
+
manifold.normalX = 1;
|
|
115
|
+
manifold.normalY = 0;
|
|
116
|
+
manifold.depth = 4;
|
|
117
|
+
return true;
|
|
118
|
+
});
|
|
119
|
+
const circle: CollisionShape2D = { kind: 'circle', x: 0, y: 0, radius: 1 };
|
|
120
|
+
const wall: CollisionShape2D = { kind: 'acme.wall' };
|
|
121
|
+
|
|
122
|
+
expect(testCollision2D(circle, wall, out)).toBe(true);
|
|
123
|
+
expect(out.normalX).toBe(1);
|
|
124
|
+
|
|
125
|
+
expect(testCollision2D(wall, circle, out)).toBe(true);
|
|
126
|
+
expect(out.normalX).toBe(-1);
|
|
127
|
+
expect(out.depth).toBe(4);
|
|
128
|
+
expect(calls).toEqual(['specialized', 'specialized']);
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
it('does not negate a zero normal when the reverse specialization reports no overlap', () => {
|
|
132
|
+
const out = createCollisionManifold2D();
|
|
133
|
+
registerCollisionPairTest2D('circle', 'acme.void', (_a, _b, manifold) => {
|
|
134
|
+
clearCollisionManifold2D(manifold);
|
|
135
|
+
return false;
|
|
136
|
+
});
|
|
137
|
+
const circle: CollisionShape2D = { kind: 'circle', x: 0, y: 0, radius: 1 };
|
|
138
|
+
|
|
139
|
+
expect(testCollision2D({ kind: 'acme.void' }, circle, out)).toBe(false);
|
|
140
|
+
// Negating unconditionally would leave `-0` here, which is not `0` under Object.is and would reach
|
|
141
|
+
// any caller comparing the field against a literal zero.
|
|
142
|
+
expect(Object.is(out.normalX, 0)).toBe(true);
|
|
143
|
+
expect(Object.is(out.normalY, 0)).toBe(true);
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
it('falls through to GJK for a pair with supports but no specialization', () => {
|
|
147
|
+
const out = createCollisionManifold2D();
|
|
148
|
+
// A vendor kind whose support function is a circle's: registering ONE function makes it work against
|
|
149
|
+
// every other registered kind immediately, which is the whole claim of the support floor.
|
|
150
|
+
registerCollisionSupport2D('acme.blob', supportCollisionCircle2D);
|
|
151
|
+
const blob = { kind: 'acme.blob', x: 1, y: 0, radius: 1 } as CollisionShape2D;
|
|
152
|
+
const box: CollisionShape2D = { kind: 'aabb', minX: -1, minY: -1, maxX: 0.5, maxY: 1 };
|
|
153
|
+
|
|
154
|
+
expect(getCollisionPairTest2D('acme.blob', 'aabb')).toBeNull();
|
|
155
|
+
expect(testCollision2D(blob, box, out)).toBe(true);
|
|
156
|
+
expect(out.depth).toBeGreaterThan(0);
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
it('fully clears one reused manifold across hit, miss, unsupported, and hit calls', () => {
|
|
160
|
+
const out = createCollisionManifold2D();
|
|
161
|
+
const circle: CollisionShape2D = { kind: 'circle', radius: 2, x: 0, y: 0 };
|
|
162
|
+
expect(testCollision2D(circle, { kind: 'circle', radius: 2, x: 1, y: 0 }, out)).toBe(true);
|
|
163
|
+
expect(out).toMatchObject({ depth: 3, normalX: -1, normalY: 0, overlapping: true });
|
|
164
|
+
|
|
165
|
+
expect(testCollision2D(circle, { kind: 'circle', radius: 2, x: 10, y: 0 }, out)).toBe(false);
|
|
166
|
+
expect(out).toEqual({ depth: 0, normalX: 0, normalY: 0, overlapping: false });
|
|
167
|
+
|
|
168
|
+
expect(testCollision2D({ kind: 'point', x: 0, y: 0 }, circle, out)).toBe(false);
|
|
169
|
+
expect(out).toEqual({ depth: 0, normalX: 0, normalY: 0, overlapping: false });
|
|
170
|
+
|
|
171
|
+
expect(testCollision2D(circle, { kind: 'aabb', maxX: 1, maxY: 1, minX: -1, minY: -1 }, out)).toBe(true);
|
|
172
|
+
expect(out.overlapping).toBe(true);
|
|
173
|
+
expect(out.depth).toBeGreaterThan(0);
|
|
174
|
+
});
|
|
175
|
+
});
|
|
@@ -1,3 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"collideContactManifold.js","sourceRoot":"","sources":["../src/collideContactManifold.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,21 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import type { CollisionRaycastHit, CollisionShape } from '@flighthq/types/contract';
|
|
2
|
-
export declare function createCollisionRaycastHit(): CollisionRaycastHit;
|
|
3
|
-
export declare function raycastCollisionShape(shape: Readonly<CollisionShape>, originX: number, originY: number, directionX: number, directionY: number, out: CollisionRaycastHit, maxFraction?: number): boolean;
|
|
4
|
-
//# sourceMappingURL=raycastCollisionShape.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"raycastCollisionShape.d.ts","sourceRoot":"","sources":["../src/raycastCollisionShape.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAOpF,wBAAgB,yBAAyB,IAAI,mBAAmB,CAE/D;AAKD,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC/B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,mBAAmB,EACxB,WAAW,SAA2B,GACrC,OAAO,CAqFT"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"raycastCollisionShape.js","sourceRoot":"","sources":["../src/raycastCollisionShape.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import type { CollisionShape, CollisionTimeOfImpact } from '@flighthq/types/contract';
|
|
2
|
-
export declare function createCollisionTimeOfImpact(): CollisionTimeOfImpact;
|
|
3
|
-
export declare function sweepCollisionShape(shapeA: Readonly<CollisionShape>, translationAX: number, translationAY: number, shapeB: Readonly<CollisionShape>, translationBX: number, translationBY: number, out: CollisionTimeOfImpact, maxFraction?: number): boolean;
|
|
4
|
-
//# sourceMappingURL=sweepCollisionShape.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sweepCollisionShape.d.ts","sourceRoot":"","sources":["../src/sweepCollisionShape.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAOtF,wBAAgB,2BAA2B,IAAI,qBAAqB,CAEnE;AAMD,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,qBAAqB,EAC1B,WAAW,SAAI,GACd,OAAO,CA+BT"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sweepCollisionShape.js","sourceRoot":"","sources":["../src/sweepCollisionShape.ts"],"names":[],"mappings":"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"}
|
package/dist/testCollision.d.ts
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import type { CollisionManifold, CollisionShape, CollisionTestGuard } from '@flighthq/types/contract';
|
|
2
|
-
export declare function setCollisionTestGuard(guard: CollisionTestGuard | null): void;
|
|
3
|
-
export declare function testCollision(a: Readonly<CollisionShape>, b: Readonly<CollisionShape>, out: CollisionManifold): boolean;
|
|
4
|
-
//# sourceMappingURL=testCollision.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"testCollision.d.ts","sourceRoot":"","sources":["../src/testCollision.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,cAAc,EAEd,kBAAkB,EACnB,MAAM,0BAA0B,CAAC;AAiBlC,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI,GAAG,IAAI,CAE5E;AASD,wBAAgB,aAAa,CAC3B,CAAC,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC3B,CAAC,EAAE,QAAQ,CAAC,cAAc,CAAC,EAC3B,GAAG,EAAE,iBAAiB,GACrB,OAAO,CAmET"}
|
package/dist/testCollision.js
DELETED
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
import { clearCollisionManifold } from './manifold';
|
|
2
|
-
import { testAabbAabbCollision, testAabbObbCollision, testAabbPolygonCollision, testCircleAabbCollision, testCircleCircleCollision, testCircleObbCollision, testCirclePolygonCollision, testObbObbCollision, testObbPolygonCollision, testPolygonPolygonCollision, } from './shapeCollision';
|
|
3
|
-
// Installs the optional diagnostics seam consulted before testCollision dispatches its shape pair.
|
|
4
|
-
export function setCollisionTestGuard(guard) {
|
|
5
|
-
collisionTestGuard = guard;
|
|
6
|
-
}
|
|
7
|
-
// Generic narrow-phase test: dispatches on the two shapes' `kind`s to the matching per-pair test and
|
|
8
|
-
// writes the manifold pushing **A out of B**. Shapes are canonically ordered by kind rank before
|
|
9
|
-
// dispatch so only the ten manifold-bearing pairs (circle/aabb/obb/polygon) need explicit branches;
|
|
10
|
-
// when the arguments arrive in the reversed order the shared normal is negated to preserve the
|
|
11
|
-
// A-out-of-B orientation. Area-less kinds (`segment`, `point`) and unknown kinds carry no manifold —
|
|
12
|
-
// the pair is reported as non-overlapping; use `getCollisionShapeContainsPoint` or the
|
|
13
|
-
// `testSegment*Collision` queries for those. The direct per-pair functions remain the hot path.
|
|
14
|
-
export function testCollision(a, b, out) {
|
|
15
|
-
if (collisionTestGuard !== null)
|
|
16
|
-
collisionTestGuard(a, b);
|
|
17
|
-
const rankA = shapeKindRank(a.kind);
|
|
18
|
-
const rankB = shapeKindRank(b.kind);
|
|
19
|
-
if (rankA < 0 || rankB < 0) {
|
|
20
|
-
clearCollisionManifold(out);
|
|
21
|
-
return false;
|
|
22
|
-
}
|
|
23
|
-
const swapped = rankA > rankB;
|
|
24
|
-
const lo = swapped ? b : a;
|
|
25
|
-
const hi = swapped ? a : b;
|
|
26
|
-
let overlapping = false;
|
|
27
|
-
switch (lo.kind) {
|
|
28
|
-
case 'circle':
|
|
29
|
-
switch (hi.kind) {
|
|
30
|
-
case 'circle':
|
|
31
|
-
overlapping = testCircleCircleCollision(lo, hi, out);
|
|
32
|
-
break;
|
|
33
|
-
case 'aabb':
|
|
34
|
-
overlapping = testCircleAabbCollision(lo, hi, out);
|
|
35
|
-
break;
|
|
36
|
-
case 'obb':
|
|
37
|
-
overlapping = testCircleObbCollision(lo, hi, out);
|
|
38
|
-
break;
|
|
39
|
-
case 'polygon':
|
|
40
|
-
overlapping = testCirclePolygonCollision(lo, hi, out);
|
|
41
|
-
break;
|
|
42
|
-
}
|
|
43
|
-
break;
|
|
44
|
-
case 'aabb':
|
|
45
|
-
switch (hi.kind) {
|
|
46
|
-
case 'aabb':
|
|
47
|
-
overlapping = testAabbAabbCollision(lo, hi, out);
|
|
48
|
-
break;
|
|
49
|
-
case 'obb':
|
|
50
|
-
overlapping = testAabbObbCollision(lo, hi, out);
|
|
51
|
-
break;
|
|
52
|
-
case 'polygon':
|
|
53
|
-
overlapping = testAabbPolygonCollision(lo, hi, out);
|
|
54
|
-
break;
|
|
55
|
-
}
|
|
56
|
-
break;
|
|
57
|
-
case 'obb':
|
|
58
|
-
switch (hi.kind) {
|
|
59
|
-
case 'obb':
|
|
60
|
-
overlapping = testObbObbCollision(lo, hi, out);
|
|
61
|
-
break;
|
|
62
|
-
case 'polygon':
|
|
63
|
-
overlapping = testObbPolygonCollision(lo, hi, out);
|
|
64
|
-
break;
|
|
65
|
-
}
|
|
66
|
-
break;
|
|
67
|
-
case 'polygon':
|
|
68
|
-
if (hi.kind === 'polygon') {
|
|
69
|
-
overlapping = testPolygonPolygonCollision(lo, hi, out);
|
|
70
|
-
}
|
|
71
|
-
break;
|
|
72
|
-
}
|
|
73
|
-
if (overlapping && swapped) {
|
|
74
|
-
out.normalX = -out.normalX;
|
|
75
|
-
out.normalY = -out.normalY;
|
|
76
|
-
}
|
|
77
|
-
return overlapping;
|
|
78
|
-
}
|
|
79
|
-
// Canonical dispatch rank of a shape kind, or -1 for kinds that carry no manifold (segment, point,
|
|
80
|
-
// and any custom kind). Ordering the pair by rank collapses the 4x4 kind matrix to its ten lower-
|
|
81
|
-
// triangular manifold pairs.
|
|
82
|
-
function shapeKindRank(kind) {
|
|
83
|
-
switch (kind) {
|
|
84
|
-
case 'circle':
|
|
85
|
-
return 0;
|
|
86
|
-
case 'aabb':
|
|
87
|
-
return 1;
|
|
88
|
-
case 'obb':
|
|
89
|
-
return 2;
|
|
90
|
-
case 'polygon':
|
|
91
|
-
return 3;
|
|
92
|
-
default:
|
|
93
|
-
return -1;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
let collisionTestGuard = null;
|
|
97
|
-
//# sourceMappingURL=testCollision.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"testCollision.js","sourceRoot":"","sources":["../src/testCollision.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import type { CollisionShape } from '@flighthq/types/contract';
|
|
2
|
-
|
|
3
|
-
import { explainCollisionTest } from './explainCollisionTest';
|
|
4
|
-
|
|
5
|
-
describe('explainCollisionTest', () => {
|
|
6
|
-
it('distinguishes overlap from ordinary separation', () => {
|
|
7
|
-
const circle: CollisionShape = { kind: 'circle', radius: 2, x: 0, y: 0 };
|
|
8
|
-
expect(explainCollisionTest(circle, { kind: 'circle', radius: 2, x: 1, y: 0 })).toEqual({
|
|
9
|
-
kind: null,
|
|
10
|
-
overlapping: true,
|
|
11
|
-
shapeIndex: null,
|
|
12
|
-
status: 'overlapping',
|
|
13
|
-
});
|
|
14
|
-
expect(explainCollisionTest(circle, { kind: 'circle', radius: 2, x: 10, y: 0 })).toEqual({
|
|
15
|
-
kind: null,
|
|
16
|
-
overlapping: false,
|
|
17
|
-
shapeIndex: null,
|
|
18
|
-
status: 'separated',
|
|
19
|
-
});
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
it('identifies which input is degenerate or non-convex', () => {
|
|
23
|
-
const circle: CollisionShape = { kind: 'circle', radius: 2, x: 0, y: 0 };
|
|
24
|
-
expect(explainCollisionTest(circle, { kind: 'circle', radius: 0, x: 0, y: 0 })).toEqual({
|
|
25
|
-
kind: 'circle',
|
|
26
|
-
overlapping: false,
|
|
27
|
-
shapeIndex: 1,
|
|
28
|
-
status: 'degenerate-shape',
|
|
29
|
-
});
|
|
30
|
-
expect(explainCollisionTest({ kind: 'polygon', points: [0, 0, 2, 0, 1, 1, 2, 2, 0, 2] }, circle)).toEqual({
|
|
31
|
-
kind: 'polygon',
|
|
32
|
-
overlapping: false,
|
|
33
|
-
shapeIndex: 0,
|
|
34
|
-
status: 'non-convex-polygon',
|
|
35
|
-
});
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
it('explains the silent false sentinel for area-less and unknown kinds', () => {
|
|
39
|
-
const circle: CollisionShape = { kind: 'circle', radius: 2, x: 0, y: 0 };
|
|
40
|
-
expect(explainCollisionTest({ kind: 'point', x: 0, y: 0 }, circle)).toMatchObject({
|
|
41
|
-
kind: 'point',
|
|
42
|
-
shapeIndex: 0,
|
|
43
|
-
status: 'unsupported-shape-kind',
|
|
44
|
-
});
|
|
45
|
-
const custom = { kind: 'acme.capsule' } as unknown as CollisionShape;
|
|
46
|
-
expect(explainCollisionTest(circle, custom)).toMatchObject({
|
|
47
|
-
kind: 'acme.capsule',
|
|
48
|
-
shapeIndex: 1,
|
|
49
|
-
status: 'unsupported-shape-kind',
|
|
50
|
-
});
|
|
51
|
-
});
|
|
52
|
-
});
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
import type { CollisionShape } from '@flighthq/types/contract';
|
|
2
|
-
import { describe, expect, it } from 'vitest';
|
|
3
|
-
|
|
4
|
-
import { createCollisionManifold } from './manifold';
|
|
5
|
-
import { setCollisionTestGuard, testCollision } from './testCollision';
|
|
6
|
-
|
|
7
|
-
afterEach(() => {
|
|
8
|
-
setCollisionTestGuard(null);
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
describe('setCollisionTestGuard', () => {
|
|
12
|
-
it('installs and removes the invalid-input diagnostics seam', () => {
|
|
13
|
-
const seenKinds: string[] = [];
|
|
14
|
-
const out = createCollisionManifold();
|
|
15
|
-
const valid: CollisionShape = { kind: 'circle', radius: 1, x: 0, y: 0 };
|
|
16
|
-
const degenerate: CollisionShape = { kind: 'circle', radius: 0, x: 0, y: 0 };
|
|
17
|
-
setCollisionTestGuard((a, b) => seenKinds.push(a.kind, b.kind));
|
|
18
|
-
testCollision(degenerate, valid, out);
|
|
19
|
-
expect(seenKinds).toEqual(['circle', 'circle']);
|
|
20
|
-
|
|
21
|
-
setCollisionTestGuard(null);
|
|
22
|
-
testCollision(degenerate, valid, out);
|
|
23
|
-
expect(seenKinds).toHaveLength(2);
|
|
24
|
-
});
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
describe('testCollision', () => {
|
|
28
|
-
it('dispatches a circle-circle pair to the same result as the direct test', () => {
|
|
29
|
-
const out = createCollisionManifold();
|
|
30
|
-
const a: CollisionShape = { kind: 'circle', x: 0, y: 0, radius: 1 };
|
|
31
|
-
const b: CollisionShape = { kind: 'circle', x: 1, y: 0, radius: 1 };
|
|
32
|
-
expect(testCollision(a, b, out)).toBe(true);
|
|
33
|
-
expect(out.normalX).toBeCloseTo(-1);
|
|
34
|
-
expect(out.depth).toBeCloseTo(1);
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
it('dispatches an aabb-circle pair in either argument order with a sign-consistent normal', () => {
|
|
38
|
-
const forward = createCollisionManifold();
|
|
39
|
-
const reversed = createCollisionManifold();
|
|
40
|
-
const circle: CollisionShape = { kind: 'circle', x: 15, y: 5, radius: 7 };
|
|
41
|
-
const box: CollisionShape = { kind: 'aabb', minX: 0, minY: 0, maxX: 10, maxY: 10 };
|
|
42
|
-
|
|
43
|
-
// circle vs box: pushes the circle (A) off the box -> +X.
|
|
44
|
-
expect(testCollision(circle, box, forward)).toBe(true);
|
|
45
|
-
expect(forward.normalX).toBeCloseTo(1);
|
|
46
|
-
expect(forward.depth).toBeCloseTo(2);
|
|
47
|
-
|
|
48
|
-
// box vs circle: pushes the box (A) off the circle -> the opposite direction, -X.
|
|
49
|
-
expect(testCollision(box, circle, reversed)).toBe(true);
|
|
50
|
-
expect(reversed.normalX).toBeCloseTo(-1);
|
|
51
|
-
expect(reversed.depth).toBeCloseTo(2);
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
it('dispatches an obb-polygon pair', () => {
|
|
55
|
-
const out = createCollisionManifold();
|
|
56
|
-
const obb: CollisionShape = { kind: 'obb', x: 0, y: 0, halfW: 3, halfH: 3, rotation: 0 };
|
|
57
|
-
const polygon: CollisionShape = { kind: 'polygon', points: [2, -1, 6, -1, 6, 3, 2, 3] };
|
|
58
|
-
expect(testCollision(obb, polygon, out)).toBe(true);
|
|
59
|
-
expect(out.normalX).toBeCloseTo(-1);
|
|
60
|
-
expect(out.depth).toBeCloseTo(1);
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
it('reports no overlap for disjoint shapes', () => {
|
|
64
|
-
const out = createCollisionManifold();
|
|
65
|
-
const a: CollisionShape = { kind: 'circle', x: 0, y: 0, radius: 1 };
|
|
66
|
-
const b: CollisionShape = { kind: 'aabb', minX: 10, minY: 10, maxX: 12, maxY: 12 };
|
|
67
|
-
expect(testCollision(a, b, out)).toBe(false);
|
|
68
|
-
expect(out.overlapping).toBe(false);
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
it('reports no manifold for the area-less segment and point kinds', () => {
|
|
72
|
-
const out = createCollisionManifold();
|
|
73
|
-
const segment: CollisionShape = { kind: 'segment', x0: 0, y0: 0, x1: 1, y1: 1 };
|
|
74
|
-
const point: CollisionShape = { kind: 'point', x: 0, y: 0 };
|
|
75
|
-
const circle: CollisionShape = { kind: 'circle', x: 0, y: 0, radius: 1 };
|
|
76
|
-
expect(testCollision(segment, circle, out)).toBe(false);
|
|
77
|
-
expect(testCollision(circle, point, out)).toBe(false);
|
|
78
|
-
expect(out.overlapping).toBe(false);
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
it('fully clears one reused manifold across hit, miss, unsupported, and hit calls', () => {
|
|
82
|
-
const out = createCollisionManifold();
|
|
83
|
-
const circle: CollisionShape = { kind: 'circle', radius: 2, x: 0, y: 0 };
|
|
84
|
-
expect(testCollision(circle, { kind: 'circle', radius: 2, x: 1, y: 0 }, out)).toBe(true);
|
|
85
|
-
expect(out).toMatchObject({ depth: 3, normalX: -1, normalY: 0, overlapping: true });
|
|
86
|
-
|
|
87
|
-
expect(testCollision(circle, { kind: 'circle', radius: 2, x: 10, y: 0 }, out)).toBe(false);
|
|
88
|
-
expect(out).toEqual({ depth: 0, normalX: 0, normalY: 0, overlapping: false });
|
|
89
|
-
|
|
90
|
-
expect(testCollision({ kind: 'point', x: 0, y: 0 }, circle, out)).toBe(false);
|
|
91
|
-
expect(out).toEqual({ depth: 0, normalX: 0, normalY: 0, overlapping: false });
|
|
92
|
-
|
|
93
|
-
expect(testCollision(circle, { kind: 'aabb', maxX: 1, maxY: 1, minX: -1, minY: -1 }, out)).toBe(true);
|
|
94
|
-
expect(out.overlapping).toBe(true);
|
|
95
|
-
expect(out.depth).toBeGreaterThan(0);
|
|
96
|
-
});
|
|
97
|
-
});
|