@flighthq/physics3d 0.4.0-next.1809.9b3b71b → 0.4.0-next.1815.e47cc3c

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":"AACA,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"}
@@ -2,10 +2,13 @@ import { createCollisionContactManifold3D, createCollisionTimeOfImpact3D } from
2
2
  import { synchronizePhysics3DBroadphase, synchronizePhysics3DSweptBroadphase } from './broadphase';
3
3
  import { collidePhysics3DColliderShapes, sweepPhysics3DColliderShapes } from './colliderCollision';
4
4
  import { updatePhysics3DColliderWorldShape } from './colliderTransform';
5
+ import { createPhysics3DContactPoint } from './contacts';
5
6
  import { integrateRigidBody3DPose, refreshRigidBody3DWorldInertia } from './integrate';
6
7
  import { isPhysics3DPairJointSuppressed } from './jointCollisionSuppression';
7
8
  import { isPhysics3DPairOrdered } from './jointRegistry';
8
- import { mixPhysics3DRestitution } from './material';
9
+ import { mixPhysics3DFriction, mixPhysics3DRestitution } from './material';
10
+ import { steppingPhysics3DWorlds } from './ownership';
11
+ import { isPhysics3DContactValid } from './stepValidation';
9
12
  import { applySymmetricTensor, TENSOR_XX, TENSOR_XY, TENSOR_XZ, TENSOR_YY, TENSOR_YZ, TENSOR_ZZ, } from './symmetricTensor';
10
13
  import { writeRigidBody3DWorldCenter } from './world';
11
14
  // Continuous collision: advancing poses in chronological order of impact rather than in one jump.
@@ -34,9 +37,19 @@ export function hasActivePhysics3DBullet(world) {
34
37
  // The substep budget is a HARD bound rather than a convergence target: an adversarial scene — a fast body
35
38
  // in a narrow gap — can generate impacts without limit, and a loop that ran until none were left would
36
39
  // 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.
40
+ // which is the behaviour the caller would have had anyway. A custom loop entering here directly acquires
41
+ // the same mutation boundary as `stepPhysics3D`; the standard step already owns it. A second continuous
42
+ // entry on the same world is always recursion and is rejected before it can share this function's scratch
43
+ // or advance a half-resolved impact from inside a contact hook.
38
44
  export function integratePhysics3DContinuous(world, dt) {
45
+ if (integratingPhysics3DWorlds.has(world)) {
46
+ throw new Error('Cannot integrate a physics world recursively while it is stepping');
47
+ }
39
48
  const scratch = acquirePhysics3DContinuousScratch();
49
+ const ownsMutationBoundary = !steppingPhysics3DWorlds.has(world);
50
+ integratingPhysics3DWorlds.add(world);
51
+ if (ownsMutationBoundary)
52
+ steppingPhysics3DWorlds.add(world);
40
53
  try {
41
54
  let remaining = dt;
42
55
  for (let substep = 0; substep < world.config.maxCcdSubsteps && remaining > 0; substep += 1) {
@@ -56,7 +69,47 @@ export function integratePhysics3DContinuous(world, dt) {
56
69
  }
57
70
  finally {
58
71
  releasePhysics3DContinuousScratch(scratch);
72
+ if (ownsMutationBoundary)
73
+ steppingPhysics3DWorlds.delete(world);
74
+ integratingPhysics3DWorlds.delete(world);
75
+ }
76
+ }
77
+ // Writes the configured rotational CCD sampling guarantee without running a world. This is the authoring
78
+ // check for a fast blade or offset collider: feed it the maximum angular speed and the furthest collider
79
+ // point from the body origin, then compare the reported angular/arc gap with the thinnest interaction the
80
+ // game must not miss.
81
+ export function writePhysics3DRotationalCcdEnvelope(angularSpeed, maximumRadius, dt, maxSubsteps, out) {
82
+ if (!Number.isFinite(angularSpeed) ||
83
+ angularSpeed < 0 ||
84
+ !Number.isFinite(maximumRadius) ||
85
+ maximumRadius < 0 ||
86
+ !Number.isFinite(dt) ||
87
+ dt < 0 ||
88
+ !Number.isSafeInteger(maxSubsteps) ||
89
+ maxSubsteps < 0) {
90
+ clearPhysics3DRotationalCcdEnvelope(out);
91
+ return false;
92
+ }
93
+ const angularTravel = angularSpeed * dt;
94
+ if (!Number.isFinite(angularTravel)) {
95
+ clearPhysics3DRotationalCcdEnvelope(out);
96
+ return false;
59
97
  }
98
+ const sampleCount = getPhysics3DRotationSampleCount(angularTravel, maxSubsteps);
99
+ const maxAngularIncrement = angularTravel === 0 ? 0 : sampleCount === 0 ? Number.POSITIVE_INFINITY : angularTravel / sampleCount;
100
+ out.angularTravel = angularTravel;
101
+ out.sampleCount = sampleCount;
102
+ out.maxAngularIncrement = maxAngularIncrement;
103
+ out.maxPointArcTravel = maximumRadius === 0 ? 0 : maximumRadius * maxAngularIncrement;
104
+ out.targetIncrementMet = angularTravel === 0 || maxAngularIncrement <= CCD_ROTATION_INCREMENT;
105
+ return true;
106
+ }
107
+ function clearPhysics3DRotationalCcdEnvelope(out) {
108
+ out.angularTravel = 0;
109
+ out.sampleCount = 0;
110
+ out.maxAngularIncrement = 0;
111
+ out.maxPointArcTravel = 0;
112
+ out.targetIncrementMet = false;
60
113
  }
61
114
  function advanceAwakePhysics3DBodies(world, dt) {
62
115
  for (const body of world.bodies) {
@@ -90,71 +143,126 @@ function findEarliestPhysics3DImpact(world, dt, scratch) {
90
143
  continue;
91
144
  if (isPhysics3DPairJointSuppressed(world, bodyA.index, bodyB.index))
92
145
  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
146
  for (let i = 0; i < bodyA.colliders.length; i += 1) {
100
147
  for (let j = 0; j < bodyB.colliders.length; j += 1) {
101
148
  const colliderA = bodyA.colliders[i];
102
149
  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.
150
+ if (!isPhysics3DColliderPairEnabled(colliderA, colliderB))
151
+ continue;
105
152
  if (colliderA.sensor || colliderB.sensor)
106
153
  continue;
107
- if (!isPhysics3DColliderPairEnabled(colliderA, colliderB))
154
+ if (!findPhysics3DColliderImpact(world, bodyA, bodyB, colliderA, colliderB, dt, false, scratch))
108
155
  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)
156
+ const candidate = scratch.candidateRotational ? scratch.rotationalImpact : scratch.linearImpact;
157
+ if (candidate.fraction >= scratch.fraction)
134
158
  continue;
135
159
  scratch.fraction = candidate.fraction;
136
160
  scratch.bodyA = bodyA.index;
137
161
  scratch.bodyB = bodyB.index;
162
+ scratch.colliderA = i;
163
+ scratch.colliderB = j;
138
164
  scratch.normalX = candidate.normalX;
139
165
  scratch.normalY = candidate.normalY;
140
166
  scratch.normalZ = candidate.normalZ;
167
+ scratch.friction = mixPhysics3DFriction(colliderA.material.friction, colliderB.material.friction);
141
168
  scratch.restitution = mixPhysics3DRestitution(colliderA.material.restitution, colliderB.material.restitution);
142
- scratch.rotational = rotational;
143
- scratch.pointCount = rotational ? scratch.rotationalManifold.pointCount : 0;
144
- if (rotational) {
169
+ scratch.rotational = scratch.candidateRotational;
170
+ scratch.pointCount = scratch.rotational ? scratch.rotationalManifold.pointCount : 1;
171
+ if (scratch.rotational) {
145
172
  for (let point = 0; point < scratch.pointCount; point += 1) {
146
173
  const source = scratch.rotationalManifold.points[point];
147
174
  const offset = point * 3;
148
175
  scratch.points[offset] = source.x;
149
176
  scratch.points[offset + 1] = source.y;
150
177
  scratch.points[offset + 2] = source.z;
178
+ scratch.depths[point] = source.depth;
179
+ scratch.featureIds[point] = source.featureId;
151
180
  }
152
181
  }
182
+ else {
183
+ scratch.points[0] = candidate.x;
184
+ scratch.points[1] = candidate.y;
185
+ scratch.points[2] = candidate.z;
186
+ scratch.depths[0] = 0;
187
+ scratch.featureIds[0] = 0;
188
+ }
153
189
  }
154
190
  }
155
191
  }
192
+ // Sensor sweeps are evaluated only after the earliest solid TOI is known. Reporting them in the first
193
+ // pass can publish a trigger behind a nearer wall even though that wall stops the bullet before it ever
194
+ // reaches the trigger. Every sensor at or before the solid boundary is observable; later sensors are
195
+ // reconsidered from the post-impact state on the next bounded CCD sub-interval.
196
+ reportPhysics3DSensorImpactsBeforeFraction(world, dt, scratch.fraction, scratch);
156
197
  return scratch.bodyA >= 0;
157
198
  }
199
+ function reportPhysics3DSensorImpactsBeforeFraction(world, dt, maximumFraction, scratch) {
200
+ for (let pairIndex = 0; pairIndex < scratch.pairs.length; pairIndex += 1) {
201
+ const pair = scratch.pairs[pairIndex];
202
+ const first = world.bodyByIndex.get(pair.a);
203
+ const second = world.bodyByIndex.get(pair.b);
204
+ if (first === undefined || second === undefined)
205
+ continue;
206
+ const ordered = isPhysics3DPairOrdered(first.index, second.index);
207
+ const bodyA = ordered ? first : second;
208
+ const bodyB = ordered ? second : first;
209
+ if (!isPhysics3DCcdPairActive(bodyA, bodyB))
210
+ continue;
211
+ if (isPhysics3DPairJointSuppressed(world, bodyA.index, bodyB.index))
212
+ continue;
213
+ for (let colliderAIndex = 0; colliderAIndex < bodyA.colliders.length; colliderAIndex += 1) {
214
+ for (let colliderBIndex = 0; colliderBIndex < bodyB.colliders.length; colliderBIndex += 1) {
215
+ const colliderA = bodyA.colliders[colliderAIndex];
216
+ const colliderB = bodyB.colliders[colliderBIndex];
217
+ if (!colliderA.sensor && !colliderB.sensor)
218
+ continue;
219
+ if (!isPhysics3DColliderPairEnabled(colliderA, colliderB))
220
+ continue;
221
+ if (hasPhysics3DContactTransition(world.events.began, bodyA.index, bodyB.index, colliderAIndex, colliderBIndex)) {
222
+ continue;
223
+ }
224
+ if (!findPhysics3DColliderImpact(world, bodyA, bodyB, colliderA, colliderB, dt, true, scratch))
225
+ continue;
226
+ const candidate = scratch.candidateRotational ? scratch.rotationalImpact : scratch.linearImpact;
227
+ if (candidate.fraction > maximumFraction)
228
+ continue;
229
+ reportPhysics3DSensorImpact(world, bodyA, bodyB, colliderAIndex, colliderBIndex, colliderA, colliderB, candidate, scratch.candidateRotational, dt, scratch);
230
+ }
231
+ }
232
+ }
233
+ }
234
+ // Selects the earlier analytic-translation or sampled-rotation impact for one collider pair. Sensors
235
+ // accept any crossing because they generate no impulse; solids additionally require an approaching
236
+ // velocity so a grazing or separating touch cannot consume the chronological substep budget.
237
+ function findPhysics3DColliderImpact(world, bodyA, bodyB, colliderA, colliderB, dt, acceptNonApproaching, scratch) {
238
+ const movingA = isPhysics3DBodyMoving(bodyA);
239
+ const movingB = isPhysics3DBodyMoving(bodyB);
240
+ // Preserve the analytic translation sweep even while the body spins. Replacing it with angular
241
+ // samples would let a fast, slightly rotating bullet cross a thin wall between those samples.
242
+ 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;
243
+ const angularTravelA = movingA
244
+ ? Math.hypot(bodyA.angularVelocityX, bodyA.angularVelocityY, bodyA.angularVelocityZ) * dt
245
+ : 0;
246
+ const angularTravelB = movingB
247
+ ? Math.hypot(bodyB.angularVelocityX, bodyB.angularVelocityY, bodyB.angularVelocityZ) * dt
248
+ : 0;
249
+ const rotationalHit = (angularTravelA > 0 || angularTravelB > 0) &&
250
+ world.config.maxCcdRotationSubsteps > 0 &&
251
+ findPhysics3DRotationalImpact(bodyA, bodyB, colliderA, colliderB, dt, Math.max(angularTravelA, angularTravelB), world.config.maxCcdRotationSubsteps, scratch) &&
252
+ scratch.rotationalImpact.fraction > 0;
253
+ let found = false;
254
+ scratch.candidateRotational = false;
255
+ if (linearHit && (acceptNonApproaching || isPhysics3DImpactApproaching(bodyA, bodyB, scratch.linearImpact))) {
256
+ found = true;
257
+ }
258
+ if (rotationalHit &&
259
+ (!found || scratch.rotationalImpact.fraction < scratch.linearImpact.fraction) &&
260
+ (acceptNonApproaching || isPhysics3DRotationalImpactApproaching(bodyA, bodyB, scratch.rotationalManifold, scratch))) {
261
+ found = true;
262
+ scratch.candidateRotational = true;
263
+ }
264
+ return found;
265
+ }
158
266
  // Rotation changes a convex shape rather than translating a fixed one, so collision's analytic linear
159
267
  // sweep cannot answer it. Sample at a bounded angular increment, then bisect the first overlapping
160
268
  // interval. The hard cap keeps multi-revolution bodies deterministic in cost; zero selects the linear
@@ -164,7 +272,7 @@ function findPhysics3DRotationalImpact(bodyA, bodyB, colliderA, colliderB, dt, a
164
272
  // first sample as a new impact infinitesimally after zero and consumes CCD budget without advancing.
165
273
  if (testPhysics3DColliderOverlapAtFraction(bodyA, bodyB, colliderA, colliderB, dt, 0, scratch))
166
274
  return false;
167
- const substeps = Math.min(maxSubsteps, Math.max(1, Math.ceil(angularTravel / CCD_ROTATION_INCREMENT)));
275
+ const substeps = getPhysics3DRotationSampleCount(angularTravel, maxSubsteps);
168
276
  let lowerFraction = 0;
169
277
  for (let sample = 1; sample <= substeps; sample += 1) {
170
278
  const upperFraction = sample / substeps;
@@ -205,6 +313,11 @@ function findPhysics3DRotationalImpact(bodyA, bodyB, colliderA, colliderB, dt, a
205
313
  }
206
314
  return false;
207
315
  }
316
+ function getPhysics3DRotationSampleCount(angularTravel, maxSubsteps) {
317
+ if (!(angularTravel > 0) || maxSubsteps <= 0)
318
+ return 0;
319
+ return Math.min(maxSubsteps, Math.max(1, Math.ceil(angularTravel / CCD_ROTATION_INCREMENT)));
320
+ }
208
321
  function testPhysics3DColliderOverlapAtFraction(bodyA, bodyB, colliderA, colliderB, dt, fraction, scratch) {
209
322
  savePhysics3DBodyPose(bodyA, scratch.poseA);
210
323
  savePhysics3DBodyPose(bodyB, scratch.poseB);
@@ -286,6 +399,171 @@ function getRelativeNormalVelocity(bodyA, bodyB, normalX, normalY, normalZ) {
286
399
  (bodyA.velocityY - bodyB.velocityY) * normalY +
287
400
  (bodyA.velocityZ - bodyB.velocityZ) * normalZ);
288
401
  }
402
+ // Publishes a solid TOI through the ordinary persistent-contact lane. Appending is deliberate: contact
403
+ // constraints prepared earlier in the interval store list indices, so inserting into canonical order
404
+ // here would retarget those constraints midway through their solve. The step restores canonical order
405
+ // after its position pass, once those indices have expired.
406
+ function writePhysics3DImpactContact(world, bodyA, bodyB, scratch) {
407
+ let contact = null;
408
+ for (let index = 0; index < world.contacts.length; index += 1) {
409
+ const existing = world.contacts[index];
410
+ if (existing.bodyA === scratch.bodyA &&
411
+ existing.bodyB === scratch.bodyB &&
412
+ existing.colliderA === scratch.colliderA &&
413
+ existing.colliderB === scratch.colliderB) {
414
+ contact = existing;
415
+ break;
416
+ }
417
+ }
418
+ scratch.contactCreated = contact === null;
419
+ if (contact === null) {
420
+ contact = {
421
+ bodyA: scratch.bodyA,
422
+ bodyB: scratch.bodyB,
423
+ colliderA: scratch.colliderA,
424
+ colliderB: scratch.colliderB,
425
+ normalX: scratch.normalX,
426
+ normalY: scratch.normalY,
427
+ normalZ: scratch.normalZ,
428
+ pointCount: 0,
429
+ points: [],
430
+ friction: scratch.friction,
431
+ restitution: scratch.restitution,
432
+ enabled: true,
433
+ sensor: false,
434
+ touching: true,
435
+ };
436
+ world.contacts.push(contact);
437
+ world.events.began.push(contact);
438
+ }
439
+ contact.normalX = scratch.normalX;
440
+ contact.normalY = scratch.normalY;
441
+ contact.normalZ = scratch.normalZ;
442
+ contact.touching = true;
443
+ while (contact.points.length < scratch.pointCount)
444
+ contact.points.push(createPhysics3DContactPoint());
445
+ writeRigidBody3DWorldCenter(bodyA, scratch.centerA);
446
+ writeRigidBody3DWorldCenter(bodyB, scratch.centerB);
447
+ for (let pointIndex = 0; pointIndex < scratch.pointCount; pointIndex += 1) {
448
+ const offset = pointIndex * 3;
449
+ const point = contact.points[pointIndex];
450
+ point.x = scratch.points[offset];
451
+ point.y = scratch.points[offset + 1];
452
+ point.z = scratch.points[offset + 2];
453
+ point.depth = scratch.depths[pointIndex];
454
+ point.featureId = scratch.featureIds[pointIndex];
455
+ point.rAX = point.x - scratch.centerA[0];
456
+ point.rAY = point.y - scratch.centerA[1];
457
+ point.rAZ = point.z - scratch.centerA[2];
458
+ point.rBX = point.x - scratch.centerB[0];
459
+ point.rBY = point.y - scratch.centerB[1];
460
+ point.rBZ = point.z - scratch.centerB[2];
461
+ }
462
+ contact.pointCount = scratch.pointCount;
463
+ return contact;
464
+ }
465
+ // A sensor impact enters the ordinary persistent-contact lane at TOI. It cannot stop the body, and only
466
+ // a later pose can prove whether the body crossed the whole volume or ended inside it, so the next
467
+ // contact-intake pass makes that decision — a later solver substep or the next public step. A pass-through
468
+ // emits `ended` there with the SAME record identity; a body that remains overlapping simply keeps the
469
+ // record. Sensors invoke neither contact hook and resolve no impulse, matching the discrete sensor
470
+ // contract.
471
+ function reportPhysics3DSensorImpact(world, bodyA, bodyB, colliderAIndex, colliderBIndex, colliderA, colliderB, impact, rotational, dt, scratch) {
472
+ if (hasPhysics3DContactTransition(world.events.began, bodyA.index, bodyB.index, colliderAIndex, colliderBIndex)) {
473
+ return;
474
+ }
475
+ savePhysics3DBodyPose(bodyA, scratch.poseA);
476
+ savePhysics3DBodyPose(bodyB, scratch.poseB);
477
+ try {
478
+ integrateRigidBody3DPose(bodyA, dt * impact.fraction);
479
+ integrateRigidBody3DPose(bodyB, dt * impact.fraction);
480
+ writeRigidBody3DWorldCenter(bodyA, scratch.centerA);
481
+ writeRigidBody3DWorldCenter(bodyB, scratch.centerB);
482
+ }
483
+ finally {
484
+ restorePhysics3DBodyPose(bodyA, scratch.poseA);
485
+ restorePhysics3DBodyPose(bodyB, scratch.poseB);
486
+ }
487
+ const pointCount = rotational ? scratch.rotationalManifold.pointCount : 1;
488
+ const contact = {
489
+ bodyA: bodyA.index,
490
+ bodyB: bodyB.index,
491
+ colliderA: colliderAIndex,
492
+ colliderB: colliderBIndex,
493
+ normalX: impact.normalX,
494
+ normalY: impact.normalY,
495
+ normalZ: impact.normalZ,
496
+ pointCount,
497
+ points: [],
498
+ friction: mixPhysics3DFriction(colliderA.material.friction, colliderB.material.friction),
499
+ restitution: mixPhysics3DRestitution(colliderA.material.restitution, colliderB.material.restitution),
500
+ enabled: true,
501
+ sensor: true,
502
+ touching: true,
503
+ };
504
+ for (let pointIndex = 0; pointIndex < pointCount; pointIndex += 1) {
505
+ const source = rotational ? scratch.rotationalManifold.points[pointIndex] : impact;
506
+ const point = createPhysics3DContactPoint();
507
+ point.x = source.x;
508
+ point.y = source.y;
509
+ point.z = source.z;
510
+ point.depth = rotational ? scratch.rotationalManifold.points[pointIndex].depth : 0;
511
+ point.featureId = rotational ? scratch.rotationalManifold.points[pointIndex].featureId : 0;
512
+ point.rAX = point.x - scratch.centerA[0];
513
+ point.rAY = point.y - scratch.centerA[1];
514
+ point.rAZ = point.z - scratch.centerA[2];
515
+ point.rBX = point.x - scratch.centerB[0];
516
+ point.rBY = point.y - scratch.centerB[1];
517
+ point.rBZ = point.z - scratch.centerB[2];
518
+ contact.points.push(point);
519
+ }
520
+ world.contacts.push(contact);
521
+ world.events.began.push(contact);
522
+ }
523
+ function hasPhysics3DContactTransition(contacts, bodyA, bodyB, colliderA, colliderB) {
524
+ for (let index = 0; index < contacts.length; index += 1) {
525
+ const contact = contacts[index];
526
+ if (contact.bodyA === bodyA &&
527
+ contact.bodyB === bodyB &&
528
+ contact.colliderA === colliderA &&
529
+ contact.colliderB === colliderB) {
530
+ return true;
531
+ }
532
+ }
533
+ return false;
534
+ }
535
+ // The ordinary pre-solve hook has already run before pose integration. A contact discovered later by
536
+ // CCD gets exactly one equivalent invocation at TOI, before its impact impulse. Invalid writes and
537
+ // throws restore the four mutable override fields just like the ordinary lane. Because the step has
538
+ // necessarily advanced to discover this TOI, an exception leaves poses at the impact and retains the new
539
+ // contact/event rather than rolling the entire simulation back; that exception boundary is part of the
540
+ // CCD hook contract.
541
+ function runPhysics3DImpactPreSolveHook(world, contact) {
542
+ const hook = world.contactHooks.preSolve;
543
+ if (hook === null)
544
+ return;
545
+ const friction = contact.friction;
546
+ const restitution = contact.restitution;
547
+ const enabled = contact.enabled;
548
+ const sensor = contact.sensor;
549
+ try {
550
+ hook(world, contact);
551
+ }
552
+ catch (error) {
553
+ restorePhysics3DImpactHookFields(contact, friction, restitution, enabled, sensor);
554
+ throw error;
555
+ }
556
+ if (!isPhysics3DContactValid(contact)) {
557
+ restorePhysics3DImpactHookFields(contact, friction, restitution, enabled, sensor);
558
+ throw new Error('Physics3D pre-solve hook produced invalid contact state');
559
+ }
560
+ }
561
+ function restorePhysics3DImpactHookFields(contact, friction, restitution, enabled, sensor) {
562
+ contact.friction = friction;
563
+ contact.restitution = restitution;
564
+ contact.enabled = enabled;
565
+ contact.sensor = sensor;
566
+ }
289
567
  // Removes the approach velocity with a single LINEAR normal impulse through the centres of mass.
290
568
  //
291
569
  // NO LEVER ARM, and that omission is deliberate rather than a shortcut taken for speed. The impact
@@ -299,12 +577,12 @@ function getRelativeNormalVelocity(bodyA, bodyB, normalX, normalY, normalZ) {
299
577
  // mass collapsed, and the impulse meant to stop a 600-unit-per-second bullet changed its velocity by
300
578
  // 0.05. It tunnelled anyway, through a path that ran and reported success.
301
579
  //
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.
580
+ // The normal response therefore stays linear. Impact-time friction is linear too: it removes centre-of-
581
+ // mass tangential motion under the same Coulomb cone the ordinary solver uses, but invents no torque from
582
+ // the single witness. A rotational impact has a real manifold from its overlap sample and resolves both
583
+ // normal and friction impulses at those points, where the lever arms are supported by actual geometry.
584
+ // In both cases a persistent contact is published at TOI before resolution, so begin events and contact
585
+ // hooks observe the impact in the step where it happened rather than one frame later.
308
586
  function resolvePhysics3DImpact(world, scratch) {
309
587
  const bodyA = world.bodyByIndex.get(scratch.bodyA);
310
588
  const bodyB = world.bodyByIndex.get(scratch.bodyB);
@@ -312,8 +590,13 @@ function resolvePhysics3DImpact(world, scratch) {
312
590
  return;
313
591
  wakePhysics3DImpactBody(bodyA);
314
592
  wakePhysics3DImpactBody(bodyB);
593
+ const contact = writePhysics3DImpactContact(world, bodyA, bodyB, scratch);
594
+ if (scratch.contactCreated)
595
+ runPhysics3DImpactPreSolveHook(world, contact);
596
+ if (!contact.enabled || contact.sensor)
597
+ return;
315
598
  if (scratch.rotational && scratch.pointCount > 0) {
316
- resolvePhysics3DRotationalImpact(world, bodyA, bodyB, scratch);
599
+ resolvePhysics3DRotationalImpact(world, bodyA, bodyB, contact, scratch);
317
600
  return;
318
601
  }
319
602
  const approach = getRelativeNormalVelocity(bodyA, bodyB, scratch.normalX, scratch.normalY, scratch.normalZ);
@@ -322,7 +605,7 @@ function resolvePhysics3DImpact(world, scratch) {
322
605
  const totalInverseMass = bodyA.inverseMass + bodyB.inverseMass;
323
606
  if (!(totalInverseMass > 0))
324
607
  return;
325
- const restitution = approach < -world.config.sequentialImpulse.restitutionThreshold ? scratch.restitution : 0;
608
+ const restitution = approach < -world.config.sequentialImpulse.restitutionThreshold ? contact.restitution : 0;
326
609
  const magnitude = (-(1 + restitution) * approach) / totalInverseMass;
327
610
  bodyA.velocityX += scratch.normalX * magnitude * bodyA.inverseMass;
328
611
  bodyA.velocityY += scratch.normalY * magnitude * bodyA.inverseMass;
@@ -330,16 +613,41 @@ function resolvePhysics3DImpact(world, scratch) {
330
613
  bodyB.velocityX -= scratch.normalX * magnitude * bodyB.inverseMass;
331
614
  bodyB.velocityY -= scratch.normalY * magnitude * bodyB.inverseMass;
332
615
  bodyB.velocityZ -= scratch.normalZ * magnitude * bodyB.inverseMass;
616
+ const relativeX = bodyA.velocityX - bodyB.velocityX;
617
+ const relativeY = bodyA.velocityY - bodyB.velocityY;
618
+ const relativeZ = bodyA.velocityZ - bodyB.velocityZ;
619
+ const normalVelocity = relativeX * scratch.normalX + relativeY * scratch.normalY + relativeZ * scratch.normalZ;
620
+ const tangentVelocityX = relativeX - scratch.normalX * normalVelocity;
621
+ const tangentVelocityY = relativeY - scratch.normalY * normalVelocity;
622
+ const tangentVelocityZ = relativeZ - scratch.normalZ * normalVelocity;
623
+ const tangentSpeed = Math.sqrt(tangentVelocityX * tangentVelocityX + tangentVelocityY * tangentVelocityY + tangentVelocityZ * tangentVelocityZ);
624
+ if (tangentSpeed <= 0 || contact.friction <= 0)
625
+ return;
626
+ const desiredMagnitude = tangentSpeed / totalInverseMass;
627
+ const frictionMagnitude = Math.min(desiredMagnitude, contact.friction * magnitude);
628
+ const scale = -frictionMagnitude / tangentSpeed;
629
+ const impulseX = tangentVelocityX * scale;
630
+ const impulseY = tangentVelocityY * scale;
631
+ const impulseZ = tangentVelocityZ * scale;
632
+ bodyA.velocityX += impulseX * bodyA.inverseMass;
633
+ bodyA.velocityY += impulseY * bodyA.inverseMass;
634
+ bodyA.velocityZ += impulseZ * bodyA.inverseMass;
635
+ bodyB.velocityX -= impulseX * bodyB.inverseMass;
636
+ bodyB.velocityY -= impulseY * bodyB.inverseMass;
637
+ bodyB.velocityZ -= impulseZ * bodyB.inverseMass;
333
638
  }
334
- function resolvePhysics3DRotationalImpact(world, bodyA, bodyB, scratch) {
639
+ function resolvePhysics3DRotationalImpact(world, bodyA, bodyB, contact, scratch) {
335
640
  writeRigidBody3DWorldCenter(bodyA, scratch.centerA);
336
641
  writeRigidBody3DWorldCenter(bodyB, scratch.centerB);
642
+ writePhysics3DImpactFrictionBasis(scratch.normalX, scratch.normalY, scratch.normalZ, scratch);
337
643
  for (let point = 0; point < scratch.pointCount; point += 1) {
338
644
  scratch.normalImpulses[point] = 0;
645
+ scratch.tangentImpulses0[point] = 0;
646
+ scratch.tangentImpulses1[point] = 0;
339
647
  const offset = point * 3;
340
648
  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
649
  scratch.velocityBiases[point] =
342
- approach < -world.config.sequentialImpulse.restitutionThreshold ? -scratch.restitution * approach : 0;
650
+ approach < -world.config.sequentialImpulse.restitutionThreshold ? -contact.restitution * approach : 0;
343
651
  }
344
652
  for (let iteration = 0; iteration < ROTATIONAL_IMPACT_ITERATIONS; iteration += 1) {
345
653
  for (let point = 0; point < scratch.pointCount; point += 1) {
@@ -357,9 +665,58 @@ function resolvePhysics3DRotationalImpact(world, bodyA, bodyB, scratch) {
357
665
  scratch.normalImpulses[point] = impulse;
358
666
  applyPhysics3DImpactImpulse(bodyA, rAX, rAY, rAZ, scratch.normalX * delta, scratch.normalY * delta, scratch.normalZ * delta);
359
667
  applyPhysics3DImpactImpulse(bodyB, rBX, rBY, rBZ, -scratch.normalX * delta, -scratch.normalY * delta, -scratch.normalZ * delta);
668
+ const maxFriction = contact.friction * impulse;
669
+ const tangentVelocity0 = getRelativePointNormalVelocity(bodyA, bodyB, rAX, rAY, rAZ, rBX, rBY, rBZ, scratch.tangent0X, scratch.tangent0Y, scratch.tangent0Z);
670
+ const tangentMass0 = getPhysics3DImpactEffectiveMass(bodyA, bodyB, rAX, rAY, rAZ, rBX, rBY, rBZ, scratch.tangent0X, scratch.tangent0Y, scratch.tangent0Z);
671
+ let tangentImpulse0 = scratch.tangentImpulses0[point] - tangentVelocity0 * tangentMass0;
672
+ const tangentVelocity1 = getRelativePointNormalVelocity(bodyA, bodyB, rAX, rAY, rAZ, rBX, rBY, rBZ, scratch.tangent1X, scratch.tangent1Y, scratch.tangent1Z);
673
+ const tangentMass1 = getPhysics3DImpactEffectiveMass(bodyA, bodyB, rAX, rAY, rAZ, rBX, rBY, rBZ, scratch.tangent1X, scratch.tangent1Y, scratch.tangent1Z);
674
+ let tangentImpulse1 = scratch.tangentImpulses1[point] - tangentVelocity1 * tangentMass1;
675
+ const tangentMagnitude = Math.sqrt(tangentImpulse0 * tangentImpulse0 + tangentImpulse1 * tangentImpulse1);
676
+ if (tangentMagnitude > maxFriction) {
677
+ const frictionScale = maxFriction / tangentMagnitude;
678
+ tangentImpulse0 *= frictionScale;
679
+ tangentImpulse1 *= frictionScale;
680
+ }
681
+ const deltaTangent0 = tangentImpulse0 - scratch.tangentImpulses0[point];
682
+ const deltaTangent1 = tangentImpulse1 - scratch.tangentImpulses1[point];
683
+ scratch.tangentImpulses0[point] = tangentImpulse0;
684
+ scratch.tangentImpulses1[point] = tangentImpulse1;
685
+ const frictionX = scratch.tangent0X * deltaTangent0 + scratch.tangent1X * deltaTangent1;
686
+ const frictionY = scratch.tangent0Y * deltaTangent0 + scratch.tangent1Y * deltaTangent1;
687
+ const frictionZ = scratch.tangent0Z * deltaTangent0 + scratch.tangent1Z * deltaTangent1;
688
+ applyPhysics3DImpactImpulse(bodyA, rAX, rAY, rAZ, frictionX, frictionY, frictionZ);
689
+ applyPhysics3DImpactImpulse(bodyB, rBX, rBY, rBZ, -frictionX, -frictionY, -frictionZ);
360
690
  }
361
691
  }
362
692
  }
693
+ function writePhysics3DImpactFrictionBasis(normalX, normalY, normalZ, out) {
694
+ let seedX = 0;
695
+ let seedY = 0;
696
+ let seedZ = 0;
697
+ if (Math.abs(normalX) < IMPACT_AXIS_SELECTION_THRESHOLD)
698
+ seedX = 1;
699
+ else if (Math.abs(normalY) < IMPACT_AXIS_SELECTION_THRESHOLD)
700
+ seedY = 1;
701
+ else
702
+ seedZ = 1;
703
+ let tangent0X = normalY * seedZ - normalZ * seedY;
704
+ let tangent0Y = normalZ * seedX - normalX * seedZ;
705
+ let tangent0Z = normalX * seedY - normalY * seedX;
706
+ const length = Math.sqrt(tangent0X * tangent0X + tangent0Y * tangent0Y + tangent0Z * tangent0Z);
707
+ if (length > 0) {
708
+ const inverseLength = 1 / length;
709
+ tangent0X *= inverseLength;
710
+ tangent0Y *= inverseLength;
711
+ tangent0Z *= inverseLength;
712
+ }
713
+ out.tangent0X = tangent0X;
714
+ out.tangent0Y = tangent0Y;
715
+ out.tangent0Z = tangent0Z;
716
+ out.tangent1X = normalY * tangent0Z - normalZ * tangent0Y;
717
+ out.tangent1Y = normalZ * tangent0X - normalX * tangent0Z;
718
+ out.tangent1Z = normalX * tangent0Y - normalY * tangent0X;
719
+ }
363
720
  function getRelativePointNormalVelocity(bodyA, bodyB, rAX, rAY, rAZ, rBX, rBY, rBZ, normalX, normalY, normalZ) {
364
721
  const pointAX = bodyA.velocityX + bodyA.angularVelocityY * rAZ - bodyA.angularVelocityZ * rAY;
365
722
  const pointAY = bodyA.velocityY + bodyA.angularVelocityZ * rAX - bodyA.angularVelocityX * rAZ;
@@ -415,6 +772,7 @@ function wakePhysics3DImpactBody(body) {
415
772
  const APPROACH_EPSILON = 1e-9;
416
773
  const CCD_ROTATION_INCREMENT = Math.PI / 180;
417
774
  const CCD_ROTATION_BISECTION_ITERATIONS = 12;
775
+ const IMPACT_AXIS_SELECTION_THRESHOLD = 0.5773502691896258;
418
776
  const ROTATIONAL_IMPACT_ITERATIONS = 4;
419
777
  const impactTensor = [0, 0, 0, 0, 0, 0];
420
778
  const impactVector = [0, 0, 0];
@@ -429,16 +787,31 @@ function createPhysics3DContinuousScratch() {
429
787
  fraction: 0,
430
788
  bodyA: -1,
431
789
  bodyB: -1,
790
+ colliderA: -1,
791
+ colliderB: -1,
432
792
  normalX: 0,
433
793
  normalY: 0,
434
794
  normalZ: 0,
795
+ friction: 0,
435
796
  restitution: 0,
436
797
  rotational: false,
798
+ candidateRotational: false,
799
+ contactCreated: false,
437
800
  rotationalManifold: createCollisionContactManifold3D(),
438
801
  pointCount: 0,
439
802
  points: new Array(12).fill(0),
803
+ depths: new Array(4).fill(0),
804
+ featureIds: new Array(4).fill(0),
440
805
  normalImpulses: new Array(4).fill(0),
806
+ tangentImpulses0: new Array(4).fill(0),
807
+ tangentImpulses1: new Array(4).fill(0),
441
808
  velocityBiases: new Array(4).fill(0),
809
+ tangent0X: 0,
810
+ tangent0Y: 0,
811
+ tangent0Z: 0,
812
+ tangent1X: 0,
813
+ tangent1Y: 0,
814
+ tangent1Z: 0,
442
815
  centerA: [0, 0, 0],
443
816
  centerB: [0, 0, 0],
444
817
  candidateCenterA: [0, 0, 0],
@@ -451,4 +824,5 @@ function releasePhysics3DContinuousScratch(scratch) {
451
824
  physics3DContinuousScratchPool.push(scratch);
452
825
  }
453
826
  const physics3DContinuousScratchPool = [createPhysics3DContinuousScratch()];
827
+ const integratingPhysics3DWorlds = new WeakSet();
454
828
  //# 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.1809.9b3b71b",
3
+ "version": "0.4.0-next.1815.e47cc3c",
4
4
  "author": "Joshua Granick and other contributors",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -38,10 +38,10 @@
38
38
  "clean:dist": "tsx ../../scripts/clean-package-dist.ts"
39
39
  },
40
40
  "dependencies": {
41
- "@flighthq/collision": "0.4.0-next.1809.9b3b71b",
42
- "@flighthq/log": "0.4.0-next.1809.9b3b71b",
43
- "@flighthq/spatial": "0.4.0-next.1809.9b3b71b",
44
- "@flighthq/types": "0.4.0-next.1809.9b3b71b"
41
+ "@flighthq/collision": "0.4.0-next.1815.e47cc3c",
42
+ "@flighthq/log": "0.4.0-next.1815.e47cc3c",
43
+ "@flighthq/spatial": "0.4.0-next.1815.e47cc3c",
44
+ "@flighthq/types": "0.4.0-next.1815.e47cc3c"
45
45
  },
46
46
  "devDependencies": {
47
47
  "@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
  });