@codexo/exojs-physics 0.13.0 → 0.15.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 (76) hide show
  1. package/README.md +17 -10
  2. package/dist/esm/Collider.d.ts +17 -6
  3. package/dist/esm/Collider.js +28 -6
  4. package/dist/esm/Collider.js.map +1 -1
  5. package/dist/esm/ContactGraph.d.ts +49 -3
  6. package/dist/esm/ContactGraph.js +132 -44
  7. package/dist/esm/ContactGraph.js.map +1 -1
  8. package/dist/esm/PhysicsBody.d.ts +145 -15
  9. package/dist/esm/PhysicsBody.js +282 -21
  10. package/dist/esm/PhysicsBody.js.map +1 -1
  11. package/dist/esm/PhysicsWorld.d.ts +177 -39
  12. package/dist/esm/PhysicsWorld.js +412 -35
  13. package/dist/esm/PhysicsWorld.js.map +1 -1
  14. package/dist/esm/backend/NativePhysicsBackend.d.ts +5 -0
  15. package/dist/esm/backend/NativePhysicsBackend.js +14 -0
  16. package/dist/esm/backend/NativePhysicsBackend.js.map +1 -1
  17. package/dist/esm/backend/PhysicsBackend.d.ts +9 -1
  18. package/dist/esm/binding/BindingRegistry.d.ts +1 -2
  19. package/dist/esm/binding/BindingRegistry.js +2 -2
  20. package/dist/esm/binding/BindingRegistry.js.map +1 -1
  21. package/dist/esm/binding/PhysicsBinding.d.ts +7 -18
  22. package/dist/esm/binding/PhysicsBinding.js +9 -8
  23. package/dist/esm/binding/PhysicsBinding.js.map +1 -1
  24. package/dist/esm/broadphase/SweepAndPrune.d.ts +1 -0
  25. package/dist/esm/broadphase/SweepAndPrune.js +32 -3
  26. package/dist/esm/broadphase/SweepAndPrune.js.map +1 -1
  27. package/dist/esm/collision/CollisionProxy.d.ts +2 -2
  28. package/dist/esm/collision/narrowphase.js +91 -38
  29. package/dist/esm/collision/narrowphase.js.map +1 -1
  30. package/dist/esm/debug/PhysicsDebugDraw.d.ts +8 -1
  31. package/dist/esm/debug/PhysicsDebugDraw.js +26 -2
  32. package/dist/esm/debug/PhysicsDebugDraw.js.map +1 -1
  33. package/dist/esm/index.js +7 -0
  34. package/dist/esm/index.js.map +1 -1
  35. package/dist/esm/joints/DistanceJoint.d.ts +71 -0
  36. package/dist/esm/joints/DistanceJoint.js +176 -0
  37. package/dist/esm/joints/DistanceJoint.js.map +1 -0
  38. package/dist/esm/joints/Joint.d.ts +25 -0
  39. package/dist/esm/joints/Joint.js +24 -0
  40. package/dist/esm/joints/Joint.js.map +1 -0
  41. package/dist/esm/joints/MouseJoint.d.ts +57 -0
  42. package/dist/esm/joints/MouseJoint.js +137 -0
  43. package/dist/esm/joints/MouseJoint.js.map +1 -0
  44. package/dist/esm/joints/PrismaticJoint.d.ts +85 -0
  45. package/dist/esm/joints/PrismaticJoint.js +241 -0
  46. package/dist/esm/joints/PrismaticJoint.js.map +1 -0
  47. package/dist/esm/joints/RevoluteJoint.d.ts +81 -0
  48. package/dist/esm/joints/RevoluteJoint.js +217 -0
  49. package/dist/esm/joints/RevoluteJoint.js.map +1 -0
  50. package/dist/esm/joints/WeldJoint.d.ts +61 -0
  51. package/dist/esm/joints/WeldJoint.js +159 -0
  52. package/dist/esm/joints/WeldJoint.js.map +1 -0
  53. package/dist/esm/joints/WheelJoint.d.ts +92 -0
  54. package/dist/esm/joints/WheelJoint.js +256 -0
  55. package/dist/esm/joints/WheelJoint.js.map +1 -0
  56. package/dist/esm/math.js +15 -1
  57. package/dist/esm/math.js.map +1 -1
  58. package/dist/esm/physicsBuildInfo.js +2 -2
  59. package/dist/esm/public.d.ts +9 -2
  60. package/dist/esm/query/QueryEngine.d.ts +2 -2
  61. package/dist/esm/query/QueryEngine.js +13 -4
  62. package/dist/esm/query/QueryEngine.js.map +1 -1
  63. package/dist/esm/shapes/AnyShape.d.ts +9 -0
  64. package/dist/esm/shapes/CircleShape.d.ts +1 -2
  65. package/dist/esm/shapes/CircleShape.js.map +1 -1
  66. package/dist/esm/shapes/PolygonShape.d.ts +1 -2
  67. package/dist/esm/shapes/PolygonShape.js +45 -17
  68. package/dist/esm/shapes/PolygonShape.js.map +1 -1
  69. package/dist/esm/shapes/index.d.ts +1 -0
  70. package/dist/esm/solver/ContactSolver.d.ts +87 -0
  71. package/dist/esm/solver/ContactSolver.js +490 -0
  72. package/dist/esm/solver/ContactSolver.js.map +1 -0
  73. package/dist/esm/sort.d.ts +17 -0
  74. package/dist/esm/sort.js +54 -0
  75. package/dist/esm/sort.js.map +1 -0
  76. package/package.json +3 -3
@@ -1,15 +1,22 @@
1
1
  export type { Aabb } from './Aabb';
2
- export type { BindingOptions } from './binding/PhysicsBinding';
3
2
  export { PhysicsBinding } from './binding/PhysicsBinding';
4
3
  export type { ColliderOptions } from './Collider';
5
4
  export { Collider } from './Collider';
6
5
  export type { CollisionEvent, ContactPoint, SensorEvent } from './events';
6
+ export { DistanceJoint, type DistanceJointOptions } from './joints/DistanceJoint';
7
+ export { Joint } from './joints/Joint';
8
+ export { MouseJoint, type MouseJointOptions } from './joints/MouseJoint';
9
+ export { PrismaticJoint, type PrismaticJointOptions } from './joints/PrismaticJoint';
10
+ export { RevoluteJoint, type RevoluteJointOptions } from './joints/RevoluteJoint';
11
+ export { WeldJoint, type WeldJointOptions } from './joints/WeldJoint';
12
+ export { WheelJoint, type WheelJointOptions } from './joints/WheelJoint';
7
13
  export type { BodyOptions } from './PhysicsBody';
8
14
  export { PhysicsBody } from './PhysicsBody';
9
15
  export { type PhysicsBuildInfo, physicsBuildInfo } from './physicsBuildInfo';
10
- export type { PhysicsWorldOptions, StaticColliderOptions } from './PhysicsWorld';
16
+ export type { AttachOptions, PhysicsWorldOptions } from './PhysicsWorld';
11
17
  export { PhysicsWorld } from './PhysicsWorld';
12
18
  export type { QueryFilter, RayHit } from './query/QueryEngine';
19
+ export type { AnyShape } from './shapes/AnyShape';
13
20
  export { BoxShape } from './shapes/BoxShape';
14
21
  export { CircleShape } from './shapes/CircleShape';
15
22
  export { PolygonShape } from './shapes/PolygonShape';
@@ -1,7 +1,7 @@
1
1
  import type { Aabb } from '../Aabb';
2
2
  import type { Collider } from '../Collider';
3
3
  import type { PhysicsBody } from '../PhysicsBody';
4
- import type { Shape } from '../shapes/Shape';
4
+ import type { AnyShape } from '../shapes/AnyShape';
5
5
  import type { VectorLike } from '../types';
6
6
  /** A category/mask/group filter applied to a query. Omitting it matches everything. */
7
7
  export type QueryFilter = Partial<{
@@ -47,5 +47,5 @@ export declare class QueryEngine {
47
47
  /** All collider hits along the ray, sorted by distance. Writes into `out` (cleared first) when given. */
48
48
  rayCastAll(origin: VectorLike, direction: VectorLike, filter?: QueryFilter, out?: RayHit[], maxDistance?: number): RayHit[];
49
49
  /** Colliders overlapping `shape` placed at `position`/`angle`. Allocates a fresh array. */
50
- overlapShape(shape: Shape, position: VectorLike, filter?: QueryFilter, angle?: number): Collider[];
50
+ overlapShape(shape: AnyShape, position: VectorLike, filter?: QueryFilter, angle?: number): Collider[];
51
51
  }
@@ -116,6 +116,7 @@ class QueryEngine {
116
116
  return out;
117
117
  }
118
118
  }
119
+ /** Read a flat vertex/normal buffer in-bounds: callers index within 0..count-1. */
119
120
  /** `true` when world point `(px, py)` lies inside `collider`'s shape. */
120
121
  const pointInCollider = (collider, px, py) => {
121
122
  if (!aabbContainsPoint(collider.aabb, px, py)) {
@@ -132,7 +133,11 @@ const pointInCollider = (collider, px, py) => {
132
133
  const normals = collider.worldNormals;
133
134
  const count = collider.shape.count;
134
135
  for (let i = 0; i < count; i++) {
135
- if (normals[i * 2] * (px - verts[i * 2]) + normals[i * 2 + 1] * (py - verts[i * 2 + 1]) > 0) {
136
+ const nx = normals[i * 2];
137
+ const ny = normals[i * 2 + 1];
138
+ const vx = verts[i * 2];
139
+ const vy = verts[i * 2 + 1];
140
+ if (nx * (px - vx) + ny * (py - vy) > 0) {
136
141
  return false;
137
142
  }
138
143
  }
@@ -147,7 +152,8 @@ const rayCastCollider = (collider, ox, oy, dx, dy, maxDistance) => {
147
152
  };
148
153
  const rayCastCircle = (collider, ox, oy, dx, dy, maxDistance) => {
149
154
  const c = collider.worldCenter;
150
- const r = collider.shape.radius;
155
+ // Dispatched only for circle colliders; the fallback is unreachable.
156
+ const r = collider.shape.type === 'circle' ? collider.shape.radius : 0;
151
157
  const mx = ox - c.x;
152
158
  const my = oy - c.y;
153
159
  const b = mx * dx + my * dy;
@@ -176,7 +182,8 @@ const rayCastCircle = (collider, ox, oy, dx, dy, maxDistance) => {
176
182
  const rayCastPolygon = (collider, ox, oy, dx, dy, maxDistance) => {
177
183
  const verts = collider.worldVertices;
178
184
  const normals = collider.worldNormals;
179
- const count = collider.shape.count;
185
+ // Dispatched only for polygon colliders; the fallback is unreachable.
186
+ const count = collider.shape.type === 'polygon' ? collider.shape.count : 0;
180
187
  let tmin = 0;
181
188
  let tmax = maxDistance;
182
189
  let enterNx = 0;
@@ -185,7 +192,9 @@ const rayCastPolygon = (collider, ox, oy, dx, dy, maxDistance) => {
185
192
  for (let i = 0; i < count; i++) {
186
193
  const nx = normals[i * 2];
187
194
  const ny = normals[i * 2 + 1];
188
- const numerator = nx * (verts[i * 2] - ox) + ny * (verts[i * 2 + 1] - oy);
195
+ const vx = verts[i * 2];
196
+ const vy = verts[i * 2 + 1];
197
+ const numerator = nx * (vx - ox) + ny * (vy - oy);
189
198
  const denominator = nx * dx + ny * dy;
190
199
  if (denominator === 0) {
191
200
  // Parallel to this face: if the origin is outside it, the ray misses.
@@ -1 +1 @@
1
- {"version":3,"file":"QueryEngine.js","sources":["../../../../src/query/QueryEngine.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"QueryEngine.js","sources":["../../../../src/query/QueryEngine.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { CircleShape } from './CircleShape';
2
+ import type { PolygonShape } from './PolygonShape';
3
+ /**
4
+ * Discriminated union of the concrete shape kinds. Narrow via the literal
5
+ * `shape.type` discriminant (`'circle'` → {@link CircleShape}, `'polygon'` →
6
+ * {@link PolygonShape}) — no `as` casts needed. {@link BoxShape} is a
7
+ * {@link PolygonShape} subclass and carries `type: 'polygon'`.
8
+ */
9
+ export type AnyShape = CircleShape | PolygonShape;
@@ -1,11 +1,10 @@
1
- import type { ShapeType } from './Shape';
2
1
  import { Shape } from './Shape';
3
2
  /**
4
3
  * A circle of the given `radius` centred on the collider's local origin.
5
4
  * The cheapest shape for both broad- and narrow-phase.
6
5
  */
7
6
  export declare class CircleShape extends Shape {
8
- readonly type: ShapeType;
7
+ readonly type: "circle";
9
8
  readonly radius: number;
10
9
  readonly boundingRadius: number;
11
10
  readonly area: number;
@@ -1 +1 @@
1
- {"version":3,"file":"CircleShape.js","sources":["../../../../src/shapes/CircleShape.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAGA;;;AAGG;AACG,MAAO,WAAY,SAAQ,KAAK,CAAA;IACpB,IAAI,GAAc,QAAQ;AAC1B,IAAA,MAAM;AACN,IAAA,cAAc;AACd,IAAA,IAAI;IACJ,SAAS,GAAG,CAAC;IACb,SAAS,GAAG,CAAC;AACb,IAAA,WAAW;AAE3B,IAAA,WAAA,CAAmB,MAAc,EAAA;AAC/B,QAAA,KAAK,EAAE;AAEP,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE;AAC3C,YAAA,MAAM,IAAI,UAAU,CAAC,kEAAkE,MAAM,CAAA,CAAA,CAAG,CAAC;QACnG;AAEA,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,cAAc,GAAG,MAAM;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,GAAG,MAAM,GAAG,MAAM;;AAErC,QAAA,IAAI,CAAC,WAAW,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,MAAM,GAAG,MAAM;AAEpD,QAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;IACrB;AACD;;;;"}
1
+ {"version":3,"file":"CircleShape.js","sources":["../../../../src/shapes/CircleShape.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAEA;;;AAGG;AACG,MAAO,WAAY,SAAQ,KAAK,CAAA;IACpB,IAAI,GAAG,QAAiB;AACxB,IAAA,MAAM;AACN,IAAA,cAAc;AACd,IAAA,IAAI;IACJ,SAAS,GAAG,CAAC;IACb,SAAS,GAAG,CAAC;AACb,IAAA,WAAW;AAE3B,IAAA,WAAA,CAAmB,MAAc,EAAA;AAC/B,QAAA,KAAK,EAAE;AAEP,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE;AAC3C,YAAA,MAAM,IAAI,UAAU,CAAC,kEAAkE,MAAM,CAAA,CAAA,CAAG,CAAC;QACnG;AAEA,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,cAAc,GAAG,MAAM;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,GAAG,MAAM,GAAG,MAAM;;AAErC,QAAA,IAAI,CAAC,WAAW,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,MAAM,GAAG,MAAM;AAEpD,QAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;IACrB;AACD;;;;"}
@@ -1,5 +1,4 @@
1
1
  import type { VectorLike } from '../types';
2
- import type { ShapeType } from './Shape';
3
2
  import { Shape } from './Shape';
4
3
  /**
5
4
  * A convex polygon defined by ≥3 local-space vertices. Input vertices may be
@@ -11,7 +10,7 @@ import { Shape } from './Shape';
11
10
  * the narrow phase allocation-free; both are frozen.
12
11
  */
13
12
  export declare class PolygonShape extends Shape {
14
- readonly type: ShapeType;
13
+ readonly type: "polygon";
15
14
  /** Local-space vertices, CCW, flattened. */
16
15
  readonly vertices: readonly number[];
17
16
  /** Outward unit edge normals (edge `i` spans vertex `i → i+1`), flattened. */
@@ -34,19 +34,16 @@ class PolygonShape extends Shape {
34
34
  throw new RangeError(`PolygonShape: vertex has a non-finite component (${vertex.x}, ${vertex.y}).`);
35
35
  }
36
36
  // Reject coincident consecutive (and wrap-around) vertices.
37
- const px = points.length >= 2 ? points[points.length - 2] : NaN;
38
- const py = points.length >= 2 ? points[points.length - 1] : NaN;
37
+ const px = points.length >= 2 ? (points[points.length - 2] ?? NaN) : NaN;
38
+ const py = points.length >= 2 ? (points[points.length - 1] ?? NaN) : NaN;
39
39
  if (Math.hypot(vertex.x - px, vertex.y - py) < weldEpsilon) {
40
40
  continue;
41
41
  }
42
42
  points.push(vertex.x, vertex.y);
43
43
  }
44
- let count = points.length / 2;
45
44
  // Drop a wrap-around duplicate (last ≈ first).
46
- if (count >= 2 && Math.hypot(points[0] - points[points.length - 2], points[1] - points[points.length - 1]) < weldEpsilon) {
47
- points.length -= 2;
48
- count -= 1;
49
- }
45
+ dropWrapAroundDuplicate(points);
46
+ const count = points.length / 2;
50
47
  if (count < 3) {
51
48
  throw new RangeError(`PolygonShape: needs at least 3 distinct vertices after welding, received ${count}.`);
52
49
  }
@@ -66,9 +63,11 @@ class PolygonShape extends Shape {
66
63
  let cy = 0;
67
64
  let inertiaOrigin = 0;
68
65
  for (let i = 0; i < count; i++) {
66
+ const j = (i + 1) % count;
67
+ // Indices are provably in-bounds (0..count-1 over a length-2*count array);
68
+ // the `!` is zero-cost; a violation would surface as NaN, not a silent 0.
69
69
  const ix = points[i * 2];
70
70
  const iy = points[i * 2 + 1];
71
- const j = (i + 1) % count;
72
71
  const jx = points[j * 2];
73
72
  const jy = points[j * 2 + 1];
74
73
  const cross = ix * jy - jx * iy;
@@ -92,13 +91,30 @@ class PolygonShape extends Shape {
92
91
  // BoxShape (and any future convex helper) can extend this class.
93
92
  }
94
93
  }
94
+ /** Strip a trailing vertex that coincides with the first (wrap-around weld). */
95
+ const dropWrapAroundDuplicate = (points) => {
96
+ if (points.length < 4) {
97
+ return;
98
+ }
99
+ const firstX = points[0] ?? NaN;
100
+ const firstY = points[1] ?? NaN;
101
+ const lastX = points[points.length - 2] ?? NaN;
102
+ const lastY = points[points.length - 1] ?? NaN;
103
+ if (Math.hypot(firstX - lastX, firstY - lastY) < weldEpsilon) {
104
+ points.length -= 2;
105
+ }
106
+ };
95
107
  /** Signed area (positive = CCW). */
96
108
  const signedArea = (points) => {
97
109
  const count = points.length / 2;
98
110
  let sum = 0;
99
111
  for (let i = 0; i < count; i++) {
100
112
  const j = (i + 1) % count;
101
- sum += points[i * 2] * points[j * 2 + 1] - points[j * 2] * points[i * 2 + 1];
113
+ const ix = points[i * 2];
114
+ const iy = points[i * 2 + 1];
115
+ const jx = points[j * 2];
116
+ const jy = points[j * 2 + 1];
117
+ sum += ix * jy - jx * iy;
102
118
  }
103
119
  return sum / 2;
104
120
  };
@@ -108,8 +124,10 @@ const reverseWinding = (points) => {
108
124
  const j = count - 1 - i;
109
125
  const ix = points[i * 2];
110
126
  const iy = points[i * 2 + 1];
111
- points[i * 2] = points[j * 2];
112
- points[i * 2 + 1] = points[j * 2 + 1];
127
+ const jx = points[j * 2];
128
+ const jy = points[j * 2 + 1];
129
+ points[i * 2] = jx;
130
+ points[i * 2 + 1] = jy;
113
131
  points[j * 2] = ix;
114
132
  points[j * 2 + 1] = iy;
115
133
  }
@@ -120,8 +138,12 @@ const computeNormals = (points) => {
120
138
  const normals = [];
121
139
  for (let i = 0; i < count; i++) {
122
140
  const j = (i + 1) % count;
123
- const ex = points[j * 2] - points[i * 2];
124
- const ey = points[j * 2 + 1] - points[i * 2 + 1];
141
+ const ix = points[i * 2];
142
+ const iy = points[i * 2 + 1];
143
+ const jx = points[j * 2];
144
+ const jy = points[j * 2 + 1];
145
+ const ex = jx - ix;
146
+ const ey = jy - iy;
125
147
  const length = Math.hypot(ex, ey);
126
148
  normals.push(ey / length, -ex / length);
127
149
  }
@@ -134,10 +156,16 @@ const assertConvex = (points) => {
134
156
  const a = i;
135
157
  const b = (i + 1) % count;
136
158
  const c = (i + 2) % count;
137
- const e1x = points[b * 2] - points[a * 2];
138
- const e1y = points[b * 2 + 1] - points[a * 2 + 1];
139
- const e2x = points[c * 2] - points[b * 2];
140
- const e2y = points[c * 2 + 1] - points[b * 2 + 1];
159
+ const ax = points[a * 2];
160
+ const ay = points[a * 2 + 1];
161
+ const bx = points[b * 2];
162
+ const by = points[b * 2 + 1];
163
+ const cx = points[c * 2];
164
+ const cy = points[c * 2 + 1];
165
+ const e1x = bx - ax;
166
+ const e1y = by - ay;
167
+ const e2x = cx - bx;
168
+ const e2y = cy - by;
141
169
  // CCW polygon ⇒ every cross product must be ≥ 0 (strictly > 0 for no collinear run).
142
170
  if (e1x * e2y - e1y * e2x <= 0) {
143
171
  throw new RangeError('PolygonShape: vertices are not strictly convex (or contain collinear edges).');
@@ -1 +1 @@
1
- {"version":3,"file":"PolygonShape.js","sources":["../../../../src/shapes/PolygonShape.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PolygonShape.js","sources":["../../../../src/shapes/PolygonShape.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ export type { AnyShape } from './AnyShape';
1
2
  export { BoxShape } from './BoxShape';
2
3
  export { CircleShape } from './CircleShape';
3
4
  export { PolygonShape } from './PolygonShape';
@@ -0,0 +1,87 @@
1
+ import type { ContactRecord } from '../ContactGraph';
2
+ /**
3
+ * Native warm-started **TGS-Soft** contact solver (Box2D-v3 "soft step"). Driven
4
+ * by {@link PhysicsWorld} as a sub-stepping loop: detection runs once per frame,
5
+ * then {@link prepare} builds the per-contact constraints (effective masses,
6
+ * frame-start separation + impact velocity, soft factors, and a 2×2 block matrix
7
+ * for two-point manifolds) **once**, and each sub-step runs
8
+ * {@link warmStart} → {@link solveVelocities}(useBias=true) → integrate positions
9
+ * → {@link solveVelocities}(useBias=false) relax. A final {@link applyRestitution}
10
+ * pass adds bounce above the threshold.
11
+ *
12
+ * The position constraint is folded into the velocity solve as a **soft bias**
13
+ * (a damped-spring push-out whose stiffness is decoupled from the iteration
14
+ * count), recomputed each pass from the live per-body delta position/rotation —
15
+ * so there is no separate NGS geometric pass. The contact anchors are rotated by
16
+ * the live sub-step rotation each pass, so a tilting stack's restoring torque is
17
+ * computed against its current orientation (without this the tilt grows instead
18
+ * of being corrected). Two-point manifolds still solve the normal impulses **as a
19
+ * 2×2 block LCP** (Box2D-style), which propagates stack loads far better than
20
+ * solving the points sequentially; the block path carries the soft push-out as
21
+ * its velocity target (hard mass scale), while single-point contacts use the full
22
+ * soft mass/impulse scaling. Accumulated impulses are written back to each
23
+ * {@link ContactRecord} for warm-starting the next frame.
24
+ *
25
+ * Internal to {@link NativePhysicsBackend}; not part of the public surface.
26
+ */
27
+ export declare class ContactSolver {
28
+ private readonly _constraints;
29
+ private _count;
30
+ /**
31
+ * Build the per-contact constraints for this frame from the touching solid
32
+ * contacts. `h` is the sub-step duration (`fixedDelta / subStepCount`); the
33
+ * soft factors are derived from it together with `contactHertz`/`dampingRatio`.
34
+ * Runs once per frame (detection is not repeated per sub-step).
35
+ */
36
+ prepare(contacts: readonly ContactRecord[], h: number, contactHertz: number, dampingRatio: number): void;
37
+ /** Re-apply the cached impulses from the previous frame (warm-starting); runs each sub-step. */
38
+ warmStart(): void;
39
+ /**
40
+ * One velocity pass over every contact: the normal constraint (block when
41
+ * possible) then friction (Coulomb cone). With `useBias` the normal solve
42
+ * carries the soft push-out bias (the main pass, recomputed from the live
43
+ * separation); without it the relax pass drives the normal velocity to zero so
44
+ * the bias velocity does not remain in the bodies as injected energy.
45
+ */
46
+ solveVelocities(useBias: boolean): void;
47
+ /**
48
+ * Restitution pass, run once after the sub-step loop. For each loaded point
49
+ * whose frame-start impact speed exceeded the threshold, add the impulse that
50
+ * brings the post-solve normal velocity to `−restitution·impactSpeed`. Kept
51
+ * separate from the main solve so resting contacts (impact below threshold) do
52
+ * not micro-bounce.
53
+ */
54
+ applyRestitution(): void;
55
+ /** Refresh the live (rotated) contact arms from each body's accumulated sub-step rotation. */
56
+ private _updateArms;
57
+ private _solveVelocityContact;
58
+ /** Per-point friction: clamp the accumulated tangent impulse to the Coulomb cone `±μ·normalImpulse`. */
59
+ private _solveFriction;
60
+ /**
61
+ * Single-point (or ill-conditioned) soft normal solve, accumulated and clamped
62
+ * ≥ 0. The Box2D-v3 incremental form: with the soft bias active the impulse is
63
+ * `−normalMass·massScale·(vn − bias) − impulseScale·accumulated`, which both
64
+ * pushes out the penetration and bleeds a little stored impulse (the damped
65
+ * spring). The relax pass passes `useBias=false`, collapsing it to the hard
66
+ * `−normalMass·vn` (no bias, full mass, no impulse decay).
67
+ */
68
+ private _solveNormalSequential;
69
+ /**
70
+ * Two-point block normal solve (Box2D LCP): find both new normal impulses
71
+ * `x ≥ 0` so the post-solve normal velocities equal the push-out targets
72
+ * (`velocityBias`, zero in the relax pass) and are complementary, trying the
73
+ * four corners (both active, one active, none). The block path carries the
74
+ * soft push-out as its target but solves with a hard mass scale.
75
+ */
76
+ private _solveNormalBlock;
77
+ /** Apply the two-point block impulse deltas `(d1, d2)` along the normal at both contact points. */
78
+ private _applyBlock;
79
+ private _acquire;
80
+ /**
81
+ * Pooled constraint at `ci`. Every caller indexes within `0..this._count-1`
82
+ * and `_count` never exceeds the pool length, so the entry always exists; the
83
+ * throw is unreachable and only discharges `noUncheckedIndexedAccess` without a
84
+ * cast or non-null assertion.
85
+ */
86
+ private _at;
87
+ }