@flighthq/physics3d 0.4.0-next.1811.dde7eb1 → 0.4.0-next.1821.efb1cbc

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.
@@ -1,4 +1,5 @@
1
- import type { Physics3DWorld } from '@flighthq/types/contract';
1
+ import type { Physics3DRotationalCcdEnvelope, Physics3DWorld } from '@flighthq/types/contract';
2
2
  export declare function hasActivePhysics3DBullet(world: Readonly<Physics3DWorld>): boolean;
3
3
  export declare function integratePhysics3DContinuous(world: Physics3DWorld, dt: number): void;
4
+ export declare function writePhysics3DRotationalCcdEnvelope(angularSpeed: number, maximumRadius: number, dt: number, maxSubsteps: number, out: Physics3DRotationalCcdEnvelope): boolean;
4
5
  //# sourceMappingURL=continuous.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"continuous.d.ts","sourceRoot":"","sources":["../src/continuous.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAGV,cAAc,EAGf,MAAM,0BAA0B,CAAC;AAmClC,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,QAAQ,CAAC,cAAc,CAAC,GAAG,OAAO,CAKjF;AAQD,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAmBpF"}
1
+ {"version":3,"file":"continuous.d.ts","sourceRoot":"","sources":["../src/continuous.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAIV,8BAA8B,EAC9B,cAAc,EAGf,MAAM,0BAA0B,CAAC;AAsClC,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,QAAQ,CAAC,cAAc,CAAC,GAAG,OAAO,CAKjF;AAWD,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CA2BpF;AAMD,wBAAgB,mCAAmC,CACjD,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,EAAE,EAAE,MAAM,EACV,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,8BAA8B,GAClC,OAAO,CA4BT"}
@@ -1,11 +1,15 @@
1
1
  import { createCollisionContactManifold3D, createCollisionTimeOfImpact3D } from '@flighthq/collision/contract';
2
+ import { DEG_TO_RAD } from '@flighthq/math/contract';
2
3
  import { synchronizePhysics3DBroadphase, synchronizePhysics3DSweptBroadphase } from './broadphase';
3
4
  import { collidePhysics3DColliderShapes, sweepPhysics3DColliderShapes } from './colliderCollision';
4
5
  import { updatePhysics3DColliderWorldShape } from './colliderTransform';
6
+ import { createPhysics3DContactPoint } from './contacts';
5
7
  import { integrateRigidBody3DPose, refreshRigidBody3DWorldInertia } from './integrate';
6
8
  import { isPhysics3DPairJointSuppressed } from './jointCollisionSuppression';
7
9
  import { isPhysics3DPairOrdered } from './jointRegistry';
8
- import { mixPhysics3DRestitution } from './material';
10
+ import { mixPhysics3DFriction, mixPhysics3DRestitution } from './material';
11
+ import { steppingPhysics3DWorlds } from './ownership';
12
+ import { isPhysics3DContactValid } from './stepValidation';
9
13
  import { applySymmetricTensor, TENSOR_XX, TENSOR_XY, TENSOR_XZ, TENSOR_YY, TENSOR_YZ, TENSOR_ZZ, } from './symmetricTensor';
10
14
  import { writeRigidBody3DWorldCenter } from './world';
11
15
  // Continuous collision: advancing poses in chronological order of impact rather than in one jump.
@@ -34,9 +38,19 @@ export function hasActivePhysics3DBullet(world) {
34
38
  // The substep budget is a HARD bound rather than a convergence target: an adversarial scene — a fast body
35
39
  // in a narrow gap — can generate impacts without limit, and a loop that ran until none were left would
36
40
  // make one frame's cost unbounded. When the budget runs out the remaining time is advanced discretely,
37
- // which is the behaviour the caller would have had anyway.
41
+ // which is the behaviour the caller would have had anyway. A custom loop entering here directly acquires
42
+ // the same mutation boundary as `stepPhysics3D`; the standard step already owns it. A second continuous
43
+ // entry on the same world is always recursion and is rejected before it can share this function's scratch
44
+ // or advance a half-resolved impact from inside a contact hook.
38
45
  export function integratePhysics3DContinuous(world, dt) {
46
+ if (integratingPhysics3DWorlds.has(world)) {
47
+ throw new Error('Cannot integrate a physics world recursively while it is stepping');
48
+ }
39
49
  const scratch = acquirePhysics3DContinuousScratch();
50
+ const ownsMutationBoundary = !steppingPhysics3DWorlds.has(world);
51
+ integratingPhysics3DWorlds.add(world);
52
+ if (ownsMutationBoundary)
53
+ steppingPhysics3DWorlds.add(world);
40
54
  try {
41
55
  let remaining = dt;
42
56
  for (let substep = 0; substep < world.config.maxCcdSubsteps && remaining > 0; substep += 1) {
@@ -56,7 +70,47 @@ export function integratePhysics3DContinuous(world, dt) {
56
70
  }
57
71
  finally {
58
72
  releasePhysics3DContinuousScratch(scratch);
73
+ if (ownsMutationBoundary)
74
+ steppingPhysics3DWorlds.delete(world);
75
+ integratingPhysics3DWorlds.delete(world);
76
+ }
77
+ }
78
+ // Writes the configured rotational CCD sampling guarantee without running a world. This is the authoring
79
+ // check for a fast blade or offset collider: feed it the maximum angular speed and the furthest collider
80
+ // point from the body origin, then compare the reported angular/arc gap with the thinnest interaction the
81
+ // game must not miss.
82
+ export function writePhysics3DRotationalCcdEnvelope(angularSpeed, maximumRadius, dt, maxSubsteps, out) {
83
+ if (!Number.isFinite(angularSpeed) ||
84
+ angularSpeed < 0 ||
85
+ !Number.isFinite(maximumRadius) ||
86
+ maximumRadius < 0 ||
87
+ !Number.isFinite(dt) ||
88
+ dt < 0 ||
89
+ !Number.isSafeInteger(maxSubsteps) ||
90
+ maxSubsteps < 0) {
91
+ clearPhysics3DRotationalCcdEnvelope(out);
92
+ return false;
93
+ }
94
+ const angularTravel = angularSpeed * dt;
95
+ if (!Number.isFinite(angularTravel)) {
96
+ clearPhysics3DRotationalCcdEnvelope(out);
97
+ return false;
59
98
  }
99
+ const sampleCount = getPhysics3DRotationSampleCount(angularTravel, maxSubsteps);
100
+ const maxAngularIncrement = angularTravel === 0 ? 0 : sampleCount === 0 ? Number.POSITIVE_INFINITY : angularTravel / sampleCount;
101
+ out.angularTravel = angularTravel;
102
+ out.sampleCount = sampleCount;
103
+ out.maxAngularIncrement = maxAngularIncrement;
104
+ out.maxPointArcTravel = maximumRadius === 0 ? 0 : maximumRadius * maxAngularIncrement;
105
+ out.targetIncrementMet = angularTravel === 0 || maxAngularIncrement <= CCD_ROTATION_INCREMENT;
106
+ return true;
107
+ }
108
+ function clearPhysics3DRotationalCcdEnvelope(out) {
109
+ out.angularTravel = 0;
110
+ out.sampleCount = 0;
111
+ out.maxAngularIncrement = 0;
112
+ out.maxPointArcTravel = 0;
113
+ out.targetIncrementMet = false;
60
114
  }
61
115
  function advanceAwakePhysics3DBodies(world, dt) {
62
116
  for (const body of world.bodies) {
@@ -90,71 +144,126 @@ function findEarliestPhysics3DImpact(world, dt, scratch) {
90
144
  continue;
91
145
  if (isPhysics3DPairJointSuppressed(world, bodyA.index, bodyB.index))
92
146
  continue;
93
- const translationAX = isPhysics3DBodyMoving(bodyA) ? bodyA.velocityX * dt : 0;
94
- const translationAY = isPhysics3DBodyMoving(bodyA) ? bodyA.velocityY * dt : 0;
95
- const translationAZ = isPhysics3DBodyMoving(bodyA) ? bodyA.velocityZ * dt : 0;
96
- const translationBX = isPhysics3DBodyMoving(bodyB) ? bodyB.velocityX * dt : 0;
97
- const translationBY = isPhysics3DBodyMoving(bodyB) ? bodyB.velocityY * dt : 0;
98
- const translationBZ = isPhysics3DBodyMoving(bodyB) ? bodyB.velocityZ * dt : 0;
99
147
  for (let i = 0; i < bodyA.colliders.length; i += 1) {
100
148
  for (let j = 0; j < bodyB.colliders.length; j += 1) {
101
149
  const colliderA = bodyA.colliders[i];
102
150
  const colliderB = bodyB.colliders[j];
103
- // A sensor reports overlaps and resolves nothing, so stopping the world at one would halt a
104
- // bullet on a trigger volume it should fly straight through.
151
+ if (!isPhysics3DColliderPairEnabled(colliderA, colliderB))
152
+ continue;
105
153
  if (colliderA.sensor || colliderB.sensor)
106
154
  continue;
107
- if (!isPhysics3DColliderPairEnabled(colliderA, colliderB))
155
+ if (!findPhysics3DColliderImpact(world, bodyA, bodyB, colliderA, colliderB, dt, false, scratch))
108
156
  continue;
109
- const angularTravelA = isPhysics3DBodyMoving(bodyA)
110
- ? Math.hypot(bodyA.angularVelocityX, bodyA.angularVelocityY, bodyA.angularVelocityZ) * dt
111
- : 0;
112
- const angularTravelB = isPhysics3DBodyMoving(bodyB)
113
- ? Math.hypot(bodyB.angularVelocityX, bodyB.angularVelocityY, bodyB.angularVelocityZ) * dt
114
- : 0;
115
- let candidate = null;
116
- let rotational = false;
117
- // Preserve the analytic translation sweep even while the body spins. Replacing it with angular
118
- // samples would let a fast, slightly rotating bullet cross a thin wall between those samples.
119
- if (sweepPhysics3DColliderShapes(colliderA.world, translationAX, translationAY, translationAZ, colliderB.world, translationBX, translationBY, translationBZ, scratch.linearImpact, 1) &&
120
- scratch.linearImpact.fraction > 0 &&
121
- isPhysics3DImpactApproaching(bodyA, bodyB, scratch.linearImpact)) {
122
- candidate = scratch.linearImpact;
123
- }
124
- if ((angularTravelA > 0 || angularTravelB > 0) &&
125
- world.config.maxCcdRotationSubsteps > 0 &&
126
- findPhysics3DRotationalImpact(bodyA, bodyB, colliderA, colliderB, dt, Math.max(angularTravelA, angularTravelB), world.config.maxCcdRotationSubsteps, scratch) &&
127
- scratch.rotationalImpact.fraction > 0 &&
128
- (candidate === null || scratch.rotationalImpact.fraction < candidate.fraction) &&
129
- isPhysics3DRotationalImpactApproaching(bodyA, bodyB, scratch.rotationalManifold, scratch)) {
130
- candidate = scratch.rotationalImpact;
131
- rotational = true;
132
- }
133
- if (candidate === null || candidate.fraction >= scratch.fraction)
157
+ const candidate = scratch.candidateRotational ? scratch.rotationalImpact : scratch.linearImpact;
158
+ if (candidate.fraction >= scratch.fraction)
134
159
  continue;
135
160
  scratch.fraction = candidate.fraction;
136
161
  scratch.bodyA = bodyA.index;
137
162
  scratch.bodyB = bodyB.index;
163
+ scratch.colliderA = i;
164
+ scratch.colliderB = j;
138
165
  scratch.normalX = candidate.normalX;
139
166
  scratch.normalY = candidate.normalY;
140
167
  scratch.normalZ = candidate.normalZ;
168
+ scratch.friction = mixPhysics3DFriction(colliderA.material.friction, colliderB.material.friction);
141
169
  scratch.restitution = mixPhysics3DRestitution(colliderA.material.restitution, colliderB.material.restitution);
142
- scratch.rotational = rotational;
143
- scratch.pointCount = rotational ? scratch.rotationalManifold.pointCount : 0;
144
- if (rotational) {
170
+ scratch.rotational = scratch.candidateRotational;
171
+ scratch.pointCount = scratch.rotational ? scratch.rotationalManifold.pointCount : 1;
172
+ if (scratch.rotational) {
145
173
  for (let point = 0; point < scratch.pointCount; point += 1) {
146
174
  const source = scratch.rotationalManifold.points[point];
147
175
  const offset = point * 3;
148
176
  scratch.points[offset] = source.x;
149
177
  scratch.points[offset + 1] = source.y;
150
178
  scratch.points[offset + 2] = source.z;
179
+ scratch.depths[point] = source.depth;
180
+ scratch.featureIds[point] = source.featureId;
151
181
  }
152
182
  }
183
+ else {
184
+ scratch.points[0] = candidate.x;
185
+ scratch.points[1] = candidate.y;
186
+ scratch.points[2] = candidate.z;
187
+ scratch.depths[0] = 0;
188
+ scratch.featureIds[0] = 0;
189
+ }
153
190
  }
154
191
  }
155
192
  }
193
+ // Sensor sweeps are evaluated only after the earliest solid TOI is known. Reporting them in the first
194
+ // pass can publish a trigger behind a nearer wall even though that wall stops the bullet before it ever
195
+ // reaches the trigger. Every sensor at or before the solid boundary is observable; later sensors are
196
+ // reconsidered from the post-impact state on the next bounded CCD sub-interval.
197
+ reportPhysics3DSensorImpactsBeforeFraction(world, dt, scratch.fraction, scratch);
156
198
  return scratch.bodyA >= 0;
157
199
  }
200
+ function reportPhysics3DSensorImpactsBeforeFraction(world, dt, maximumFraction, scratch) {
201
+ for (let pairIndex = 0; pairIndex < scratch.pairs.length; pairIndex += 1) {
202
+ const pair = scratch.pairs[pairIndex];
203
+ const first = world.bodyByIndex.get(pair.a);
204
+ const second = world.bodyByIndex.get(pair.b);
205
+ if (first === undefined || second === undefined)
206
+ continue;
207
+ const ordered = isPhysics3DPairOrdered(first.index, second.index);
208
+ const bodyA = ordered ? first : second;
209
+ const bodyB = ordered ? second : first;
210
+ if (!isPhysics3DCcdPairActive(bodyA, bodyB))
211
+ continue;
212
+ if (isPhysics3DPairJointSuppressed(world, bodyA.index, bodyB.index))
213
+ continue;
214
+ for (let colliderAIndex = 0; colliderAIndex < bodyA.colliders.length; colliderAIndex += 1) {
215
+ for (let colliderBIndex = 0; colliderBIndex < bodyB.colliders.length; colliderBIndex += 1) {
216
+ const colliderA = bodyA.colliders[colliderAIndex];
217
+ const colliderB = bodyB.colliders[colliderBIndex];
218
+ if (!colliderA.sensor && !colliderB.sensor)
219
+ continue;
220
+ if (!isPhysics3DColliderPairEnabled(colliderA, colliderB))
221
+ continue;
222
+ if (hasPhysics3DContactTransition(world.events.began, bodyA.index, bodyB.index, colliderAIndex, colliderBIndex)) {
223
+ continue;
224
+ }
225
+ if (!findPhysics3DColliderImpact(world, bodyA, bodyB, colliderA, colliderB, dt, true, scratch))
226
+ continue;
227
+ const candidate = scratch.candidateRotational ? scratch.rotationalImpact : scratch.linearImpact;
228
+ if (candidate.fraction > maximumFraction)
229
+ continue;
230
+ reportPhysics3DSensorImpact(world, bodyA, bodyB, colliderAIndex, colliderBIndex, colliderA, colliderB, candidate, scratch.candidateRotational, dt, scratch);
231
+ }
232
+ }
233
+ }
234
+ }
235
+ // Selects the earlier analytic-translation or sampled-rotation impact for one collider pair. Sensors
236
+ // accept any crossing because they generate no impulse; solids additionally require an approaching
237
+ // velocity so a grazing or separating touch cannot consume the chronological substep budget.
238
+ function findPhysics3DColliderImpact(world, bodyA, bodyB, colliderA, colliderB, dt, acceptNonApproaching, scratch) {
239
+ const movingA = isPhysics3DBodyMoving(bodyA);
240
+ const movingB = isPhysics3DBodyMoving(bodyB);
241
+ // Preserve the analytic translation sweep even while the body spins. Replacing it with angular
242
+ // samples would let a fast, slightly rotating bullet cross a thin wall between those samples.
243
+ const linearHit = sweepPhysics3DColliderShapes(colliderA.world, movingA ? bodyA.velocityX * dt : 0, movingA ? bodyA.velocityY * dt : 0, movingA ? bodyA.velocityZ * dt : 0, colliderB.world, movingB ? bodyB.velocityX * dt : 0, movingB ? bodyB.velocityY * dt : 0, movingB ? bodyB.velocityZ * dt : 0, scratch.linearImpact, 1) && scratch.linearImpact.fraction > 0;
244
+ const angularTravelA = movingA
245
+ ? Math.hypot(bodyA.angularVelocityX, bodyA.angularVelocityY, bodyA.angularVelocityZ) * dt
246
+ : 0;
247
+ const angularTravelB = movingB
248
+ ? Math.hypot(bodyB.angularVelocityX, bodyB.angularVelocityY, bodyB.angularVelocityZ) * dt
249
+ : 0;
250
+ const rotationalHit = (angularTravelA > 0 || angularTravelB > 0) &&
251
+ world.config.maxCcdRotationSubsteps > 0 &&
252
+ findPhysics3DRotationalImpact(bodyA, bodyB, colliderA, colliderB, dt, Math.max(angularTravelA, angularTravelB), world.config.maxCcdRotationSubsteps, scratch) &&
253
+ scratch.rotationalImpact.fraction > 0;
254
+ let found = false;
255
+ scratch.candidateRotational = false;
256
+ if (linearHit && (acceptNonApproaching || isPhysics3DImpactApproaching(bodyA, bodyB, scratch.linearImpact))) {
257
+ found = true;
258
+ }
259
+ if (rotationalHit &&
260
+ (!found || scratch.rotationalImpact.fraction < scratch.linearImpact.fraction) &&
261
+ (acceptNonApproaching || isPhysics3DRotationalImpactApproaching(bodyA, bodyB, scratch.rotationalManifold, scratch))) {
262
+ found = true;
263
+ scratch.candidateRotational = true;
264
+ }
265
+ return found;
266
+ }
158
267
  // Rotation changes a convex shape rather than translating a fixed one, so collision's analytic linear
159
268
  // sweep cannot answer it. Sample at a bounded angular increment, then bisect the first overlapping
160
269
  // interval. The hard cap keeps multi-revolution bodies deterministic in cost; zero selects the linear
@@ -164,7 +273,7 @@ function findPhysics3DRotationalImpact(bodyA, bodyB, colliderA, colliderB, dt, a
164
273
  // first sample as a new impact infinitesimally after zero and consumes CCD budget without advancing.
165
274
  if (testPhysics3DColliderOverlapAtFraction(bodyA, bodyB, colliderA, colliderB, dt, 0, scratch))
166
275
  return false;
167
- const substeps = Math.min(maxSubsteps, Math.max(1, Math.ceil(angularTravel / CCD_ROTATION_INCREMENT)));
276
+ const substeps = getPhysics3DRotationSampleCount(angularTravel, maxSubsteps);
168
277
  let lowerFraction = 0;
169
278
  for (let sample = 1; sample <= substeps; sample += 1) {
170
279
  const upperFraction = sample / substeps;
@@ -205,6 +314,11 @@ function findPhysics3DRotationalImpact(bodyA, bodyB, colliderA, colliderB, dt, a
205
314
  }
206
315
  return false;
207
316
  }
317
+ function getPhysics3DRotationSampleCount(angularTravel, maxSubsteps) {
318
+ if (!(angularTravel > 0) || maxSubsteps <= 0)
319
+ return 0;
320
+ return Math.min(maxSubsteps, Math.max(1, Math.ceil(angularTravel / CCD_ROTATION_INCREMENT)));
321
+ }
208
322
  function testPhysics3DColliderOverlapAtFraction(bodyA, bodyB, colliderA, colliderB, dt, fraction, scratch) {
209
323
  savePhysics3DBodyPose(bodyA, scratch.poseA);
210
324
  savePhysics3DBodyPose(bodyB, scratch.poseB);
@@ -286,6 +400,171 @@ function getRelativeNormalVelocity(bodyA, bodyB, normalX, normalY, normalZ) {
286
400
  (bodyA.velocityY - bodyB.velocityY) * normalY +
287
401
  (bodyA.velocityZ - bodyB.velocityZ) * normalZ);
288
402
  }
403
+ // Publishes a solid TOI through the ordinary persistent-contact lane. Appending is deliberate: contact
404
+ // constraints prepared earlier in the interval store list indices, so inserting into canonical order
405
+ // here would retarget those constraints midway through their solve. The step restores canonical order
406
+ // after its position pass, once those indices have expired.
407
+ function writePhysics3DImpactContact(world, bodyA, bodyB, scratch) {
408
+ let contact = null;
409
+ for (let index = 0; index < world.contacts.length; index += 1) {
410
+ const existing = world.contacts[index];
411
+ if (existing.bodyA === scratch.bodyA &&
412
+ existing.bodyB === scratch.bodyB &&
413
+ existing.colliderA === scratch.colliderA &&
414
+ existing.colliderB === scratch.colliderB) {
415
+ contact = existing;
416
+ break;
417
+ }
418
+ }
419
+ scratch.contactCreated = contact === null;
420
+ if (contact === null) {
421
+ contact = {
422
+ bodyA: scratch.bodyA,
423
+ bodyB: scratch.bodyB,
424
+ colliderA: scratch.colliderA,
425
+ colliderB: scratch.colliderB,
426
+ normalX: scratch.normalX,
427
+ normalY: scratch.normalY,
428
+ normalZ: scratch.normalZ,
429
+ pointCount: 0,
430
+ points: [],
431
+ friction: scratch.friction,
432
+ restitution: scratch.restitution,
433
+ enabled: true,
434
+ sensor: false,
435
+ touching: true,
436
+ };
437
+ world.contacts.push(contact);
438
+ world.events.began.push(contact);
439
+ }
440
+ contact.normalX = scratch.normalX;
441
+ contact.normalY = scratch.normalY;
442
+ contact.normalZ = scratch.normalZ;
443
+ contact.touching = true;
444
+ while (contact.points.length < scratch.pointCount)
445
+ contact.points.push(createPhysics3DContactPoint());
446
+ writeRigidBody3DWorldCenter(bodyA, scratch.centerA);
447
+ writeRigidBody3DWorldCenter(bodyB, scratch.centerB);
448
+ for (let pointIndex = 0; pointIndex < scratch.pointCount; pointIndex += 1) {
449
+ const offset = pointIndex * 3;
450
+ const point = contact.points[pointIndex];
451
+ point.x = scratch.points[offset];
452
+ point.y = scratch.points[offset + 1];
453
+ point.z = scratch.points[offset + 2];
454
+ point.depth = scratch.depths[pointIndex];
455
+ point.featureId = scratch.featureIds[pointIndex];
456
+ point.rAX = point.x - scratch.centerA[0];
457
+ point.rAY = point.y - scratch.centerA[1];
458
+ point.rAZ = point.z - scratch.centerA[2];
459
+ point.rBX = point.x - scratch.centerB[0];
460
+ point.rBY = point.y - scratch.centerB[1];
461
+ point.rBZ = point.z - scratch.centerB[2];
462
+ }
463
+ contact.pointCount = scratch.pointCount;
464
+ return contact;
465
+ }
466
+ // A sensor impact enters the ordinary persistent-contact lane at TOI. It cannot stop the body, and only
467
+ // a later pose can prove whether the body crossed the whole volume or ended inside it, so the next
468
+ // contact-intake pass makes that decision — a later solver substep or the next public step. A pass-through
469
+ // emits `ended` there with the SAME record identity; a body that remains overlapping simply keeps the
470
+ // record. Sensors invoke neither contact hook and resolve no impulse, matching the discrete sensor
471
+ // contract.
472
+ function reportPhysics3DSensorImpact(world, bodyA, bodyB, colliderAIndex, colliderBIndex, colliderA, colliderB, impact, rotational, dt, scratch) {
473
+ if (hasPhysics3DContactTransition(world.events.began, bodyA.index, bodyB.index, colliderAIndex, colliderBIndex)) {
474
+ return;
475
+ }
476
+ savePhysics3DBodyPose(bodyA, scratch.poseA);
477
+ savePhysics3DBodyPose(bodyB, scratch.poseB);
478
+ try {
479
+ integrateRigidBody3DPose(bodyA, dt * impact.fraction);
480
+ integrateRigidBody3DPose(bodyB, dt * impact.fraction);
481
+ writeRigidBody3DWorldCenter(bodyA, scratch.centerA);
482
+ writeRigidBody3DWorldCenter(bodyB, scratch.centerB);
483
+ }
484
+ finally {
485
+ restorePhysics3DBodyPose(bodyA, scratch.poseA);
486
+ restorePhysics3DBodyPose(bodyB, scratch.poseB);
487
+ }
488
+ const pointCount = rotational ? scratch.rotationalManifold.pointCount : 1;
489
+ const contact = {
490
+ bodyA: bodyA.index,
491
+ bodyB: bodyB.index,
492
+ colliderA: colliderAIndex,
493
+ colliderB: colliderBIndex,
494
+ normalX: impact.normalX,
495
+ normalY: impact.normalY,
496
+ normalZ: impact.normalZ,
497
+ pointCount,
498
+ points: [],
499
+ friction: mixPhysics3DFriction(colliderA.material.friction, colliderB.material.friction),
500
+ restitution: mixPhysics3DRestitution(colliderA.material.restitution, colliderB.material.restitution),
501
+ enabled: true,
502
+ sensor: true,
503
+ touching: true,
504
+ };
505
+ for (let pointIndex = 0; pointIndex < pointCount; pointIndex += 1) {
506
+ const source = rotational ? scratch.rotationalManifold.points[pointIndex] : impact;
507
+ const point = createPhysics3DContactPoint();
508
+ point.x = source.x;
509
+ point.y = source.y;
510
+ point.z = source.z;
511
+ point.depth = rotational ? scratch.rotationalManifold.points[pointIndex].depth : 0;
512
+ point.featureId = rotational ? scratch.rotationalManifold.points[pointIndex].featureId : 0;
513
+ point.rAX = point.x - scratch.centerA[0];
514
+ point.rAY = point.y - scratch.centerA[1];
515
+ point.rAZ = point.z - scratch.centerA[2];
516
+ point.rBX = point.x - scratch.centerB[0];
517
+ point.rBY = point.y - scratch.centerB[1];
518
+ point.rBZ = point.z - scratch.centerB[2];
519
+ contact.points.push(point);
520
+ }
521
+ world.contacts.push(contact);
522
+ world.events.began.push(contact);
523
+ }
524
+ function hasPhysics3DContactTransition(contacts, bodyA, bodyB, colliderA, colliderB) {
525
+ for (let index = 0; index < contacts.length; index += 1) {
526
+ const contact = contacts[index];
527
+ if (contact.bodyA === bodyA &&
528
+ contact.bodyB === bodyB &&
529
+ contact.colliderA === colliderA &&
530
+ contact.colliderB === colliderB) {
531
+ return true;
532
+ }
533
+ }
534
+ return false;
535
+ }
536
+ // The ordinary pre-solve hook has already run before pose integration. A contact discovered later by
537
+ // CCD gets exactly one equivalent invocation at TOI, before its impact impulse. Invalid writes and
538
+ // throws restore the four mutable override fields just like the ordinary lane. Because the step has
539
+ // necessarily advanced to discover this TOI, an exception leaves poses at the impact and retains the new
540
+ // contact/event rather than rolling the entire simulation back; that exception boundary is part of the
541
+ // CCD hook contract.
542
+ function runPhysics3DImpactPreSolveHook(world, contact) {
543
+ const hook = world.contactHooks.preSolve;
544
+ if (hook === null)
545
+ return;
546
+ const friction = contact.friction;
547
+ const restitution = contact.restitution;
548
+ const enabled = contact.enabled;
549
+ const sensor = contact.sensor;
550
+ try {
551
+ hook(world, contact);
552
+ }
553
+ catch (error) {
554
+ restorePhysics3DImpactHookFields(contact, friction, restitution, enabled, sensor);
555
+ throw error;
556
+ }
557
+ if (!isPhysics3DContactValid(contact)) {
558
+ restorePhysics3DImpactHookFields(contact, friction, restitution, enabled, sensor);
559
+ throw new Error('Physics3D pre-solve hook produced invalid contact state');
560
+ }
561
+ }
562
+ function restorePhysics3DImpactHookFields(contact, friction, restitution, enabled, sensor) {
563
+ contact.friction = friction;
564
+ contact.restitution = restitution;
565
+ contact.enabled = enabled;
566
+ contact.sensor = sensor;
567
+ }
289
568
  // Removes the approach velocity with a single LINEAR normal impulse through the centres of mass.
290
569
  //
291
570
  // NO LEVER ARM, and that omission is deliberate rather than a shortcut taken for speed. The impact
@@ -299,12 +578,12 @@ function getRelativeNormalVelocity(bodyA, bodyB, normalX, normalY, normalZ) {
299
578
  // mass collapsed, and the impulse meant to stop a 600-unit-per-second bullet changed its velocity by
300
579
  // 0.05. It tunnelled anyway, through a path that ran and reported success.
301
580
  //
302
- // So this arrests the approach and nothing else. The pair is left touching and awake, and the ORDINARY
303
- // contact generation on the next step produces a real MANIFOLD — several points whose lever arms cancel
304
- // for a square hit and do not for a glancing one — applying the torque, friction, and warm starting a
305
- // rotating impact needs. What continuous collision has to guarantee is only that the body is still on the
306
- // near side for that step to find it. Giving the impact its own angular response means giving it a
307
- // manifold, not a better point.
581
+ // The normal response therefore stays linear. Impact-time friction is linear too: it removes centre-of-
582
+ // mass tangential motion under the same Coulomb cone the ordinary solver uses, but invents no torque from
583
+ // the single witness. A rotational impact has a real manifold from its overlap sample and resolves both
584
+ // normal and friction impulses at those points, where the lever arms are supported by actual geometry.
585
+ // In both cases a persistent contact is published at TOI before resolution, so begin events and contact
586
+ // hooks observe the impact in the step where it happened rather than one frame later.
308
587
  function resolvePhysics3DImpact(world, scratch) {
309
588
  const bodyA = world.bodyByIndex.get(scratch.bodyA);
310
589
  const bodyB = world.bodyByIndex.get(scratch.bodyB);
@@ -312,8 +591,13 @@ function resolvePhysics3DImpact(world, scratch) {
312
591
  return;
313
592
  wakePhysics3DImpactBody(bodyA);
314
593
  wakePhysics3DImpactBody(bodyB);
594
+ const contact = writePhysics3DImpactContact(world, bodyA, bodyB, scratch);
595
+ if (scratch.contactCreated)
596
+ runPhysics3DImpactPreSolveHook(world, contact);
597
+ if (!contact.enabled || contact.sensor)
598
+ return;
315
599
  if (scratch.rotational && scratch.pointCount > 0) {
316
- resolvePhysics3DRotationalImpact(world, bodyA, bodyB, scratch);
600
+ resolvePhysics3DRotationalImpact(world, bodyA, bodyB, contact, scratch);
317
601
  return;
318
602
  }
319
603
  const approach = getRelativeNormalVelocity(bodyA, bodyB, scratch.normalX, scratch.normalY, scratch.normalZ);
@@ -322,7 +606,7 @@ function resolvePhysics3DImpact(world, scratch) {
322
606
  const totalInverseMass = bodyA.inverseMass + bodyB.inverseMass;
323
607
  if (!(totalInverseMass > 0))
324
608
  return;
325
- const restitution = approach < -world.config.sequentialImpulse.restitutionThreshold ? scratch.restitution : 0;
609
+ const restitution = approach < -world.config.sequentialImpulse.restitutionThreshold ? contact.restitution : 0;
326
610
  const magnitude = (-(1 + restitution) * approach) / totalInverseMass;
327
611
  bodyA.velocityX += scratch.normalX * magnitude * bodyA.inverseMass;
328
612
  bodyA.velocityY += scratch.normalY * magnitude * bodyA.inverseMass;
@@ -330,16 +614,41 @@ function resolvePhysics3DImpact(world, scratch) {
330
614
  bodyB.velocityX -= scratch.normalX * magnitude * bodyB.inverseMass;
331
615
  bodyB.velocityY -= scratch.normalY * magnitude * bodyB.inverseMass;
332
616
  bodyB.velocityZ -= scratch.normalZ * magnitude * bodyB.inverseMass;
617
+ const relativeX = bodyA.velocityX - bodyB.velocityX;
618
+ const relativeY = bodyA.velocityY - bodyB.velocityY;
619
+ const relativeZ = bodyA.velocityZ - bodyB.velocityZ;
620
+ const normalVelocity = relativeX * scratch.normalX + relativeY * scratch.normalY + relativeZ * scratch.normalZ;
621
+ const tangentVelocityX = relativeX - scratch.normalX * normalVelocity;
622
+ const tangentVelocityY = relativeY - scratch.normalY * normalVelocity;
623
+ const tangentVelocityZ = relativeZ - scratch.normalZ * normalVelocity;
624
+ const tangentSpeed = Math.sqrt(tangentVelocityX * tangentVelocityX + tangentVelocityY * tangentVelocityY + tangentVelocityZ * tangentVelocityZ);
625
+ if (tangentSpeed <= 0 || contact.friction <= 0)
626
+ return;
627
+ const desiredMagnitude = tangentSpeed / totalInverseMass;
628
+ const frictionMagnitude = Math.min(desiredMagnitude, contact.friction * magnitude);
629
+ const scale = -frictionMagnitude / tangentSpeed;
630
+ const impulseX = tangentVelocityX * scale;
631
+ const impulseY = tangentVelocityY * scale;
632
+ const impulseZ = tangentVelocityZ * scale;
633
+ bodyA.velocityX += impulseX * bodyA.inverseMass;
634
+ bodyA.velocityY += impulseY * bodyA.inverseMass;
635
+ bodyA.velocityZ += impulseZ * bodyA.inverseMass;
636
+ bodyB.velocityX -= impulseX * bodyB.inverseMass;
637
+ bodyB.velocityY -= impulseY * bodyB.inverseMass;
638
+ bodyB.velocityZ -= impulseZ * bodyB.inverseMass;
333
639
  }
334
- function resolvePhysics3DRotationalImpact(world, bodyA, bodyB, scratch) {
640
+ function resolvePhysics3DRotationalImpact(world, bodyA, bodyB, contact, scratch) {
335
641
  writeRigidBody3DWorldCenter(bodyA, scratch.centerA);
336
642
  writeRigidBody3DWorldCenter(bodyB, scratch.centerB);
643
+ writePhysics3DImpactFrictionBasis(scratch.normalX, scratch.normalY, scratch.normalZ, scratch);
337
644
  for (let point = 0; point < scratch.pointCount; point += 1) {
338
645
  scratch.normalImpulses[point] = 0;
646
+ scratch.tangentImpulses0[point] = 0;
647
+ scratch.tangentImpulses1[point] = 0;
339
648
  const offset = point * 3;
340
649
  const approach = getRelativePointNormalVelocity(bodyA, bodyB, scratch.points[offset] - scratch.centerA[0], scratch.points[offset + 1] - scratch.centerA[1], scratch.points[offset + 2] - scratch.centerA[2], scratch.points[offset] - scratch.centerB[0], scratch.points[offset + 1] - scratch.centerB[1], scratch.points[offset + 2] - scratch.centerB[2], scratch.normalX, scratch.normalY, scratch.normalZ);
341
650
  scratch.velocityBiases[point] =
342
- approach < -world.config.sequentialImpulse.restitutionThreshold ? -scratch.restitution * approach : 0;
651
+ approach < -world.config.sequentialImpulse.restitutionThreshold ? -contact.restitution * approach : 0;
343
652
  }
344
653
  for (let iteration = 0; iteration < ROTATIONAL_IMPACT_ITERATIONS; iteration += 1) {
345
654
  for (let point = 0; point < scratch.pointCount; point += 1) {
@@ -357,9 +666,58 @@ function resolvePhysics3DRotationalImpact(world, bodyA, bodyB, scratch) {
357
666
  scratch.normalImpulses[point] = impulse;
358
667
  applyPhysics3DImpactImpulse(bodyA, rAX, rAY, rAZ, scratch.normalX * delta, scratch.normalY * delta, scratch.normalZ * delta);
359
668
  applyPhysics3DImpactImpulse(bodyB, rBX, rBY, rBZ, -scratch.normalX * delta, -scratch.normalY * delta, -scratch.normalZ * delta);
669
+ const maxFriction = contact.friction * impulse;
670
+ const tangentVelocity0 = getRelativePointNormalVelocity(bodyA, bodyB, rAX, rAY, rAZ, rBX, rBY, rBZ, scratch.tangent0X, scratch.tangent0Y, scratch.tangent0Z);
671
+ const tangentMass0 = getPhysics3DImpactEffectiveMass(bodyA, bodyB, rAX, rAY, rAZ, rBX, rBY, rBZ, scratch.tangent0X, scratch.tangent0Y, scratch.tangent0Z);
672
+ let tangentImpulse0 = scratch.tangentImpulses0[point] - tangentVelocity0 * tangentMass0;
673
+ const tangentVelocity1 = getRelativePointNormalVelocity(bodyA, bodyB, rAX, rAY, rAZ, rBX, rBY, rBZ, scratch.tangent1X, scratch.tangent1Y, scratch.tangent1Z);
674
+ const tangentMass1 = getPhysics3DImpactEffectiveMass(bodyA, bodyB, rAX, rAY, rAZ, rBX, rBY, rBZ, scratch.tangent1X, scratch.tangent1Y, scratch.tangent1Z);
675
+ let tangentImpulse1 = scratch.tangentImpulses1[point] - tangentVelocity1 * tangentMass1;
676
+ const tangentMagnitude = Math.sqrt(tangentImpulse0 * tangentImpulse0 + tangentImpulse1 * tangentImpulse1);
677
+ if (tangentMagnitude > maxFriction) {
678
+ const frictionScale = maxFriction / tangentMagnitude;
679
+ tangentImpulse0 *= frictionScale;
680
+ tangentImpulse1 *= frictionScale;
681
+ }
682
+ const deltaTangent0 = tangentImpulse0 - scratch.tangentImpulses0[point];
683
+ const deltaTangent1 = tangentImpulse1 - scratch.tangentImpulses1[point];
684
+ scratch.tangentImpulses0[point] = tangentImpulse0;
685
+ scratch.tangentImpulses1[point] = tangentImpulse1;
686
+ const frictionX = scratch.tangent0X * deltaTangent0 + scratch.tangent1X * deltaTangent1;
687
+ const frictionY = scratch.tangent0Y * deltaTangent0 + scratch.tangent1Y * deltaTangent1;
688
+ const frictionZ = scratch.tangent0Z * deltaTangent0 + scratch.tangent1Z * deltaTangent1;
689
+ applyPhysics3DImpactImpulse(bodyA, rAX, rAY, rAZ, frictionX, frictionY, frictionZ);
690
+ applyPhysics3DImpactImpulse(bodyB, rBX, rBY, rBZ, -frictionX, -frictionY, -frictionZ);
360
691
  }
361
692
  }
362
693
  }
694
+ function writePhysics3DImpactFrictionBasis(normalX, normalY, normalZ, out) {
695
+ let seedX = 0;
696
+ let seedY = 0;
697
+ let seedZ = 0;
698
+ if (Math.abs(normalX) < IMPACT_AXIS_SELECTION_THRESHOLD)
699
+ seedX = 1;
700
+ else if (Math.abs(normalY) < IMPACT_AXIS_SELECTION_THRESHOLD)
701
+ seedY = 1;
702
+ else
703
+ seedZ = 1;
704
+ let tangent0X = normalY * seedZ - normalZ * seedY;
705
+ let tangent0Y = normalZ * seedX - normalX * seedZ;
706
+ let tangent0Z = normalX * seedY - normalY * seedX;
707
+ const length = Math.sqrt(tangent0X * tangent0X + tangent0Y * tangent0Y + tangent0Z * tangent0Z);
708
+ if (length > 0) {
709
+ const inverseLength = 1 / length;
710
+ tangent0X *= inverseLength;
711
+ tangent0Y *= inverseLength;
712
+ tangent0Z *= inverseLength;
713
+ }
714
+ out.tangent0X = tangent0X;
715
+ out.tangent0Y = tangent0Y;
716
+ out.tangent0Z = tangent0Z;
717
+ out.tangent1X = normalY * tangent0Z - normalZ * tangent0Y;
718
+ out.tangent1Y = normalZ * tangent0X - normalX * tangent0Z;
719
+ out.tangent1Z = normalX * tangent0Y - normalY * tangent0X;
720
+ }
363
721
  function getRelativePointNormalVelocity(bodyA, bodyB, rAX, rAY, rAZ, rBX, rBY, rBZ, normalX, normalY, normalZ) {
364
722
  const pointAX = bodyA.velocityX + bodyA.angularVelocityY * rAZ - bodyA.angularVelocityZ * rAY;
365
723
  const pointAY = bodyA.velocityY + bodyA.angularVelocityZ * rAX - bodyA.angularVelocityX * rAZ;
@@ -413,8 +771,9 @@ function wakePhysics3DImpactBody(body) {
413
771
  // Below this the pair is grazing rather than approaching, and stopping the world for it would halt a
414
772
  // body that was never going to collide.
415
773
  const APPROACH_EPSILON = 1e-9;
416
- const CCD_ROTATION_INCREMENT = Math.PI / 180;
774
+ const CCD_ROTATION_INCREMENT = DEG_TO_RAD;
417
775
  const CCD_ROTATION_BISECTION_ITERATIONS = 12;
776
+ const IMPACT_AXIS_SELECTION_THRESHOLD = 0.5773502691896258;
418
777
  const ROTATIONAL_IMPACT_ITERATIONS = 4;
419
778
  const impactTensor = [0, 0, 0, 0, 0, 0];
420
779
  const impactVector = [0, 0, 0];
@@ -429,16 +788,31 @@ function createPhysics3DContinuousScratch() {
429
788
  fraction: 0,
430
789
  bodyA: -1,
431
790
  bodyB: -1,
791
+ colliderA: -1,
792
+ colliderB: -1,
432
793
  normalX: 0,
433
794
  normalY: 0,
434
795
  normalZ: 0,
796
+ friction: 0,
435
797
  restitution: 0,
436
798
  rotational: false,
799
+ candidateRotational: false,
800
+ contactCreated: false,
437
801
  rotationalManifold: createCollisionContactManifold3D(),
438
802
  pointCount: 0,
439
803
  points: new Array(12).fill(0),
804
+ depths: new Array(4).fill(0),
805
+ featureIds: new Array(4).fill(0),
440
806
  normalImpulses: new Array(4).fill(0),
807
+ tangentImpulses0: new Array(4).fill(0),
808
+ tangentImpulses1: new Array(4).fill(0),
441
809
  velocityBiases: new Array(4).fill(0),
810
+ tangent0X: 0,
811
+ tangent0Y: 0,
812
+ tangent0Z: 0,
813
+ tangent1X: 0,
814
+ tangent1Y: 0,
815
+ tangent1Z: 0,
442
816
  centerA: [0, 0, 0],
443
817
  centerB: [0, 0, 0],
444
818
  candidateCenterA: [0, 0, 0],
@@ -451,4 +825,5 @@ function releasePhysics3DContinuousScratch(scratch) {
451
825
  physics3DContinuousScratchPool.push(scratch);
452
826
  }
453
827
  const physics3DContinuousScratchPool = [createPhysics3DContinuousScratch()];
828
+ const integratingPhysics3DWorlds = new WeakSet();
454
829
  //# sourceMappingURL=continuous.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"continuous.js","sourceRoot":"","sources":["../src/continuous.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"continuous.js","sourceRoot":"","sources":["../src/continuous.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -15,7 +15,7 @@ export { stepPhysics3D, stepPhysics3DInterval } from './step';
15
15
  export { addPhysics3DBody, addPhysics3DCollider, applyPhysics3DForce, applyPhysics3DForceAtPoint, applyPhysics3DLinearImpulse, applyPhysics3DLinearImpulseAtPoint, applyPhysics3DTorque, createPhysics3DCollider, createPhysics3DSequentialImpulseConfig, createPhysics3DSolverConfig, createPhysics3DWorld, createRigidBody3D, findPhysics3DBody, hydratePhysics3DWorld, invalidatePhysics3DCollider, Physics3DWorldVersion, removePhysics3DBody, removePhysics3DCollider, setPhysics3DBodyBullet, setPhysics3DBodyFixedRotation, setPhysics3DBodySleepEnabled, setPhysics3DBodyTransform, setPhysics3DBodyType, wakePhysics3DBody, writeRigidBody3DWorldCenter, } from './world';
16
16
  export { createPhysics3DQueryFilter, createPhysics3DQueryResult, createPhysics3DRayResult, createPhysics3DShapeCastResult, queryPhysics3DPoint, queryPhysics3DRay, queryPhysics3DRayClosest, queryPhysics3DRegion, queryPhysics3DShapeCast, } from './worldQueries';
17
17
  export { createPhysics3DDebugGeometry, writePhysics3DDebugGeometry } from './debugGeometry';
18
- export { hasActivePhysics3DBullet, integratePhysics3DContinuous } from './continuous';
18
+ export { hasActivePhysics3DBullet, integratePhysics3DContinuous, writePhysics3DRotationalCcdEnvelope, } from './continuous';
19
19
  export { breakPhysics3DJoint, evaluatePhysics3DJointBreakage, isPhysics3DJointBreakable } from './jointBreakage';
20
20
  export { accumulatePhysics3DJointRowReaction, clearPhysics3DJointReaction, createPhysics3DJointReaction, getPhysics3DJointReactionForce, getPhysics3DJointReactionTorque, writePhysics3DJointReaction, } from './jointReaction';
21
21
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,4BAA4B,EAC5B,8BAA8B,GAC/B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AACjF,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACnH,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,8BAA8B,EAAE,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EACL,iCAAiC,EACjC,6BAA6B,EAC7B,4BAA4B,EAC5B,yBAAyB,EACzB,+BAA+B,EAC/B,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,wBAAwB,EACxB,4BAA4B,EAC5B,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,iCAAiC,EACjC,6BAA6B,EAC7B,4BAA4B,EAC5B,yBAAyB,EACzB,+BAA+B,EAC/B,yBAAyB,EACzB,0BAA0B,EAC1B,+BAA+B,EAC/B,2BAA2B,EAC3B,0BAA0B,EAC1B,uBAAuB,EACvB,6BAA6B,EAC7B,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,wBAAwB,EACxB,2BAA2B,EAC3B,+BAA+B,EAC/B,4BAA4B,EAC5B,gCAAgC,EAChC,gCAAgC,EAChC,kCAAkC,EAClC,8BAA8B,EAC9B,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAC3E,OAAO,EAAE,oCAAoC,EAAE,MAAM,wCAAwC,CAAC;AAC9F,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,0BAA0B,EAC1B,2BAA2B,EAC3B,kCAAkC,EAClC,oBAAoB,EACpB,uBAAuB,EACvB,sCAAsC,EACtC,2BAA2B,EAC3B,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,2BAA2B,EAC3B,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,EACtB,6BAA6B,EAC7B,4BAA4B,EAC5B,yBAAyB,EACzB,oBAAoB,EACpB,iBAAiB,EACjB,2BAA2B,GAC5B,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,wBAAwB,EACxB,8BAA8B,EAC9B,mBAAmB,EACnB,iBAAiB,EACjB,wBAAwB,EACxB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,4BAA4B,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AAEtF,OAAO,EAAE,mBAAmB,EAAE,8BAA8B,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AACjH,OAAO,EACL,mCAAmC,EACnC,2BAA2B,EAC3B,4BAA4B,EAC5B,8BAA8B,EAC9B,+BAA+B,EAC/B,2BAA2B,GAC5B,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,4BAA4B,EAC5B,8BAA8B,GAC/B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AACjF,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACnH,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,8BAA8B,EAAE,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EACL,iCAAiC,EACjC,6BAA6B,EAC7B,4BAA4B,EAC5B,yBAAyB,EACzB,+BAA+B,EAC/B,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,wBAAwB,EACxB,4BAA4B,EAC5B,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,iCAAiC,EACjC,6BAA6B,EAC7B,4BAA4B,EAC5B,yBAAyB,EACzB,+BAA+B,EAC/B,yBAAyB,EACzB,0BAA0B,EAC1B,+BAA+B,EAC/B,2BAA2B,EAC3B,0BAA0B,EAC1B,uBAAuB,EACvB,6BAA6B,EAC7B,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,wBAAwB,EACxB,2BAA2B,EAC3B,+BAA+B,EAC/B,4BAA4B,EAC5B,gCAAgC,EAChC,gCAAgC,EAChC,kCAAkC,EAClC,8BAA8B,EAC9B,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAC3E,OAAO,EAAE,oCAAoC,EAAE,MAAM,wCAAwC,CAAC;AAC9F,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,0BAA0B,EAC1B,2BAA2B,EAC3B,kCAAkC,EAClC,oBAAoB,EACpB,uBAAuB,EACvB,sCAAsC,EACtC,2BAA2B,EAC3B,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,2BAA2B,EAC3B,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,EACtB,6BAA6B,EAC7B,4BAA4B,EAC5B,yBAAyB,EACzB,oBAAoB,EACpB,iBAAiB,EACjB,2BAA2B,GAC5B,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,wBAAwB,EACxB,8BAA8B,EAC9B,mBAAmB,EACnB,iBAAiB,EACjB,wBAAwB,EACxB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,4BAA4B,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EACL,wBAAwB,EACxB,4BAA4B,EAC5B,mCAAmC,GACpC,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,mBAAmB,EAAE,8BAA8B,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AACjH,OAAO,EACL,mCAAmC,EACnC,2BAA2B,EAC3B,4BAA4B,EAC5B,8BAA8B,EAC9B,+BAA+B,EAC/B,2BAA2B,GAC5B,MAAM,iBAAiB,CAAC"}
package/dist/index.js CHANGED
@@ -15,7 +15,7 @@ export { stepPhysics3D, stepPhysics3DInterval } from './step';
15
15
  export { addPhysics3DBody, addPhysics3DCollider, applyPhysics3DForce, applyPhysics3DForceAtPoint, applyPhysics3DLinearImpulse, applyPhysics3DLinearImpulseAtPoint, applyPhysics3DTorque, createPhysics3DCollider, createPhysics3DSequentialImpulseConfig, createPhysics3DSolverConfig, createPhysics3DWorld, createRigidBody3D, findPhysics3DBody, hydratePhysics3DWorld, invalidatePhysics3DCollider, Physics3DWorldVersion, removePhysics3DBody, removePhysics3DCollider, setPhysics3DBodyBullet, setPhysics3DBodyFixedRotation, setPhysics3DBodySleepEnabled, setPhysics3DBodyTransform, setPhysics3DBodyType, wakePhysics3DBody, writeRigidBody3DWorldCenter, } from './world';
16
16
  export { createPhysics3DQueryFilter, createPhysics3DQueryResult, createPhysics3DRayResult, createPhysics3DShapeCastResult, queryPhysics3DPoint, queryPhysics3DRay, queryPhysics3DRayClosest, queryPhysics3DRegion, queryPhysics3DShapeCast, } from './worldQueries';
17
17
  export { createPhysics3DDebugGeometry, writePhysics3DDebugGeometry } from './debugGeometry';
18
- export { hasActivePhysics3DBullet, integratePhysics3DContinuous } from './continuous';
18
+ export { hasActivePhysics3DBullet, integratePhysics3DContinuous, writePhysics3DRotationalCcdEnvelope, } from './continuous';
19
19
  export { breakPhysics3DJoint, evaluatePhysics3DJointBreakage, isPhysics3DJointBreakable } from './jointBreakage';
20
20
  export { accumulatePhysics3DJointRowReaction, clearPhysics3DJointReaction, createPhysics3DJointReaction, getPhysics3DJointReactionForce, getPhysics3DJointReactionTorque, writePhysics3DJointReaction, } from './jointReaction';
21
21
  //# 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,wBAAwB,EACxB,4BAA4B,EAC5B,8BAA8B,GAC/B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AACjF,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACnH,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,8BAA8B,EAAE,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EACL,iCAAiC,EACjC,6BAA6B,EAC7B,4BAA4B,EAC5B,yBAAyB,EACzB,+BAA+B,EAC/B,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,wBAAwB,EACxB,4BAA4B,EAC5B,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,iCAAiC,EACjC,6BAA6B,EAC7B,4BAA4B,EAC5B,yBAAyB,EACzB,+BAA+B,EAC/B,yBAAyB,EACzB,0BAA0B,EAC1B,+BAA+B,EAC/B,2BAA2B,EAC3B,0BAA0B,EAC1B,uBAAuB,EACvB,6BAA6B,EAC7B,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,wBAAwB,EACxB,2BAA2B,EAC3B,+BAA+B,EAC/B,4BAA4B,EAC5B,gCAAgC,EAChC,gCAAgC,EAChC,kCAAkC,EAClC,8BAA8B,EAC9B,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAC3E,OAAO,EAAE,oCAAoC,EAAE,MAAM,wCAAwC,CAAC;AAC9F,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,0BAA0B,EAC1B,2BAA2B,EAC3B,kCAAkC,EAClC,oBAAoB,EACpB,uBAAuB,EACvB,sCAAsC,EACtC,2BAA2B,EAC3B,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,2BAA2B,EAC3B,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,EACtB,6BAA6B,EAC7B,4BAA4B,EAC5B,yBAAyB,EACzB,oBAAoB,EACpB,iBAAiB,EACjB,2BAA2B,GAC5B,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,wBAAwB,EACxB,8BAA8B,EAC9B,mBAAmB,EACnB,iBAAiB,EACjB,wBAAwB,EACxB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,4BAA4B,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AAEtF,OAAO,EAAE,mBAAmB,EAAE,8BAA8B,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AACjH,OAAO,EACL,mCAAmC,EACnC,2BAA2B,EAC3B,4BAA4B,EAC5B,8BAA8B,EAC9B,+BAA+B,EAC/B,2BAA2B,GAC5B,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,4BAA4B,EAC5B,8BAA8B,GAC/B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AACjF,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACnH,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,8BAA8B,EAAE,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EACL,iCAAiC,EACjC,6BAA6B,EAC7B,4BAA4B,EAC5B,yBAAyB,EACzB,+BAA+B,EAC/B,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,wBAAwB,EACxB,4BAA4B,EAC5B,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,iCAAiC,EACjC,6BAA6B,EAC7B,4BAA4B,EAC5B,yBAAyB,EACzB,+BAA+B,EAC/B,yBAAyB,EACzB,0BAA0B,EAC1B,+BAA+B,EAC/B,2BAA2B,EAC3B,0BAA0B,EAC1B,uBAAuB,EACvB,6BAA6B,EAC7B,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,wBAAwB,EACxB,2BAA2B,EAC3B,+BAA+B,EAC/B,4BAA4B,EAC5B,gCAAgC,EAChC,gCAAgC,EAChC,kCAAkC,EAClC,8BAA8B,EAC9B,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAC3E,OAAO,EAAE,oCAAoC,EAAE,MAAM,wCAAwC,CAAC;AAC9F,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,0BAA0B,EAC1B,2BAA2B,EAC3B,kCAAkC,EAClC,oBAAoB,EACpB,uBAAuB,EACvB,sCAAsC,EACtC,2BAA2B,EAC3B,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,2BAA2B,EAC3B,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,EACtB,6BAA6B,EAC7B,4BAA4B,EAC5B,yBAAyB,EACzB,oBAAoB,EACpB,iBAAiB,EACjB,2BAA2B,GAC5B,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,wBAAwB,EACxB,8BAA8B,EAC9B,mBAAmB,EACnB,iBAAiB,EACjB,wBAAwB,EACxB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,4BAA4B,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EACL,wBAAwB,EACxB,4BAA4B,EAC5B,mCAAmC,GACpC,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,mBAAmB,EAAE,8BAA8B,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AACjH,OAAO,EACL,mCAAmC,EACnC,2BAA2B,EAC3B,4BAA4B,EAC5B,8BAA8B,EAC9B,+BAA+B,EAC/B,2BAA2B,GAC5B,MAAM,iBAAiB,CAAC"}
package/dist/step.js CHANGED
@@ -276,10 +276,27 @@ function stepValidatedPhysics3D(world, dt) {
276
276
  for (let bodyIndex = 0; bodyIndex < world.bodies.length; bodyIndex += 1) {
277
277
  clearRigidBody3DForces(world.bodies[bodyIndex]);
278
278
  }
279
+ // CCD contacts are appended at TOI so they cannot shift the contact indices held by constraints that
280
+ // were prepared earlier in the interval. Those indices have expired now, so restore the canonical
281
+ // identity order before publishing the committed world and invoking post-solve hooks. The active-
282
+ // bullet condition is the same condition that can enter the CCD path; sorting every ordinary settled
283
+ // contact here added an O(n log n) tax to worlds that could not possibly have appended anything.
284
+ if (world.config.continuousCollision && hasActivePhysics3DBullet(world)) {
285
+ world.contacts.sort(comparePhysics3DContactIdentity);
286
+ }
279
287
  world.previousTimestep = substepDt;
280
288
  // Post-solve observes a committed step. A hook that throws here cannot prevent pose integration, force
281
289
  // cleanup, or the timestep agreement above, so the next call never resumes a half-finished step.
282
290
  runPhysics3DContactHook(world, world.contactHooks.postSolve, 'post-solve');
283
291
  }
292
+ function comparePhysics3DContactIdentity(left, right) {
293
+ if (left.bodyA !== right.bodyA)
294
+ return left.bodyA - right.bodyA;
295
+ if (left.bodyB !== right.bodyB)
296
+ return left.bodyB - right.bodyB;
297
+ if (left.colliderA !== right.colliderA)
298
+ return left.colliderA - right.colliderA;
299
+ return left.colliderB - right.colliderB;
300
+ }
284
301
  let physics3DStepGuard = null;
285
302
  //# sourceMappingURL=step.js.map
package/dist/step.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"step.js","sourceRoot":"","sources":["../src/step.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"step.js","sourceRoot":"","sources":["../src/step.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flighthq/physics3d",
3
- "version": "0.4.0-next.1811.dde7eb1",
3
+ "version": "0.4.0-next.1821.efb1cbc",
4
4
  "author": "Joshua Granick and other contributors",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -38,10 +38,11 @@
38
38
  "clean:dist": "tsx ../../scripts/clean-package-dist.ts"
39
39
  },
40
40
  "dependencies": {
41
- "@flighthq/collision": "0.4.0-next.1811.dde7eb1",
42
- "@flighthq/log": "0.4.0-next.1811.dde7eb1",
43
- "@flighthq/spatial": "0.4.0-next.1811.dde7eb1",
44
- "@flighthq/types": "0.4.0-next.1811.dde7eb1"
41
+ "@flighthq/collision": "0.4.0-next.1821.efb1cbc",
42
+ "@flighthq/log": "0.4.0-next.1821.efb1cbc",
43
+ "@flighthq/math": "0.4.0-next.1821.efb1cbc",
44
+ "@flighthq/spatial": "0.4.0-next.1821.efb1cbc",
45
+ "@flighthq/types": "0.4.0-next.1821.efb1cbc"
45
46
  },
46
47
  "devDependencies": {
47
48
  "@flighthq/geometry": "*",
@@ -6,7 +6,11 @@ import {
6
6
  import type { CollisionBuiltInShape3D, Physics3DWorld, RigidBody3D } from '@flighthq/types/contract';
7
7
  import { beforeEach, describe, expect, it } from 'vitest';
8
8
 
9
- import { hasActivePhysics3DBullet, integratePhysics3DContinuous } from './continuous';
9
+ import {
10
+ hasActivePhysics3DBullet,
11
+ integratePhysics3DContinuous,
12
+ writePhysics3DRotationalCcdEnvelope,
13
+ } from './continuous';
10
14
  import { stepPhysics3D } from './step';
11
15
  import {
12
16
  addPhysics3DBody,
@@ -223,6 +227,142 @@ describe('integratePhysics3DContinuous', () => {
223
227
  expect(bullet.velocityX).toBeLessThan(1);
224
228
  });
225
229
 
230
+ it('publishes a persistent contact and runs both hooks in the impact step', () => {
231
+ const world = continuousWorld();
232
+ addWall(world);
233
+ const bullet = addBullet(world, -5, 600);
234
+ const phases: string[] = [];
235
+ world.contactHooks.preSolve = (_world, contact) => {
236
+ phases.push('pre');
237
+ expect(contact.bodyA).toBeLessThan(contact.bodyB);
238
+ expect(contact.pointCount).toBe(1);
239
+ expect(contact.points[0].depth).toBe(0);
240
+ };
241
+ world.contactHooks.postSolve = (_world, contact) => {
242
+ phases.push('post');
243
+ expect(contact.touching).toBe(true);
244
+ };
245
+
246
+ stepPhysics3D(world, 1 / 60);
247
+
248
+ expect(phases).toEqual(['pre', 'post']);
249
+ expect(world.events.began).toHaveLength(1);
250
+ expect(world.events.ended).toHaveLength(0);
251
+ expect(world.contacts).toHaveLength(1);
252
+ expect(world.contacts[0]).toBe(world.events.began[0]);
253
+ expect(world.contacts[0].bodyA).not.toBe(bullet.index);
254
+ expect(world.contacts[0].bodyB).toBe(bullet.index);
255
+ });
256
+
257
+ it('lets an impact pre-solve hook disable resolution without losing its contact event', () => {
258
+ const world = continuousWorld();
259
+ addWall(world);
260
+ const bullet = addBullet(world, -5, 600);
261
+ world.contactHooks.preSolve = (_world, contact) => {
262
+ contact.enabled = false;
263
+ };
264
+
265
+ stepPhysics3D(world, 1 / 60);
266
+
267
+ expect(bullet.x).toBeGreaterThan(4);
268
+ expect(world.events.began).toHaveLength(1);
269
+ expect(world.contacts).toHaveLength(1);
270
+ expect(world.contacts[0].enabled).toBe(false);
271
+ });
272
+
273
+ it('uses restitution selected by the impact pre-solve hook', () => {
274
+ const world = continuousWorld();
275
+ addWall(world);
276
+ const bullet = addBullet(world, -5, 600);
277
+ world.contactHooks.preSolve = (_inner, contact) => {
278
+ contact.restitution = 1;
279
+ };
280
+
281
+ stepPhysics3D(world, 1 / 60);
282
+
283
+ expect(bullet.velocityX).toBeLessThan(-500);
284
+ });
285
+
286
+ it('retains the TOI contact and restores its overrides when a late pre-solve hook throws', () => {
287
+ const world = continuousWorld();
288
+ addWall(world);
289
+ const bullet = addBullet(world, -5, 600);
290
+ const error = new Error('impact hook failed');
291
+ world.contactHooks.preSolve = (_inner, contact) => {
292
+ contact.friction = 99;
293
+ throw error;
294
+ };
295
+
296
+ expect(() => stepPhysics3D(world, 1 / 60)).toThrow(error);
297
+ expect(bullet.x).toBeGreaterThan(-5);
298
+ expect(bullet.x).toBeLessThan(0);
299
+ expect(world.contacts).toHaveLength(1);
300
+ expect(world.events.began).toEqual([world.contacts[0]]);
301
+ expect(world.contacts[0].friction).not.toBe(99);
302
+
303
+ world.contactHooks.preSolve = null;
304
+ expect(() => stepPhysics3D(world, 1 / 60)).not.toThrow();
305
+ });
306
+
307
+ it('applies Coulomb friction at TOI instead of preserving all tangential speed', () => {
308
+ function run(friction: number): RigidBody3D {
309
+ const world = continuousWorld();
310
+ const material = { density: 1, friction, restitution: 0 };
311
+ const wall = createRigidBody3D('static');
312
+ addPhysics3DBody(world, wall);
313
+ addPhysics3DCollider(world, wall, createPhysics3DCollider(THIN_WALL, material));
314
+ const bullet = createRigidBody3D('dynamic');
315
+ bullet.x = -5;
316
+ bullet.velocityX = 600;
317
+ bullet.velocityY = 60;
318
+ bullet.gravityScale = 0;
319
+ bullet.bullet = true;
320
+ addPhysics3DBody(world, bullet);
321
+ addPhysics3DCollider(
322
+ world,
323
+ bullet,
324
+ createPhysics3DCollider({ kind: 'sphere', x: 0, y: 0, z: 0, radius: 0.1 }, material),
325
+ );
326
+ stepPhysics3D(world, 1 / 60);
327
+ return bullet;
328
+ }
329
+
330
+ const frictionless = run(0);
331
+ const gripping = run(1);
332
+ // GJK's first-touch normal may contain a small tangential component at its tolerance boundary, so
333
+ // the zero-friction control is deliberately a behavioural bound rather than a bit-exact 60 m/s.
334
+ expect(Math.abs(frictionless.velocityY)).toBeGreaterThan(59);
335
+ expect(Math.abs(gripping.velocityY)).toBeLessThan(1);
336
+ expect(Math.abs(gripping.velocityY)).toBeLessThan(Math.abs(frictionless.velocityY) * 0.02);
337
+ });
338
+
339
+ it('reports the end transition on the step after a restitutive impact separates', () => {
340
+ const world = continuousWorld();
341
+ const material = { density: 1, friction: 0, restitution: 1 };
342
+ const wall = createRigidBody3D('static');
343
+ addPhysics3DBody(world, wall);
344
+ addPhysics3DCollider(world, wall, createPhysics3DCollider(THIN_WALL, material));
345
+ const bullet = createRigidBody3D('dynamic');
346
+ bullet.x = -5;
347
+ bullet.velocityX = 600;
348
+ bullet.gravityScale = 0;
349
+ bullet.bullet = true;
350
+ addPhysics3DBody(world, bullet);
351
+ addPhysics3DCollider(
352
+ world,
353
+ bullet,
354
+ createPhysics3DCollider({ kind: 'sphere', x: 0, y: 0, z: 0, radius: 0.1 }, material),
355
+ );
356
+
357
+ stepPhysics3D(world, 1 / 60);
358
+ const impact = world.events.began[0];
359
+ stepPhysics3D(world, 1 / 60);
360
+
361
+ expect(world.events.began).toHaveLength(0);
362
+ expect(world.events.ended).toEqual([impact]);
363
+ expect(world.contacts).toHaveLength(0);
364
+ });
365
+
226
366
  it('bounces a restitutive bullet back off the wall', () => {
227
367
  const world = continuousWorld();
228
368
  const wall = createRigidBody3D('static');
@@ -293,10 +433,64 @@ describe('integratePhysics3DContinuous', () => {
293
433
  addPhysics3DBody(world, trigger);
294
434
  addPhysics3DCollider(world, trigger, createPhysics3DCollider(THIN_WALL, undefined, undefined, true));
295
435
  const bullet = addBullet(world, -5, 600);
436
+ let preSolveCount = 0;
437
+ let postSolveCount = 0;
438
+ world.contactHooks.preSolve = () => {
439
+ preSolveCount += 1;
440
+ };
441
+ world.contactHooks.postSolve = () => {
442
+ postSolveCount += 1;
443
+ };
296
444
 
297
445
  stepPhysics3D(world, 1 / 60);
298
446
 
299
447
  expect(bullet.x).toBeGreaterThan(4);
448
+ expect(preSolveCount).toBe(0);
449
+ expect(postSolveCount).toBe(0);
450
+ expect(world.events.began).toHaveLength(1);
451
+ expect(world.events.ended).toHaveLength(0);
452
+ expect(world.contacts).toHaveLength(1);
453
+ expect(world.contacts[0]).toBe(world.events.began[0]);
454
+ expect(world.contacts[0].sensor).toBe(true);
455
+
456
+ const crossing = world.contacts[0];
457
+ stepPhysics3D(world, 1 / 60);
458
+
459
+ expect(world.events.began).toHaveLength(0);
460
+ expect(world.events.ended).toEqual([crossing]);
461
+ expect(world.contacts).toHaveLength(0);
462
+ });
463
+
464
+ it('pairs a sensor begin and end inside one public step when a later substep proves the crossing', () => {
465
+ const world = continuousWorld();
466
+ world.config.substeps = 2;
467
+ const trigger = createRigidBody3D('static');
468
+ addPhysics3DBody(world, trigger);
469
+ addPhysics3DCollider(world, trigger, createPhysics3DCollider(THIN_WALL, undefined, undefined, true));
470
+ addBullet(world, -5, 1200);
471
+
472
+ stepPhysics3D(world, 1 / 60);
473
+
474
+ expect(world.events.began).toHaveLength(1);
475
+ expect(world.events.ended).toHaveLength(1);
476
+ expect(world.events.ended[0]).toBe(world.events.began[0]);
477
+ expect(world.contacts).toHaveLength(0);
478
+ });
479
+
480
+ it('does not report a sensor behind a solid impact the bullet never reaches', () => {
481
+ const world = continuousWorld();
482
+ addWall(world);
483
+ const trigger = createRigidBody3D('static');
484
+ trigger.x = 3;
485
+ addPhysics3DBody(world, trigger);
486
+ addPhysics3DCollider(world, trigger, createPhysics3DCollider(THIN_WALL, undefined, undefined, true));
487
+ const bullet = addBullet(world, -5, 600);
488
+
489
+ stepPhysics3D(world, 1 / 60);
490
+
491
+ expect(bullet.x).toBeLessThan(0);
492
+ expect(world.events.began.some((contact) => contact.sensor)).toBe(false);
493
+ expect(world.contacts.every((contact) => !contact.sensor)).toBe(true);
300
494
  });
301
495
 
302
496
  it('ignores a wall the collision filter excludes', () => {
@@ -395,4 +589,91 @@ describe('integratePhysics3DContinuous', () => {
395
589
 
396
590
  expect(bullet.x).toBeLessThan(0);
397
591
  });
592
+
593
+ it('keeps the world mutation boundary around a direct custom-loop impact hook', () => {
594
+ const world = continuousWorld();
595
+ addWall(world);
596
+ addBullet(world, -5, 600);
597
+ world.contactHooks.preSolve = (inner) => addPhysics3DBody(inner, createRigidBody3D('dynamic'));
598
+
599
+ expect(() => integratePhysics3DContinuous(world, 1 / 60)).toThrow(
600
+ 'Cannot mutate a physics world while it is stepping',
601
+ );
602
+ expect(world.bodies).toHaveLength(2);
603
+ });
604
+
605
+ it('rejects recursive continuous integration from an impact hook', () => {
606
+ const world = continuousWorld();
607
+ addWall(world);
608
+ addBullet(world, -5, 600);
609
+ world.contactHooks.preSolve = (inner) => integratePhysics3DContinuous(inner, 1 / 60);
610
+
611
+ expect(() => integratePhysics3DContinuous(world, 1 / 60)).toThrow(
612
+ 'Cannot integrate a physics world recursively while it is stepping',
613
+ );
614
+ });
615
+ });
616
+
617
+ describe('writePhysics3DRotationalCcdEnvelope', () => {
618
+ it('reports the one-degree target when the budget can cover the angular travel', () => {
619
+ const out = {
620
+ angularTravel: 0,
621
+ sampleCount: 0,
622
+ maxAngularIncrement: 0,
623
+ maxPointArcTravel: 0,
624
+ targetIncrementMet: false,
625
+ };
626
+ expect(writePhysics3DRotationalCcdEnvelope(120, 5, 1 / 60, 128, out)).toBe(true);
627
+ expect(out.angularTravel).toBeCloseTo(2, 12);
628
+ expect(out.sampleCount).toBe(115);
629
+ expect(out.maxAngularIncrement).toBeLessThanOrEqual(Math.PI / 180);
630
+ expect(out.maxPointArcTravel).toBeCloseTo((2 / 115) * 5, 12);
631
+ expect(out.targetIncrementMet).toBe(true);
632
+ });
633
+
634
+ it('publishes the wider angular and spatial gap when the hard budget binds', () => {
635
+ const out = {
636
+ angularTravel: 0,
637
+ sampleCount: 0,
638
+ maxAngularIncrement: 0,
639
+ maxPointArcTravel: 0,
640
+ targetIncrementMet: true,
641
+ };
642
+ expect(writePhysics3DRotationalCcdEnvelope(120, 5, 1 / 60, 10, out)).toBe(true);
643
+ expect(out.sampleCount).toBe(10);
644
+ expect(out.maxAngularIncrement).toBeCloseTo(0.2, 12);
645
+ expect(out.maxPointArcTravel).toBeCloseTo(1, 12);
646
+ expect(out.targetIncrementMet).toBe(false);
647
+ });
648
+
649
+ it('makes a disabled rotational lane explicit and rejects invalid authoring inputs', () => {
650
+ const out = {
651
+ angularTravel: 0,
652
+ sampleCount: 0,
653
+ maxAngularIncrement: 0,
654
+ maxPointArcTravel: 0,
655
+ targetIncrementMet: true,
656
+ };
657
+ expect(writePhysics3DRotationalCcdEnvelope(10, 2, 1 / 60, 0, out)).toBe(true);
658
+ expect(out.sampleCount).toBe(0);
659
+ expect(out.maxAngularIncrement).toBe(Number.POSITIVE_INFINITY);
660
+ expect(out.maxPointArcTravel).toBe(Number.POSITIVE_INFINITY);
661
+ expect(out.targetIncrementMet).toBe(false);
662
+ expect(writePhysics3DRotationalCcdEnvelope(-1, 2, 1 / 60, 10, out)).toBe(false);
663
+ expect(out).toEqual({
664
+ angularTravel: 0,
665
+ sampleCount: 0,
666
+ maxAngularIncrement: 0,
667
+ maxPointArcTravel: 0,
668
+ targetIncrementMet: false,
669
+ });
670
+ expect(writePhysics3DRotationalCcdEnvelope(Number.MAX_VALUE, 2, 2, 10, out)).toBe(false);
671
+ expect(out).toEqual({
672
+ angularTravel: 0,
673
+ sampleCount: 0,
674
+ maxAngularIncrement: 0,
675
+ maxPointArcTravel: 0,
676
+ targetIncrementMet: false,
677
+ });
678
+ });
398
679
  });