@aura3d/physics 1.5.2 → 2.0.0

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.
Files changed (81) hide show
  1. package/dist/ArcadeCharacterController.d.ts +53 -0
  2. package/dist/ArcadeCharacterController.d.ts.map +1 -0
  3. package/dist/ArcadeCharacterController.js +98 -0
  4. package/dist/ArcadeCharacterController.js.map +1 -0
  5. package/dist/ArcadeVehicleTelemetry.d.ts +162 -0
  6. package/dist/ArcadeVehicleTelemetry.d.ts.map +1 -0
  7. package/dist/ArcadeVehicleTelemetry.js +363 -0
  8. package/dist/ArcadeVehicleTelemetry.js.map +1 -0
  9. package/dist/CharacterController.d.ts +52 -0
  10. package/dist/CharacterController.d.ts.map +1 -1
  11. package/dist/CharacterController.js +380 -7
  12. package/dist/CharacterController.js.map +1 -1
  13. package/dist/Constraint.d.ts +20 -4
  14. package/dist/Constraint.d.ts.map +1 -1
  15. package/dist/Constraint.js +34 -60
  16. package/dist/Constraint.js.map +1 -1
  17. package/dist/FightingCharacterController.d.ts +32 -0
  18. package/dist/FightingCharacterController.d.ts.map +1 -0
  19. package/dist/FightingCharacterController.js +76 -0
  20. package/dist/FightingCharacterController.js.map +1 -0
  21. package/dist/MeshBVH.d.ts +72 -0
  22. package/dist/MeshBVH.d.ts.map +1 -0
  23. package/dist/MeshBVH.js +244 -0
  24. package/dist/MeshBVH.js.map +1 -0
  25. package/dist/PathFollowDriver.d.ts +162 -0
  26. package/dist/PathFollowDriver.d.ts.map +1 -0
  27. package/dist/PathFollowDriver.js +163 -0
  28. package/dist/PathFollowDriver.js.map +1 -0
  29. package/dist/PhysicsDebugDraw.d.ts +40 -1
  30. package/dist/PhysicsDebugDraw.d.ts.map +1 -1
  31. package/dist/PhysicsDebugDraw.js +87 -17
  32. package/dist/PhysicsDebugDraw.js.map +1 -1
  33. package/dist/PhysicsWorld.d.ts +37 -18
  34. package/dist/PhysicsWorld.d.ts.map +1 -1
  35. package/dist/PhysicsWorld.js +231 -630
  36. package/dist/PhysicsWorld.js.map +1 -1
  37. package/dist/RacingLineProfile.d.ts +116 -0
  38. package/dist/RacingLineProfile.d.ts.map +1 -0
  39. package/dist/RacingLineProfile.js +181 -0
  40. package/dist/RacingLineProfile.js.map +1 -0
  41. package/dist/Raycast.d.ts +11 -0
  42. package/dist/Raycast.d.ts.map +1 -1
  43. package/dist/Raycast.js +62 -8
  44. package/dist/Raycast.js.map +1 -1
  45. package/dist/RigidBody.d.ts +16 -9
  46. package/dist/RigidBody.d.ts.map +1 -1
  47. package/dist/RigidBody.js +23 -75
  48. package/dist/RigidBody.js.map +1 -1
  49. package/dist/SurfaceQuery.d.ts +72 -0
  50. package/dist/SurfaceQuery.d.ts.map +1 -0
  51. package/dist/SurfaceQuery.js +89 -0
  52. package/dist/SurfaceQuery.js.map +1 -0
  53. package/dist/VehicleDynamics.d.ts +10 -0
  54. package/dist/VehicleDynamics.d.ts.map +1 -1
  55. package/dist/VehicleDynamics.js +31 -3
  56. package/dist/VehicleDynamics.js.map +1 -1
  57. package/dist/VehicleMotion.d.ts +125 -0
  58. package/dist/VehicleMotion.d.ts.map +1 -0
  59. package/dist/VehicleMotion.js +373 -0
  60. package/dist/VehicleMotion.js.map +1 -0
  61. package/dist/index.d.ts +62 -17
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +70 -17
  64. package/dist/index.js.map +1 -1
  65. package/dist/solverless-entry.d.ts +41 -0
  66. package/dist/solverless-entry.d.ts.map +1 -0
  67. package/dist/solverless-entry.js +40 -0
  68. package/dist/solverless-entry.js.map +1 -0
  69. package/dist/solverless.d.ts +37 -0
  70. package/dist/solverless.d.ts.map +1 -0
  71. package/dist/solverless.js +36 -0
  72. package/dist/solverless.js.map +1 -0
  73. package/dist/world-entry.d.ts +31 -0
  74. package/dist/world-entry.d.ts.map +1 -0
  75. package/dist/world-entry.js +30 -0
  76. package/dist/world-entry.js.map +1 -0
  77. package/dist/world.d.ts +18 -0
  78. package/dist/world.d.ts.map +1 -0
  79. package/dist/world.js +17 -0
  80. package/dist/world.js.map +1 -0
  81. package/package.json +10 -2
@@ -100,6 +100,9 @@ export class CharacterController {
100
100
  jumpSpeed;
101
101
  groundProbeDistance;
102
102
  maxSlopeAngleRadians;
103
+ maxStepHeight;
104
+ stepDownDistance;
105
+ wallSlide;
103
106
  collisionMask;
104
107
  moveInput = [0, 0];
105
108
  jumpQueued = false;
@@ -110,7 +113,13 @@ export class CharacterController {
110
113
  desiredVelocity: [0, 0, 0],
111
114
  velocity: [0, 0, 0],
112
115
  speed: 0,
113
- jumpedThisFrame: false
116
+ jumpedThisFrame: false,
117
+ steppedUp: 0,
118
+ steppedDown: 0,
119
+ wallSliding: false,
120
+ ceilingHit: false,
121
+ slopeAngle: 0,
122
+ onSteepSlope: false
114
123
  };
115
124
  constructor(world, descriptor = {}) {
116
125
  this.world = world;
@@ -121,6 +130,11 @@ export class CharacterController {
121
130
  this.jumpSpeed = positiveFinite(descriptor.jumpSpeed ?? 4.2, "character jumpSpeed");
122
131
  this.groundProbeDistance = positiveFinite(descriptor.groundProbeDistance ?? 0.12, "character groundProbeDistance");
123
132
  this.maxSlopeAngleRadians = positiveFinite(descriptor.maxSlopeAngleRadians ?? Math.PI / 3, "character maxSlopeAngleRadians");
133
+ // Default step height is a third of the capsule's total height: tall enough for kerbs
134
+ // and stair treads, short enough that a character cannot walk up a wall.
135
+ this.maxStepHeight = Math.max(0, descriptor.maxStepHeight ?? (this.halfHeight + this.radius) * 0.34);
136
+ this.stepDownDistance = Math.max(0, descriptor.stepDownDistance ?? this.maxStepHeight);
137
+ this.wallSlide = descriptor.wallSlide ?? true;
124
138
  this.collisionMask = descriptor.collisionMask;
125
139
  this.body = world.createRigidBody({
126
140
  type: "dynamic",
@@ -152,7 +166,13 @@ export class CharacterController {
152
166
  groundColliderId: null,
153
167
  velocity: [0, 0, 0],
154
168
  speed: 0,
155
- jumpedThisFrame: false
169
+ jumpedThisFrame: false,
170
+ steppedUp: 0,
171
+ steppedDown: 0,
172
+ wallSliding: false,
173
+ ceilingHit: false,
174
+ slopeAngle: 0,
175
+ onSteepSlope: false
156
176
  };
157
177
  }
158
178
  step(dt) {
@@ -174,20 +194,193 @@ export class CharacterController {
174
194
  if (ground.grounded && nextVelocity[1] < 0) {
175
195
  nextVelocity[1] = 0;
176
196
  }
177
- if (this.jumpQueued && ground.grounded) {
197
+ /*
198
+ * Wall slide: redirect blocked motion along the surface instead of stopping.
199
+ *
200
+ * Without this a capsule pressed into a wall at an angle loses all its speed, because
201
+ * the solver cancels the whole velocity rather than only the component into the wall.
202
+ * The player feels it as sticking on geometry they are trying to run past. Removing
203
+ * only the normal component is the standard fix and is what "slide" means.
204
+ */
205
+ let wallSliding = false;
206
+ const horizontalSpeed = Math.hypot(nextVelocity[0], nextVelocity[2]);
207
+ // Captured before wall slide mutates nextVelocity; step-up needs the original intent.
208
+ const intendedDirection = horizontalSpeed > 1e-6
209
+ ? [nextVelocity[0] / horizontalSpeed, 0, nextVelocity[2] / horizontalSpeed]
210
+ : [0, 0, 0];
211
+ if (horizontalSpeed > 1e-4) {
212
+ const direction = [nextVelocity[0] / horizontalSpeed, 0, nextVelocity[2] / horizontalSpeed];
213
+ const wall = this.castHorizontal(direction, this.radius * 0.6);
214
+ if (wall && Math.abs(wall.normal[1]) < 0.5) {
215
+ if (this.wallSlide) {
216
+ const into = nextVelocity[0] * wall.normal[0] + nextVelocity[2] * wall.normal[2];
217
+ if (into < 0) {
218
+ nextVelocity[0] -= wall.normal[0] * into;
219
+ nextVelocity[2] -= wall.normal[2] * into;
220
+ wallSliding = true;
221
+ }
222
+ }
223
+ else {
224
+ nextVelocity[0] = 0;
225
+ nextVelocity[2] = 0;
226
+ }
227
+ }
228
+ }
229
+ /*
230
+ * Step up: lift over a ledge no taller than `maxStepHeight`.
231
+ *
232
+ * A capsule has no notion of a stair. Presented with a kerb it sees a vertical wall and
233
+ * stops, so a character walks into level geometry a player expects to stride over. The
234
+ * test is: is the obstacle ahead low enough, and is there room above it to stand?
235
+ */
236
+ let steppedUp = 0;
237
+ if (ground.grounded && this.maxStepHeight > 0 && horizontalSpeed > 1e-4) {
238
+ /*
239
+ * Use the *intended* direction, captured before the wall slide ran.
240
+ *
241
+ * Wall slide removes the component into the surface. Walking straight at a kerb that
242
+ * means the whole horizontal velocity is removed, so reading `nextVelocity` here
243
+ * found ~0 and the length guard skipped step-up entirely — the character stood
244
+ * against a climbable ledge forever. A character trying to walk into a step should
245
+ * step up precisely *because* its motion was blocked.
246
+ */
247
+ const direction = [
248
+ intendedDirection[0],
249
+ 0,
250
+ intendedDirection[2]
251
+ ];
252
+ {
253
+ const blocked = this.castHorizontal(direction, this.radius * 0.6);
254
+ /*
255
+ * Only step once the capsule is actually *at* the ledge.
256
+ *
257
+ * `castHorizontal` reports how far its probe sphere travelled, and that sphere is
258
+ * smaller than the capsule and starts at the capsule's centre — so `blocked.distance`
259
+ * is not the gap to the obstacle at all. The real gap is
260
+ * `probeRadius + distance - radius`, which `castHorizontal` now returns as `gap`.
261
+ * Treating the raw travel as the surface gap
262
+ * lifted the character while it was still ~0.5 units short of a 0.18-unit ledge, so
263
+ * it rose over nothing, `probeGroundAt` found the low floor below, and step-down put
264
+ * it straight back. Measured on a 0.18 ledge at x=3.0: step-up fired repeatedly from
265
+ * x=2.46, each frame immediately undone by a 0.196 step-down, `grounded` flickering
266
+ * true/false, and forward motion stalling for ~20 frames at a time before the
267
+ * character crept past.
268
+ *
269
+ * That is precisely the oscillation step-down exists to prevent, caused by step-up.
270
+ * The surface gap is the probe's travel less the capsule's own radius, and the
271
+ * character may only be lifted when that gap is genuinely closing.
272
+ */
273
+ if (blocked && Math.abs(blocked.normal[1]) < 0.5) {
274
+ const stepTarget = this.probeStepSurface(direction, blocked.distance);
275
+ if (stepTarget !== undefined) {
276
+ const rise = stepTarget - (this.body.position[1] - this.halfHeight - this.radius);
277
+ if (rise > 1e-4 && rise <= this.maxStepHeight) {
278
+ /*
279
+ * Lift *and* carry the capsule over the edge, not lift alone.
280
+ *
281
+ * Lifting while the capsule is still short of the obstacle leaves it hanging
282
+ * over the low floor it was already on. `probeGroundAt` then finds that floor
283
+ * and step-down immediately undoes the lift — an up/down oscillation, one
284
+ * cycle per frame, with `grounded` flickering and forward motion stalling.
285
+ * Measured on a 0.18 ledge before this: step-up of 0.158 cancelled by a
286
+ * step-down of 0.196, repeating for ~20 frames while x moved 0.004.
287
+ *
288
+ * That is the exact oscillation step-down exists to prevent, caused by
289
+ * step-up.
290
+ *
291
+ * The fix has to be geometric, not a cooldown. A capsule lifted while its
292
+ * centre is still short of the obstacle face has its *support point* over the
293
+ * low floor, so the ground probe is right to find that floor and step-down is
294
+ * right to act — suppressing step-down for a frame would only hide a character
295
+ * standing on nothing. The capsule must clear the face: advance by the measured
296
+ * surface gap (closing the remaining distance) plus its own radius (carrying
297
+ * the support point past the edge), which is why a step-up is inherently a
298
+ * small teleport rather than an impulse.
299
+ */
300
+ const carry = blocked.gap + this.radius * 1.05;
301
+ this.body.setPosition([
302
+ this.body.position[0] + direction[0] * carry,
303
+ this.body.position[1] + rise,
304
+ this.body.position[2] + direction[2] * carry
305
+ ]);
306
+ steppedUp = rise;
307
+ // The obstacle is cleared, so the wall-slide redirect no longer applies.
308
+ wallSliding = false;
309
+ }
310
+ }
311
+ }
312
+ }
313
+ }
314
+ /*
315
+ * Step down: stay glued to a descending surface within `stepDownDistance`.
316
+ *
317
+ * Without this, walking down stairs launches the character off every edge: it leaves
318
+ * the ground, falls, lands, and repeats. `grounded` flickers, which breaks coyote time,
319
+ * footstep audio and any state machine keyed on standing on the floor.
320
+ */
321
+ let steppedDown = 0;
322
+ if (!ground.grounded && !jumpedThisFrame && this.stepDownDistance > 0 && nextVelocity[1] <= 0 && this.state.grounded) {
323
+ const below = this.probeGroundAt(this.stepDownDistance + this.radius);
324
+ if (below.grounded && below.distance !== undefined && below.distance <= this.stepDownDistance) {
325
+ this.body.setPosition([
326
+ this.body.position[0],
327
+ this.body.position[1] - below.distance,
328
+ this.body.position[2]
329
+ ]);
330
+ steppedDown = below.distance;
331
+ nextVelocity[1] = 0;
332
+ }
333
+ }
334
+ if (this.jumpQueued && (ground.grounded || steppedDown > 0)) {
178
335
  nextVelocity[1] = this.jumpSpeed;
179
336
  jumpedThisFrame = true;
180
337
  }
181
338
  this.jumpQueued = false;
339
+ /*
340
+ * Ceiling: cancel upward velocity when the head is blocked.
341
+ *
342
+ * A jump into a low ceiling otherwise keeps its upward velocity and the character
343
+ * hovers against the geometry for the rest of the rise, then drops — which reads as
344
+ * sticking to the roof.
345
+ */
346
+ let ceilingHit = false;
347
+ if (nextVelocity[1] > 0) {
348
+ const headOrigin = [
349
+ this.body.position[0],
350
+ this.body.position[1] + this.halfHeight,
351
+ this.body.position[2]
352
+ ];
353
+ const above = this.world.sphereCast(headOrigin, this.radius * 0.9, [0, 1, 0], {
354
+ maxDistance: this.radius * 0.5,
355
+ includeSensors: false,
356
+ // Never detect our own capsule: a self-hit at distance 0 reads as a wall.
357
+ ignoreBodies: [this.body.id],
358
+ ...(this.collisionMask === undefined ? {} : { mask: this.collisionMask })
359
+ });
360
+ if (above && above.normal[1] < -0.3) {
361
+ nextVelocity[1] = 0;
362
+ ceilingHit = true;
363
+ }
364
+ }
365
+ const grounded = (ground.grounded || steppedDown > 0) && !jumpedThisFrame;
366
+ // Slope angle from the ground normal, so gameplay can react to a hill without
367
+ // re-deriving it from a raycast the controller already did.
368
+ const slopeAngle = grounded ? Math.acos(Math.min(1, Math.max(-1, ground.normal[1]))) : 0;
182
369
  this.body.setVelocity(nextVelocity);
183
370
  this.state = {
184
- grounded: ground.grounded && !jumpedThisFrame,
371
+ grounded,
185
372
  groundNormal: ground.normal,
186
373
  groundColliderId: ground.colliderId,
187
374
  desiredVelocity,
188
375
  velocity: [...nextVelocity],
189
376
  speed: Math.hypot(nextVelocity[0], nextVelocity[2]),
190
- jumpedThisFrame
377
+ jumpedThisFrame,
378
+ steppedUp,
379
+ steppedDown,
380
+ wallSliding,
381
+ ceilingHit,
382
+ slopeAngle,
383
+ onSteepSlope: ground.steep === true
191
384
  };
192
385
  return this.state;
193
386
  }
@@ -199,6 +392,163 @@ export class CharacterController {
199
392
  velocity: [...this.state.velocity]
200
393
  };
201
394
  }
395
+ /**
396
+ * Horizontal sweep ahead of the capsule's mid-section, for wall and ledge detection.
397
+ *
398
+ * Returns both the sweep's own travel (`distance`, which callers feed back into
399
+ * `probeStepSurface` so the two probes stay consistent) and `gap`, the distance from the
400
+ * **capsule's surface** to the obstacle. The two differ by the probe sphere's radius less
401
+ * the capsule's, and conflating them is what made step-up fire early: see the comment at
402
+ * the step-up call site.
403
+ */
404
+ castHorizontal(direction, distance) {
405
+ /*
406
+ * Probe just above the capsule's base, not above step height.
407
+ *
408
+ * An earlier version placed this at `base + maxStepHeight`, reasoning that a kerb
409
+ * should not be mistaken for a wall. That put the probe *above* every obstacle it was
410
+ * meant to find: with a 0.2 capsule and a 0.25 step height the probe sat at y=1.049
411
+ * while the 0.18-unit ledge topped out at 0.68, so it reported no obstacle at all and
412
+ * the character walked into the ledge and stopped without ever seeing it.
413
+ *
414
+ * The correct division of labour is: this probe finds *anything* ahead, and
415
+ * `probeStepSurface` decides whether it is short enough to climb. Classifying the
416
+ * obstacle is the step probe's job, not the wall probe's.
417
+ */
418
+ const probeRadius = this.radius * 0.7;
419
+ /*
420
+ * The sweep sphere must sit entirely above the floor the character stands on.
421
+ *
422
+ * At `base + 0.6r` with a `0.85r` sphere the sphere's underside reaches `base - 0.25r`
423
+ * — below the floor — so the sweep detected the ground itself as a wall. The character
424
+ * then believed it was permanently against an obstacle and never moved, at any
425
+ * position, on flat ground.
426
+ *
427
+ * Offset by slightly more than the probe radius so the sphere clears the surface, and
428
+ * keep the probe low enough to still see a kerb.
429
+ */
430
+ const origin = [
431
+ this.body.position[0],
432
+ this.body.position[1] - this.halfHeight - this.radius + probeRadius * 1.15,
433
+ this.body.position[2]
434
+ ];
435
+ /*
436
+ * Reach is expressed as a margin from the capsule's *surface*, not from its centre.
437
+ *
438
+ * Two corrections live here, in order.
439
+ *
440
+ * First: a sweep of radius 0.7r starting at the centre only extends 0.7r + travel, so
441
+ * geometry the capsule is already touching — at exactly r — sat behind the reach and
442
+ * reported no hit. The character walked into a ledge and stopped without ever seeing it.
443
+ * Hence the `this.radius +` term.
444
+ *
445
+ * Second, and the reason this comment is longer than it was: that term double-counts.
446
+ * The sweep sphere's leading point is already `probeRadius` ahead of its centre, so
447
+ * `maxDistance = radius + distance` detects an obstacle `radius + distance + probeRadius`
448
+ * from the centre — `distance + probeRadius` from the capsule's surface, not `distance`.
449
+ * Measured with r=0.24: the intended 0.144 margin became 0.312, so the character halted
450
+ * a third of its own radius short of every wall and ledge. Subtracting `probeRadius`
451
+ * makes the requested margin mean what it says, which is what lets the step-up gate below
452
+ * be stated in surface terms.
453
+ */
454
+ const hit = this.world.sphereCast(origin, probeRadius, direction, {
455
+ maxDistance: Math.max(0, this.radius + distance - probeRadius),
456
+ includeSensors: false,
457
+ // Never detect our own capsule: a self-hit at distance 0 reads as a wall.
458
+ ignoreBodies: [this.body.id],
459
+ ...(this.collisionMask === undefined ? {} : { mask: this.collisionMask })
460
+ });
461
+ if (!hit)
462
+ return undefined;
463
+ /*
464
+ * The probe sphere's leading point is `probeRadius` ahead of its centre, so the obstacle
465
+ * sits `probeRadius + hit.distance` from the capsule's centre and `- this.radius` from the
466
+ * capsule's surface. Clamped at zero: already-touching geometry reports a gap of 0, not a
467
+ * negative one.
468
+ */
469
+ const gap = Math.max(0, probeRadius + hit.distance - this.radius);
470
+ return { normal: orientAgainst(normalizeVec3(hit.normal), direction), distance: hit.distance, gap };
471
+ }
472
+ /**
473
+ * Surface height just past an obstacle, or undefined when there is nothing to stand on.
474
+ *
475
+ * Probes downward from above the maximum step height at a point slightly ahead of the
476
+ * capsule. If it finds a walkable surface, that height is the top of the step.
477
+ */
478
+ probeStepSurface(direction, obstacleDistance) {
479
+ /*
480
+ * Probe just past the obstacle the wall sweep actually found.
481
+ *
482
+ * A fixed `1.1 * radius` lookahead was wrong whenever the wall sweep triggered further
483
+ * out than that: the character halted 0.246 units from a ledge while the step probe
484
+ * sampled only 0.22 ahead, so it measured the *low* floor it was already standing on,
485
+ * computed a rise of ~0, and never stepped. Deriving the lookahead from the measured
486
+ * obstacle distance keeps the two probes consistent by construction.
487
+ */
488
+ const ahead = Math.max(this.radius * 1.1, obstacleDistance + this.radius * 0.85);
489
+ const origin = [
490
+ this.body.position[0] + direction[0] * ahead,
491
+ this.body.position[1] - this.halfHeight - this.radius + this.maxStepHeight + this.radius,
492
+ this.body.position[2] + direction[2] * ahead
493
+ ];
494
+ const hit = this.world.raycast(origin, [0, -1, 0], {
495
+ maxDistance: this.maxStepHeight + this.radius * 2,
496
+ includeSensors: false,
497
+ // Never detect our own capsule: a self-hit at distance 0 reads as a wall.
498
+ ignoreBodies: [this.body.id],
499
+ ...(this.collisionMask === undefined ? {} : { mask: this.collisionMask })
500
+ });
501
+ if (!hit)
502
+ return undefined;
503
+ /*
504
+ * Orient the normal against the ray before judging walkability.
505
+ *
506
+ * A raycast returns the face normal unoriented, so a downward ray landing on the top
507
+ * face of a box can report [0,-1,0]. Testing that raw value against cos(maxSlope)
508
+ * rejected every legitimate step: the top of a kerb looked like a ceiling.
509
+ */
510
+ const normal = orientAgainst(normalizeVec3(hit.normal), [0, -1, 0]);
511
+ // A step is only a step if its top is walkable; a steep face is a wall.
512
+ if (normal[1] < Math.cos(this.maxSlopeAngleRadians))
513
+ return undefined;
514
+ return hit.point[1];
515
+ }
516
+ /** Ground probe with a caller-supplied reach, used by step-down. */
517
+ probeGroundAt(maxDistance) {
518
+ const origin = [
519
+ this.body.position[0],
520
+ this.body.position[1] - this.halfHeight + this.groundProbeDistance,
521
+ this.body.position[2]
522
+ ];
523
+ const hit = this.world.sphereCast(origin, this.radius * 0.92, [0, -1, 0], {
524
+ maxDistance,
525
+ includeSensors: false,
526
+ // Never detect our own capsule: a self-hit at distance 0 reads as a wall.
527
+ ignoreBodies: [this.body.id],
528
+ ...(this.collisionMask === undefined ? {} : { mask: this.collisionMask })
529
+ });
530
+ const minGroundNormalY = Math.cos(this.maxSlopeAngleRadians);
531
+ if (!hit)
532
+ return { grounded: false, normal: [0, 1, 0], colliderId: null };
533
+ /*
534
+ * Orient before judging walkability, not after.
535
+ *
536
+ * A sweep against a box returns the face normal unoriented, so a downward probe onto a
537
+ * flat floor reports [0,-1,0]. Comparing that raw value to cos(maxSlope) rejects the
538
+ * floor: -1 < 0.5. The character stood on a solid surface and reported grounded:false
539
+ * for every frame, which disabled jumping, step-up and step-down at once.
540
+ */
541
+ const normal = orientAgainst(normalizeVec3(hit.normal), [0, -1, 0]);
542
+ if (normal[1] < minGroundNormalY) {
543
+ return { grounded: false, normal, colliderId: hit.colliderId };
544
+ }
545
+ return {
546
+ grounded: true,
547
+ normal,
548
+ colliderId: hit.colliderId,
549
+ distance: Math.max(0, hit.distance - this.groundProbeDistance)
550
+ };
551
+ }
202
552
  probeGround() {
203
553
  const origin = [
204
554
  this.body.position[0],
@@ -208,15 +558,38 @@ export class CharacterController {
208
558
  const hit = this.world.sphereCast(origin, this.radius * 0.92, [0, -1, 0], {
209
559
  maxDistance: this.groundProbeDistance + this.radius * 0.35,
210
560
  includeSensors: false,
561
+ // Never detect our own capsule: a self-hit at distance 0 reads as a wall.
562
+ ignoreBodies: [this.body.id],
211
563
  ...(this.collisionMask === undefined ? {} : { mask: this.collisionMask })
212
564
  });
213
565
  const minGroundNormalY = Math.cos(this.maxSlopeAngleRadians);
214
- if (!hit || hit.normal[1] < minGroundNormalY) {
566
+ if (!hit) {
215
567
  return { grounded: false, normal: [0, 1, 0], colliderId: null };
216
568
  }
217
- return { grounded: true, normal: normalizeVec3(hit.normal), colliderId: hit.colliderId };
569
+ // Orient before the walkability test; see probeGroundAt for why this matters.
570
+ const oriented = orientAgainst(normalizeVec3(hit.normal), [0, -1, 0]);
571
+ if (oriented[1] < minGroundNormalY) {
572
+ /*
573
+ * Too steep to stand on, but still report the real normal.
574
+ *
575
+ * Returning world up here discarded the information a caller needs to slide down a
576
+ * slope, and made a steep face indistinguishable from open air.
577
+ */
578
+ return { grounded: false, normal: oriented, colliderId: hit.colliderId, steep: true };
579
+ }
580
+ return { grounded: true, normal: oriented, colliderId: hit.colliderId };
218
581
  }
219
582
  }
583
+ /**
584
+ * Flip a normal so it faces back along the query direction.
585
+ *
586
+ * Raycasts and sweeps report a face's own normal, which may point either way depending on
587
+ * winding. Callers almost always want the side they hit from.
588
+ */
589
+ function orientAgainst(normal, direction) {
590
+ const facing = normal[0] * direction[0] + normal[1] * direction[1] + normal[2] * direction[2];
591
+ return facing > 0 ? [-normal[0], -normal[1], -normal[2]] : normal;
592
+ }
220
593
  function positiveFinite(value, name) {
221
594
  if (!Number.isFinite(value) || value <= 0) {
222
595
  throw new Error(`${name} must be a finite positive number.`);
@@ -1 +1 @@
1
- {"version":3,"file":"CharacterController.js","sourceRoot":"","sources":["../../../../packages/physics/src/CharacterController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CharacterController.js","sourceRoot":"","sources":["../../../../packages/physics/src/CharacterController.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { type Vec3 } from "./Shape.js";
2
2
  import type { RigidBody } from "./RigidBody.js";
3
- export type ConstraintType = "fixed" | "hinge" | "slider" | "spring";
3
+ export type ConstraintType = "fixed" | "hinge" | "slider" | "spring" | "ball-socket" | "motorised-hinge";
4
4
  export type ConstraintDescriptor = {
5
5
  readonly type: ConstraintType;
6
6
  readonly bodyA: RigidBody;
@@ -10,6 +10,14 @@ export type ConstraintDescriptor = {
10
10
  readonly restLength?: number;
11
11
  readonly stiffness?: number;
12
12
  readonly axis?: Vec3;
13
+ /** Spring damping ratio, `spring` only. */
14
+ readonly damping?: number;
15
+ /** Target angular speed in rad/s, `motorised-hinge` only. */
16
+ readonly motorSpeed?: number;
17
+ /** Maximum torque the motor may apply, `motorised-hinge` only. */
18
+ readonly maxMotorTorque?: number;
19
+ /** Angular limits in radians, hinge kinds only. */
20
+ readonly limits?: readonly [number, number];
13
21
  };
14
22
  export declare class Constraint {
15
23
  readonly type: ConstraintType;
@@ -21,11 +29,19 @@ export declare class Constraint {
21
29
  readonly restLength: number;
22
30
  readonly stiffness: number;
23
31
  readonly axis: Vec3;
32
+ readonly damping: number;
33
+ readonly maxMotorTorque: number;
34
+ readonly limits: readonly [number, number] | undefined;
35
+ private motorSpeedValue;
36
+ private enabled;
24
37
  constructor(descriptor: ConstraintDescriptor);
25
- solve(): void;
38
+ /** `motorised-hinge` only: change the driven speed at runtime. */
39
+ setMotorSpeed(speed: number): void;
40
+ motorSpeed(): number;
41
+ /** Turn the constraint off without destroying it. */
42
+ setEnabled(enabled: boolean): void;
43
+ isEnabled(): boolean;
26
44
  private anchorAWorld;
27
45
  private anchorBWorld;
28
- private applyError;
29
- private applyVelocityError;
30
46
  }
31
47
  //# sourceMappingURL=Constraint.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Constraint.d.ts","sourceRoot":"","sources":["../../../../packages/physics/src/Constraint.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6F,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;AAClI,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAErE,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC;IAC7B,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;CACtB,CAAC;AAEF,qBAAa,UAAU;IACrB,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;gBAER,UAAU,EAAE,oBAAoB;IAyB5C,KAAK,IAAI,IAAI;IAgCb,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,kBAAkB;CAa3B"}
1
+ {"version":3,"file":"Constraint.d.ts","sourceRoot":"","sources":["../../../../packages/physics/src/Constraint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyE,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;AAC9G,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,aAAa,GAAG,iBAAiB,CAAC;AAEzG,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC;IAC7B,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;IACrB,2CAA2C;IAC3C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,6DAA6D;IAC7D,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,kEAAkE;IAClE,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,mDAAmD;IACnD,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7C,CAAC;AAEF,qBAAa,UAAU;IACrB,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IACvD,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,OAAO,CAAQ;gBAEX,UAAU,EAAE,oBAAoB;IAsC5C,kEAAkE;IAClE,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKlC,UAAU,IAAI,MAAM;IAIpB,qDAAqD;IACrD,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIlC,SAAS,IAAI,OAAO;IAIpB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,YAAY;CAGrB"}