@flighthq/collision 0.4.0-next.1663.d9c5746 → 0.4.0-next.1694.598ef6f
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
package/dist/gjk2D.js
ADDED
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
import { getCollisionSupport2D } from './collisionSupport2D';
|
|
2
|
+
import { clearCollisionManifold2D } from './manifold';
|
|
3
|
+
// The generic narrow-phase floor: GJK for overlap, EPA for the penetration that follows it.
|
|
4
|
+
//
|
|
5
|
+
// Both read the two shapes only through their registered support functions, so a kind reaches every
|
|
6
|
+
// other registered kind the moment its support exists. This is the O(N) core the pair matrix is O(N²)
|
|
7
|
+
// against, and it is a FLOOR rather than a replacement — it yields one normal and one depth, where a
|
|
8
|
+
// resting box needs two contact points, which is why the SAT-plus-clipping pairs keep their place
|
|
9
|
+
// above it.
|
|
10
|
+
//
|
|
11
|
+
// The Minkowski difference `A - B` is the object both algorithms actually work on, and neither ever
|
|
12
|
+
// builds it: its support in direction `d` is `supportA(d) - supportB(-d)`, one call each. The origin
|
|
13
|
+
// lies inside it exactly when the shapes overlap, and the shortest vector from the origin to its
|
|
14
|
+
// boundary is the penetration.
|
|
15
|
+
// The generic manifold path: GJK for overlap, then EPA for the minimum-translation normal and depth.
|
|
16
|
+
// Writes the normal oriented to push **A out of B**, matching every specialized pair.
|
|
17
|
+
//
|
|
18
|
+
// Returns false — and clears `out` — when either kind has no registered support, when the shapes are
|
|
19
|
+
// disjoint, or when EPA cannot find a boundary to measure at all.
|
|
20
|
+
//
|
|
21
|
+
// ACCURACY, on a curved boundary: the DEPTH converges to the EPA tolerance, but the NORMAL only to
|
|
22
|
+
// roughly its square root — around 1e-5 in practice. That is geometry rather than a defect. EPA
|
|
23
|
+
// terminates on a distance, and distance is second-order insensitive to angular error: tilting the
|
|
24
|
+
// normal by theta on a circle of radius r changes the distance by only `r * theta^2 / 2`, so driving
|
|
25
|
+
// the distance to 1e-10 still leaves the direction 1e-5 out. Chasing it would mean a tolerance at
|
|
26
|
+
// double-precision noise. On a polytope there is no curve and the answer is exact.
|
|
27
|
+
//
|
|
28
|
+
// This is one of the two things that make a pair specialization worth registering — the other being
|
|
29
|
+
// speed — and circle pairs have an exact closed form, so the built-in specializations are what a
|
|
30
|
+
// caller actually gets.
|
|
31
|
+
export function testCollisionSupport2D(a, b, out) {
|
|
32
|
+
clearCollisionManifold2D(out);
|
|
33
|
+
const supportA = getCollisionSupport2D(a.kind);
|
|
34
|
+
const supportB = getCollisionSupport2D(b.kind);
|
|
35
|
+
if (supportA === null || supportB === null)
|
|
36
|
+
return false;
|
|
37
|
+
if (runGjk2D(a, supportA, b, supportB) !== GJK_OVERLAPPING)
|
|
38
|
+
return false;
|
|
39
|
+
return writeEpa2DPenetration(a, supportA, b, supportB, out);
|
|
40
|
+
}
|
|
41
|
+
// Whether two shapes overlap, by GJK. Returns false when either kind has no registered support — an
|
|
42
|
+
// unregistered kind cannot be tested, and reporting "not overlapping" is the package's standing
|
|
43
|
+
// sentinel for that, which `explainCollisionTest2D` classifies and the guard warns about.
|
|
44
|
+
//
|
|
45
|
+
// Touching counts as NOT overlapping, matching every other test in the package: the search stops as
|
|
46
|
+
// soon as a support point fails to reach past the origin, and a point exactly on it fails that test.
|
|
47
|
+
export function testCollisionSupportOverlap2D(a, b) {
|
|
48
|
+
const supportA = getCollisionSupport2D(a.kind);
|
|
49
|
+
const supportB = getCollisionSupport2D(b.kind);
|
|
50
|
+
if (supportA === null || supportB === null)
|
|
51
|
+
return false;
|
|
52
|
+
return runGjk2D(a, supportA, b, supportB) === GJK_OVERLAPPING;
|
|
53
|
+
}
|
|
54
|
+
// Expands the terminating GJK simplex out to the Minkowski boundary, finding the closest edge to the
|
|
55
|
+
// origin. That edge's outward normal and distance ARE the minimum translation.
|
|
56
|
+
//
|
|
57
|
+
// The sign is the part worth stating. The closest boundary point sits at `normal * distance` from the
|
|
58
|
+
// origin, and translating A by the NEGATIVE of that vector moves the origin onto the boundary — which
|
|
59
|
+
// is the definition of just separating. So the manifold normal, which must push A out of B, is the
|
|
60
|
+
// negated EPA normal.
|
|
61
|
+
function writeEpa2DPenetration(a, supportA, b, supportB, out) {
|
|
62
|
+
let count = 3;
|
|
63
|
+
for (let i = 0; i < 6; i += 1)
|
|
64
|
+
polytope[i] = simplex[i];
|
|
65
|
+
// Hoisted out of the loop so running out of iterations returns the BEST EDGE FOUND rather than
|
|
66
|
+
// nothing. GJK has already decided these shapes overlap; an EPA that gives up would make the two
|
|
67
|
+
// entry points contradict each other about that, which is worse than a normal converged one
|
|
68
|
+
// iteration short. Only a polytope with no measurable edge at all is a real failure.
|
|
69
|
+
let bestDistance = Number.POSITIVE_INFINITY;
|
|
70
|
+
let bestAxisX = 0;
|
|
71
|
+
let bestAxisY = 0;
|
|
72
|
+
// The winning edge's TRUE outward normal, kept alongside the canonicalized axis the comparison uses.
|
|
73
|
+
// The canonical form exists to make the choice deterministic; it is not the answer, because
|
|
74
|
+
// canonicalizing throws away a sign that is geometrically correct everywhere except in a tie.
|
|
75
|
+
let bestNormalX = 0;
|
|
76
|
+
let bestNormalY = 0;
|
|
77
|
+
let found = false;
|
|
78
|
+
for (let iteration = 0; iteration < MAX_EPA_ITERATIONS; iteration += 1) {
|
|
79
|
+
let bestEdge = -1;
|
|
80
|
+
let searchNormalX = 0;
|
|
81
|
+
let searchNormalY = 0;
|
|
82
|
+
bestDistance = Number.POSITIVE_INFINITY;
|
|
83
|
+
for (let i = 0; i < count; i += 1) {
|
|
84
|
+
const j = (i + 1) % count;
|
|
85
|
+
const ax = polytope[i * 2];
|
|
86
|
+
const ay = polytope[i * 2 + 1];
|
|
87
|
+
const edgeX = polytope[j * 2] - ax;
|
|
88
|
+
const edgeY = polytope[j * 2 + 1] - ay;
|
|
89
|
+
let normalX = edgeY;
|
|
90
|
+
let normalY = -edgeX;
|
|
91
|
+
const length = Math.sqrt(normalX * normalX + normalY * normalY);
|
|
92
|
+
if (length <= EPSILON)
|
|
93
|
+
continue;
|
|
94
|
+
normalX /= length;
|
|
95
|
+
normalY /= length;
|
|
96
|
+
let distance = ax * normalX + ay * normalY;
|
|
97
|
+
if (distance < 0) {
|
|
98
|
+
normalX = -normalX;
|
|
99
|
+
normalY = -normalY;
|
|
100
|
+
distance = -distance;
|
|
101
|
+
}
|
|
102
|
+
// The axis is CANONICALIZED into a half-plane before it is compared, exactly as the incumbent
|
|
103
|
+
// SAT core does: flipped so x is positive, or so y is when x vanishes. That makes the comparison
|
|
104
|
+
// independent of edge winding and of which shape arrived as A — and it deliberately DISCARDS the
|
|
105
|
+
// outward sign, which the centroid step below restores. Without it, two opposite edges at the
|
|
106
|
+
// same distance are two different axes and whichever the scan reaches first wins.
|
|
107
|
+
let axisX = normalX;
|
|
108
|
+
let axisY = normalY;
|
|
109
|
+
if (axisX < -AXIS_EPSILON || (Math.abs(axisX) <= AXIS_EPSILON && axisY < 0)) {
|
|
110
|
+
axisX = -axisX;
|
|
111
|
+
axisY = -axisY;
|
|
112
|
+
}
|
|
113
|
+
if (!found || isPreferredEpaAxis(distance, axisX, axisY, bestDistance, bestAxisX, bestAxisY)) {
|
|
114
|
+
bestDistance = distance;
|
|
115
|
+
bestAxisX = axisX;
|
|
116
|
+
bestAxisY = axisY;
|
|
117
|
+
bestNormalX = normalX;
|
|
118
|
+
bestNormalY = normalY;
|
|
119
|
+
searchNormalX = normalX;
|
|
120
|
+
searchNormalY = normalY;
|
|
121
|
+
bestEdge = j;
|
|
122
|
+
found = true;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
if (bestEdge < 0)
|
|
126
|
+
break;
|
|
127
|
+
writeMinkowskiSupport2D(a, supportA, b, supportB, searchNormalX, searchNormalY, minkowski);
|
|
128
|
+
const reach = minkowski[0] * searchNormalX + minkowski[1] * searchNormalY;
|
|
129
|
+
// Converged: the boundary in this direction is where the polytope already says it is, so no new
|
|
130
|
+
// vertex can push the edge further out.
|
|
131
|
+
if (reach - bestDistance <= EPA_TOLERANCE || count + 1 >= MAX_POLYTOPE_VERTICES)
|
|
132
|
+
break;
|
|
133
|
+
// Insert the new vertex on the closest edge, splitting it in two.
|
|
134
|
+
for (let i = count; i > bestEdge; i -= 1) {
|
|
135
|
+
polytope[i * 2] = polytope[(i - 1) * 2];
|
|
136
|
+
polytope[i * 2 + 1] = polytope[(i - 1) * 2 + 1];
|
|
137
|
+
}
|
|
138
|
+
polytope[bestEdge * 2] = minkowski[0];
|
|
139
|
+
polytope[bestEdge * 2 + 1] = minkowski[1];
|
|
140
|
+
count += 1;
|
|
141
|
+
}
|
|
142
|
+
if (!found)
|
|
143
|
+
return false;
|
|
144
|
+
// The outward normal EPA derived is the answer almost everywhere: for a genuine penetration the
|
|
145
|
+
// minimum-translation direction is geometrically determined, and overriding it would be wrong.
|
|
146
|
+
//
|
|
147
|
+
// A TIE is the exception, and the only place a sign is actually free to choose. It happens when the
|
|
148
|
+
// difference is as deep the other way — two opposite edges the same distance from the origin — and
|
|
149
|
+
// then whichever edge the scan reached first would decide, which makes the answer depend on argument
|
|
150
|
+
// order. One extra support call detects it, and only then does the incumbent's rule apply: the normal
|
|
151
|
+
// points from B toward A, read off the Minkowski difference's own interior, which IS
|
|
152
|
+
// `centroidA - centroidB` without either shape having to expose a centroid.
|
|
153
|
+
writeMinkowskiSupport2D(a, supportA, b, supportB, -bestNormalX, -bestNormalY, minkowski);
|
|
154
|
+
const opposite = -(minkowski[0] * bestNormalX + minkowski[1] * bestNormalY);
|
|
155
|
+
let normalX = bestNormalX;
|
|
156
|
+
let normalY = bestNormalY;
|
|
157
|
+
if (Math.abs(opposite - bestDistance) <= TIE_TOLERANCE) {
|
|
158
|
+
writeMinkowskiInterior2D(a, supportA, b, supportB, interior);
|
|
159
|
+
if (bestAxisX * interior[0] + bestAxisY * interior[1] < 0) {
|
|
160
|
+
normalX = -bestAxisX;
|
|
161
|
+
normalY = -bestAxisY;
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
normalX = bestAxisX;
|
|
165
|
+
normalY = bestAxisY;
|
|
166
|
+
}
|
|
167
|
+
// The manifold normal is the negated EPA normal, so flip back into EPA's sense before the write
|
|
168
|
+
// below negates it again.
|
|
169
|
+
normalX = -normalX;
|
|
170
|
+
normalY = -normalY;
|
|
171
|
+
}
|
|
172
|
+
out.overlapping = true;
|
|
173
|
+
out.normalX = -normalX;
|
|
174
|
+
out.normalY = -normalY;
|
|
175
|
+
out.depth = bestDistance;
|
|
176
|
+
return true;
|
|
177
|
+
}
|
|
178
|
+
// Whether a candidate axis beats the incumbent one: strictly shallower wins, and an exact tie is
|
|
179
|
+
// broken lexicographically on the canonicalized axis. The mirror of the SAT core's `isPreferredAxis`,
|
|
180
|
+
// and it exists for the same reason — a tie resolved by scan order makes the answer depend on which
|
|
181
|
+
// shape was passed first.
|
|
182
|
+
function isPreferredEpaAxis(distance, axisX, axisY, bestDistance, bestAxisX, bestAxisY) {
|
|
183
|
+
if (distance < bestDistance - AXIS_EPSILON)
|
|
184
|
+
return true;
|
|
185
|
+
if (Math.abs(distance - bestDistance) > AXIS_EPSILON)
|
|
186
|
+
return false;
|
|
187
|
+
if (axisX > bestAxisX + AXIS_EPSILON)
|
|
188
|
+
return true;
|
|
189
|
+
return Math.abs(axisX - bestAxisX) <= AXIS_EPSILON && axisY > bestAxisY;
|
|
190
|
+
}
|
|
191
|
+
// An interior point of the Minkowski difference, as the mean of its supports along the four axes.
|
|
192
|
+
// Equal to `centroidA - centroidB` for a symmetric shape and close enough for any convex one, since
|
|
193
|
+
// only its DIRECTION is read.
|
|
194
|
+
function writeMinkowskiInterior2D(a, supportA, b, supportB, out) {
|
|
195
|
+
out[0] = 0;
|
|
196
|
+
out[1] = 0;
|
|
197
|
+
for (let i = 0; i < 4; i += 1) {
|
|
198
|
+
writeMinkowskiSupport2D(a, supportA, b, supportB, INTERIOR_AXES[i * 2], INTERIOR_AXES[i * 2 + 1], minkowski);
|
|
199
|
+
out[0] += minkowski[0];
|
|
200
|
+
out[1] += minkowski[1];
|
|
201
|
+
}
|
|
202
|
+
out[0] /= 4;
|
|
203
|
+
out[1] /= 4;
|
|
204
|
+
}
|
|
205
|
+
// Runs GJK until it encloses the origin or proves it cannot, leaving the final simplex in `simplex`.
|
|
206
|
+
// Returns `GJK_OVERLAPPING` or `GJK_SEPARATED`.
|
|
207
|
+
//
|
|
208
|
+
// The search direction starts from the vector between the two shapes' first support points rather than
|
|
209
|
+
// from a fixed axis, so a pair that is already far apart on one axis is rejected in the first
|
|
210
|
+
// iteration instead of walking there.
|
|
211
|
+
function runGjk2D(a, supportA, b, supportB) {
|
|
212
|
+
writeMinkowskiSupport2D(a, supportA, b, supportB, 1, 0, minkowski);
|
|
213
|
+
simplex[0] = minkowski[0];
|
|
214
|
+
simplex[1] = minkowski[1];
|
|
215
|
+
let count = 1;
|
|
216
|
+
let directionX = -simplex[0];
|
|
217
|
+
let directionY = -simplex[1];
|
|
218
|
+
for (let iteration = 0; iteration < MAX_GJK_ITERATIONS; iteration += 1) {
|
|
219
|
+
if (directionX === 0 && directionY === 0) {
|
|
220
|
+
// The origin is ON the simplex. Touching, not overlapping — the same answer every other test in
|
|
221
|
+
// the package gives for a pair that merely grazes.
|
|
222
|
+
return GJK_SEPARATED;
|
|
223
|
+
}
|
|
224
|
+
writeMinkowskiSupport2D(a, supportA, b, supportB, directionX, directionY, minkowski);
|
|
225
|
+
if (minkowski[0] * directionX + minkowski[1] * directionY <= 0)
|
|
226
|
+
return GJK_SEPARATED;
|
|
227
|
+
simplex[count * 2] = minkowski[0];
|
|
228
|
+
simplex[count * 2 + 1] = minkowski[1];
|
|
229
|
+
count += 1;
|
|
230
|
+
if (count === 2) {
|
|
231
|
+
// Line case: the origin lies off one side of the segment, and the next direction is the
|
|
232
|
+
// perpendicular pointing at it.
|
|
233
|
+
const bx = simplex[0];
|
|
234
|
+
const by = simplex[1];
|
|
235
|
+
const ax = simplex[2];
|
|
236
|
+
const ay = simplex[3];
|
|
237
|
+
const edgeX = bx - ax;
|
|
238
|
+
const edgeY = by - ay;
|
|
239
|
+
// The triple product `(edge x -a) x edge`, which is the component of `-a` perpendicular to the
|
|
240
|
+
// edge — the direction the origin actually lies in, rather than either bare perpendicular.
|
|
241
|
+
const cross = edgeX * -ay - edgeY * -ax;
|
|
242
|
+
if (cross === 0) {
|
|
243
|
+
// The origin is COLLINEAR with the segment, and that proves nothing on its own: a 1-simplex
|
|
244
|
+
// touching the origin is still only a line through a 2D shape, and the origin can sit well
|
|
245
|
+
// inside it. Taking this for separation is the bug that reports two overlapping circles whose
|
|
246
|
+
// centres share an axis as disjoint — the most ordinary configuration there is. Either
|
|
247
|
+
// perpendicular carries the search on; the triangle case is what decides containment.
|
|
248
|
+
directionX = -edgeY;
|
|
249
|
+
directionY = edgeX;
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
directionX = -edgeY * cross;
|
|
253
|
+
directionY = edgeX * cross;
|
|
254
|
+
}
|
|
255
|
+
continue;
|
|
256
|
+
}
|
|
257
|
+
// Triangle case: the origin is either outside one of the two new edges, or enclosed.
|
|
258
|
+
const cx = simplex[0];
|
|
259
|
+
const cy = simplex[1];
|
|
260
|
+
const bx = simplex[2];
|
|
261
|
+
const by = simplex[3];
|
|
262
|
+
const ax = simplex[4];
|
|
263
|
+
const ay = simplex[5];
|
|
264
|
+
const abX = bx - ax;
|
|
265
|
+
const abY = by - ay;
|
|
266
|
+
const acX = cx - ax;
|
|
267
|
+
const acY = cy - ay;
|
|
268
|
+
// The outward perpendicular of each edge, as the triple product `(ac x ab) x ab` expanded to
|
|
269
|
+
// `ab(ac.ab) - ac(ab.ab)`. Winding-INDEPENDENT, which matters: taking the bare perpendicular and
|
|
270
|
+
// orienting it by the triangle's signed area gets the sign right for one winding and inverts it for
|
|
271
|
+
// the other, so half of all inputs report the origin outside an edge it is inside. The support
|
|
272
|
+
// points arrive in whatever order the search produced, so neither winding can be assumed.
|
|
273
|
+
const abDotAc = abX * acX + abY * acY;
|
|
274
|
+
const abLengthSquared = abX * abX + abY * abY;
|
|
275
|
+
const acLengthSquared = acX * acX + acY * acY;
|
|
276
|
+
const abNormalX = abX * abDotAc - acX * abLengthSquared;
|
|
277
|
+
const abNormalY = abY * abDotAc - acY * abLengthSquared;
|
|
278
|
+
if (abNormalX * -ax + abNormalY * -ay > 0) {
|
|
279
|
+
// Drop C: the origin is beyond AB.
|
|
280
|
+
simplex[0] = bx;
|
|
281
|
+
simplex[1] = by;
|
|
282
|
+
simplex[2] = ax;
|
|
283
|
+
simplex[3] = ay;
|
|
284
|
+
count = 2;
|
|
285
|
+
directionX = abNormalX;
|
|
286
|
+
directionY = abNormalY;
|
|
287
|
+
continue;
|
|
288
|
+
}
|
|
289
|
+
const acNormalX = acX * abDotAc - abX * acLengthSquared;
|
|
290
|
+
const acNormalY = acY * abDotAc - abY * acLengthSquared;
|
|
291
|
+
if (acNormalX * -ax + acNormalY * -ay > 0) {
|
|
292
|
+
// Drop B: the origin is beyond AC.
|
|
293
|
+
simplex[2] = ax;
|
|
294
|
+
simplex[3] = ay;
|
|
295
|
+
count = 2;
|
|
296
|
+
directionX = acNormalX;
|
|
297
|
+
directionY = acNormalY;
|
|
298
|
+
continue;
|
|
299
|
+
}
|
|
300
|
+
return GJK_OVERLAPPING;
|
|
301
|
+
}
|
|
302
|
+
return GJK_SEPARATED;
|
|
303
|
+
}
|
|
304
|
+
// Writes the support point of the Minkowski difference `A - B` along a direction: the furthest point
|
|
305
|
+
// on A one way, minus the furthest point on B the other. The difference is never materialized.
|
|
306
|
+
function writeMinkowskiSupport2D(a, supportA, b, supportB, directionX, directionY, out) {
|
|
307
|
+
supportA(a, directionX, directionY, supportPointA);
|
|
308
|
+
supportB(b, -directionX, -directionY, supportPointB);
|
|
309
|
+
out[0] = supportPointA[0] - supportPointB[0];
|
|
310
|
+
out[1] = supportPointA[1] - supportPointB[1];
|
|
311
|
+
}
|
|
312
|
+
const GJK_OVERLAPPING = 1;
|
|
313
|
+
const GJK_SEPARATED = 0;
|
|
314
|
+
// GJK converges in a handful of iterations for convex shapes; the cap is a guard against a support
|
|
315
|
+
// function that is not convex rather than a tuning knob. A non-convex polygon can cycle forever, and
|
|
316
|
+
// this package already refuses those through `getCollisionPolygonValidationStatus2D`.
|
|
317
|
+
const MAX_GJK_ITERATIONS = 32;
|
|
318
|
+
const MAX_EPA_ITERATIONS = 32;
|
|
319
|
+
// The polytope only ever grows by one vertex per iteration, so this bounds the scratch rather than the
|
|
320
|
+
// answer's quality: hitting it returns the best edge found so far, which is already within tolerance
|
|
321
|
+
// for every shape a caller can build out of the four registered kinds.
|
|
322
|
+
const MAX_POLYTOPE_VERTICES = 40;
|
|
323
|
+
const EPA_TOLERANCE = 1e-9;
|
|
324
|
+
const EPSILON = 1e-12;
|
|
325
|
+
// The band within which two axes count as the same, for both the distance comparison and the
|
|
326
|
+
// lexicographic tie-break. Matches the SAT core's own relative epsilon so the two agree about what a
|
|
327
|
+
// tie IS, not only about how to break one.
|
|
328
|
+
const AXIS_EPSILON = 1e-9;
|
|
329
|
+
// How close the two opposite directions have to be before the penetration counts as ambiguous. Looser
|
|
330
|
+
// than AXIS_EPSILON on purpose: EPA converges its distance to about 1e-10, so a tie that is exact in
|
|
331
|
+
// the geometry arrives here a little off, and a band tighter than that noise would miss it.
|
|
332
|
+
const TIE_TOLERANCE = 1e-6;
|
|
333
|
+
const INTERIOR_AXES = [1, 0, -1, 0, 0, 1, 0, -1];
|
|
334
|
+
const interior = [0, 0];
|
|
335
|
+
const minkowski = [0, 0];
|
|
336
|
+
const polytope = new Float64Array(MAX_POLYTOPE_VERTICES * 2 + 2);
|
|
337
|
+
const simplex = [0, 0, 0, 0, 0, 0];
|
|
338
|
+
const supportPointA = [0, 0];
|
|
339
|
+
const supportPointB = [0, 0];
|
|
340
|
+
//# sourceMappingURL=gjk2D.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gjk2D.js","sourceRoot":"","sources":["../src/gjk2D.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,2 +1,5 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { clearCollisionContactManifold2D, clearCollisionManifold2D, collideAabbAabbContactManifold, collideAabbObbContactManifold, collideAabbPolygonContactManifold, collideCircleAabbContactManifold, collideCircleCircleContactManifold, collideCircleObbContactManifold, collideCirclePolygonContactManifold, collideContactManifold2D, collideObbObbContactManifold, collideObbPolygonContactManifold, collidePolygonPolygonContactManifold, createCollisionContactManifold2D, createCollisionManifold2D, areCollisionGuardsEnabled, disableCollisionGuards, enableCollisionGuards, explainCollisionTest2D, getCollisionShapeContainsPoint2D, createCollisionRaycastHit2D, createCollisionTimeOfImpact2D, raycastCollisionShape2D, sweepCollisionShape2D, testAabbAabbCollision, testAabbObbCollision, testAabbPolygonCollision, testCircleAabbCollision, testCircleCircleCollision, testCircleObbCollision, testCirclePolygonCollision, testCollision2D, testObbObbCollision, testObbPolygonCollision, testPolygonPolygonCollision, testSegmentAabbCollision, testSegmentCircleCollision, testSegmentObbCollision, testSegmentPolygonCollision, testSegmentSegmentCollision, } from './contract';
|
|
2
|
+
export { getCollisionPairTest2D, getCollisionSupport2D, registerBuiltInCollisionSupports2D, registerCollisionPairTest2D, registerCollisionSupport2D, supportCollisionAabb2D, supportCollisionCircle2D, supportCollisionObb2D, supportCollisionPolygon2D, } from './collisionSupport2D';
|
|
3
|
+
export { testCollisionSupport2D, testCollisionSupportOverlap2D } from './gjk2D';
|
|
4
|
+
export { registerBuiltInCollisionPairTests2D } from './registerBuiltInCollisionPairTests2D';
|
|
2
5
|
//# 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,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,+BAA+B,EAC/B,wBAAwB,EACxB,8BAA8B,EAC9B,6BAA6B,EAC7B,iCAAiC,EACjC,gCAAgC,EAChC,kCAAkC,EAClC,+BAA+B,EAC/B,mCAAmC,EACnC,wBAAwB,EACxB,4BAA4B,EAC5B,gCAAgC,EAChC,oCAAoC,EACpC,gCAAgC,EAChC,yBAAyB,EACzB,yBAAyB,EACzB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,gCAAgC,EAChC,2BAA2B,EAC3B,6BAA6B,EAC7B,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,EACvB,yBAAyB,EACzB,sBAAsB,EACtB,0BAA0B,EAC1B,eAAe,EACf,mBAAmB,EACnB,uBAAuB,EACvB,2BAA2B,EAC3B,wBAAwB,EACxB,0BAA0B,EAC1B,uBAAuB,EACvB,2BAA2B,EAC3B,2BAA2B,GAC5B,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,kCAAkC,EAClC,2BAA2B,EAC3B,0BAA0B,EAC1B,sBAAsB,EACtB,wBAAwB,EACxB,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,sBAAsB,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAC;AAChF,OAAO,EAAE,mCAAmC,EAAE,MAAM,uCAAuC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,5 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { clearCollisionContactManifold2D, clearCollisionManifold2D, collideAabbAabbContactManifold, collideAabbObbContactManifold, collideAabbPolygonContactManifold, collideCircleAabbContactManifold, collideCircleCircleContactManifold, collideCircleObbContactManifold, collideCirclePolygonContactManifold, collideContactManifold2D, collideObbObbContactManifold, collideObbPolygonContactManifold, collidePolygonPolygonContactManifold, createCollisionContactManifold2D, createCollisionManifold2D, areCollisionGuardsEnabled, disableCollisionGuards, enableCollisionGuards, explainCollisionTest2D, getCollisionShapeContainsPoint2D, createCollisionRaycastHit2D, createCollisionTimeOfImpact2D, raycastCollisionShape2D, sweepCollisionShape2D, testAabbAabbCollision, testAabbObbCollision, testAabbPolygonCollision, testCircleAabbCollision, testCircleCircleCollision, testCircleObbCollision, testCirclePolygonCollision, testCollision2D, testObbObbCollision, testObbPolygonCollision, testPolygonPolygonCollision, testSegmentAabbCollision, testSegmentCircleCollision, testSegmentObbCollision, testSegmentPolygonCollision, testSegmentSegmentCollision, } from './contract';
|
|
2
|
+
export { getCollisionPairTest2D, getCollisionSupport2D, registerBuiltInCollisionSupports2D, registerCollisionPairTest2D, registerCollisionSupport2D, supportCollisionAabb2D, supportCollisionCircle2D, supportCollisionObb2D, supportCollisionPolygon2D, } from './collisionSupport2D';
|
|
3
|
+
export { testCollisionSupport2D, testCollisionSupportOverlap2D } from './gjk2D';
|
|
4
|
+
export { registerBuiltInCollisionPairTests2D } from './registerBuiltInCollisionPairTests2D';
|
|
2
5
|
//# 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,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,+BAA+B,EAC/B,wBAAwB,EACxB,8BAA8B,EAC9B,6BAA6B,EAC7B,iCAAiC,EACjC,gCAAgC,EAChC,kCAAkC,EAClC,+BAA+B,EAC/B,mCAAmC,EACnC,wBAAwB,EACxB,4BAA4B,EAC5B,gCAAgC,EAChC,oCAAoC,EACpC,gCAAgC,EAChC,yBAAyB,EACzB,yBAAyB,EACzB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,gCAAgC,EAChC,2BAA2B,EAC3B,6BAA6B,EAC7B,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,EACvB,yBAAyB,EACzB,sBAAsB,EACtB,0BAA0B,EAC1B,eAAe,EACf,mBAAmB,EACnB,uBAAuB,EACvB,2BAA2B,EAC3B,wBAAwB,EACxB,0BAA0B,EAC1B,uBAAuB,EACvB,2BAA2B,EAC3B,2BAA2B,GAC5B,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,kCAAkC,EAClC,2BAA2B,EAC3B,0BAA0B,EAC1B,sBAAsB,EACtB,wBAAwB,EACxB,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,sBAAsB,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAC;AAChF,OAAO,EAAE,mCAAmC,EAAE,MAAM,uCAAuC,CAAC"}
|
package/dist/manifold.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare function
|
|
3
|
-
export declare function
|
|
1
|
+
import type { CollisionManifold2D } from '@flighthq/types/contract';
|
|
2
|
+
export declare function clearCollisionManifold2D(out: CollisionManifold2D): void;
|
|
3
|
+
export declare function createCollisionManifold2D(): CollisionManifold2D;
|
|
4
4
|
//# sourceMappingURL=manifold.d.ts.map
|
package/dist/manifold.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifold.d.ts","sourceRoot":"","sources":["../src/manifold.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"manifold.d.ts","sourceRoot":"","sources":["../src/manifold.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAKpE,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,mBAAmB,GAAG,IAAI,CAKvE;AAGD,wBAAgB,yBAAyB,IAAI,mBAAmB,CAE/D"}
|
package/dist/manifold.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
// Clears a manifold to the non-overlapping state: `overlapping` false, normal and depth zero. The
|
|
2
2
|
// narrow-phase tests call this on their disjoint path, so a reused `out` never carries a stale
|
|
3
3
|
// normal into a miss.
|
|
4
|
-
export function
|
|
4
|
+
export function clearCollisionManifold2D(out) {
|
|
5
5
|
out.overlapping = false;
|
|
6
6
|
out.normalX = 0;
|
|
7
7
|
out.normalY = 0;
|
|
8
8
|
out.depth = 0;
|
|
9
9
|
}
|
|
10
10
|
// Allocates a fresh manifold in the non-overlapping state, ready to be passed as an `out` parameter.
|
|
11
|
-
export function
|
|
11
|
+
export function createCollisionManifold2D() {
|
|
12
12
|
return { overlapping: false, normalX: 0, normalY: 0, depth: 0 };
|
|
13
13
|
}
|
|
14
14
|
//# sourceMappingURL=manifold.js.map
|
package/dist/manifold.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifold.js","sourceRoot":"","sources":["../src/manifold.ts"],"names":[],"mappings":"AAEA,kGAAkG;AAClG,+FAA+F;AAC/F,sBAAsB;AACtB,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"manifold.js","sourceRoot":"","sources":["../src/manifold.ts"],"names":[],"mappings":"AAEA,kGAAkG;AAClG,+FAA+F;AAC/F,sBAAsB;AACtB,MAAM,UAAU,wBAAwB,CAAC,GAAwB;IAC/D,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;AAChB,CAAC;AAED,qGAAqG;AACrG,MAAM,UAAU,yBAAyB;IACvC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AAClE,CAAC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export declare function
|
|
1
|
+
import type { CollisionBuiltInShape2D } from '@flighthq/types/contract';
|
|
2
|
+
export declare function getCollisionShapeContainsPoint2D(shape: Readonly<CollisionBuiltInShape2D>, x: number, y: number): boolean;
|
|
3
3
|
//# sourceMappingURL=pointContainment.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pointContainment.d.ts","sourceRoot":"","sources":["../src/pointContainment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"pointContainment.d.ts","sourceRoot":"","sources":["../src/pointContainment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAUxE,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,QAAQ,CAAC,uBAAuB,CAAC,EACxC,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,GACR,OAAO,CA8CT"}
|
package/dist/pointContainment.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getCollisionPolygonValidationStatus2D } from './collisionShapeValidation';
|
|
2
2
|
const RELATIVE_EPSILON = 1e-9;
|
|
3
3
|
// Whether the point (`x`,`y`) lies inside a collider. Boundary-inclusive: a point exactly on the
|
|
4
4
|
// edge of any shape counts as contained. For the area-less kinds this degrades to an on-shape test —
|
|
5
5
|
// `segment` returns true when the point lies on the segment (within epsilon), `point` when the two
|
|
6
6
|
// points coincide (within epsilon). Unknown kinds return false. The polygon is assumed convex.
|
|
7
|
-
export function
|
|
7
|
+
export function getCollisionShapeContainsPoint2D(shape, x, y) {
|
|
8
8
|
switch (shape.kind) {
|
|
9
9
|
case 'circle': {
|
|
10
10
|
const dx = x - shape.x;
|
|
@@ -23,7 +23,7 @@ export function getCollisionShapeContainsPoint(shape, x, y) {
|
|
|
23
23
|
return Math.abs(localX) <= shape.halfW && Math.abs(localY) <= shape.halfH;
|
|
24
24
|
}
|
|
25
25
|
case 'polygon':
|
|
26
|
-
if (
|
|
26
|
+
if (getCollisionPolygonValidationStatus2D(shape.points) !== null)
|
|
27
27
|
return false;
|
|
28
28
|
return isPointInConvexPolygon(x, y, shape.points, shape.points.length >> 1);
|
|
29
29
|
case 'segment': {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pointContainment.js","sourceRoot":"","sources":["../src/pointContainment.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"pointContainment.js","sourceRoot":"","sources":["../src/pointContainment.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { CollisionRaycastHit2D, CollisionBuiltInShape2D } from '@flighthq/types/contract';
|
|
2
|
+
export declare function createCollisionRaycastHit2D(): CollisionRaycastHit2D;
|
|
3
|
+
export declare function raycastCollisionShape2D(shape: Readonly<CollisionBuiltInShape2D>, originX: number, originY: number, directionX: number, directionY: number, out: CollisionRaycastHit2D, maxFraction?: number): boolean;
|
|
4
|
+
//# sourceMappingURL=raycastCollisionShape2D.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"raycastCollisionShape2D.d.ts","sourceRoot":"","sources":["../src/raycastCollisionShape2D.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAO/F,wBAAgB,2BAA2B,IAAI,qBAAqB,CAEnE;AAKD,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,QAAQ,CAAC,uBAAuB,CAAC,EACxC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,qBAAqB,EAC1B,WAAW,SAA2B,GACrC,OAAO,CAqFT"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { getCollisionPolygonValidationStatus2D } from './collisionShapeValidation';
|
|
2
|
+
import { getCollisionShapeContainsPoint2D } from './pointContainment';
|
|
3
3
|
const RELATIVE_EPSILON = 1e-9;
|
|
4
|
-
export function
|
|
4
|
+
export function createCollisionRaycastHit2D() {
|
|
5
5
|
return { fraction: 0, x: 0, y: 0, normalX: 0, normalY: 0 };
|
|
6
6
|
}
|
|
7
7
|
// Writes the first exact intersection of `origin + direction * fraction` with `shape`. Direction need
|
|
8
8
|
// not be normalized; fraction therefore stays in the caller's parameterization. `maxFraction` bounds a
|
|
9
9
|
// segment or sweep without changing the ray direction, and defaults to an unbounded forward ray.
|
|
10
|
-
export function
|
|
10
|
+
export function raycastCollisionShape2D(shape, originX, originY, directionX, directionY, out, maxFraction = Number.POSITIVE_INFINITY) {
|
|
11
11
|
clearRaycastHit(out);
|
|
12
12
|
if (!Number.isFinite(originX) ||
|
|
13
13
|
!Number.isFinite(originY) ||
|
|
@@ -17,7 +17,7 @@ export function raycastCollisionShape(shape, originX, originY, directionX, direc
|
|
|
17
17
|
maxFraction < 0) {
|
|
18
18
|
return false;
|
|
19
19
|
}
|
|
20
|
-
if (
|
|
20
|
+
if (getCollisionShapeContainsPoint2D(shape, originX, originY)) {
|
|
21
21
|
writeRaycastHit(out, originX, originY, directionX, directionY, 0, 0, 0);
|
|
22
22
|
return true;
|
|
23
23
|
}
|
|
@@ -163,7 +163,7 @@ function raycastObb(shape, originX, originY, directionX, directionY, maxFraction
|
|
|
163
163
|
return true;
|
|
164
164
|
}
|
|
165
165
|
function raycastPolygon(points, originX, originY, directionX, directionY, maxFraction, out, scratch) {
|
|
166
|
-
if (
|
|
166
|
+
if (getCollisionPolygonValidationStatus2D(points) !== null)
|
|
167
167
|
return false;
|
|
168
168
|
let bestFraction = maxFraction;
|
|
169
169
|
let bestNormalX = 0;
|
|
@@ -308,4 +308,4 @@ function releaseRaycastScratch(scratch) {
|
|
|
308
308
|
raycastScratchPool.push(scratch);
|
|
309
309
|
}
|
|
310
310
|
const raycastScratchPool = [createRaycastScratch()];
|
|
311
|
-
//# sourceMappingURL=
|
|
311
|
+
//# sourceMappingURL=raycastCollisionShape2D.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"raycastCollisionShape2D.js","sourceRoot":"","sources":["../src/raycastCollisionShape2D.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registerBuiltInCollisionPairTests2D.d.ts","sourceRoot":"","sources":["../src/registerBuiltInCollisionPairTests2D.ts"],"names":[],"mappings":"AAiCA,wBAAgB,mCAAmC,IAAI,IAAI,CA+B1D"}
|