@codexo/exojs-physics 0.14.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.
- package/dist/esm/PhysicsBody.d.ts +32 -0
- package/dist/esm/PhysicsBody.js +60 -2
- package/dist/esm/PhysicsBody.js.map +1 -1
- package/dist/esm/PhysicsWorld.d.ts +74 -8
- package/dist/esm/PhysicsWorld.js +279 -7
- package/dist/esm/PhysicsWorld.js.map +1 -1
- package/dist/esm/binding/BindingRegistry.d.ts +1 -2
- package/dist/esm/binding/BindingRegistry.js +2 -2
- package/dist/esm/binding/BindingRegistry.js.map +1 -1
- package/dist/esm/binding/PhysicsBinding.d.ts +1 -12
- package/dist/esm/binding/PhysicsBinding.js +1 -3
- package/dist/esm/binding/PhysicsBinding.js.map +1 -1
- package/dist/esm/debug/PhysicsDebugDraw.d.ts +6 -0
- package/dist/esm/debug/PhysicsDebugDraw.js +24 -1
- package/dist/esm/debug/PhysicsDebugDraw.js.map +1 -1
- package/dist/esm/index.js +7 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/joints/DistanceJoint.d.ts +71 -0
- package/dist/esm/joints/DistanceJoint.js +176 -0
- package/dist/esm/joints/DistanceJoint.js.map +1 -0
- package/dist/esm/joints/Joint.d.ts +25 -0
- package/dist/esm/joints/Joint.js +24 -0
- package/dist/esm/joints/Joint.js.map +1 -0
- package/dist/esm/joints/MouseJoint.d.ts +57 -0
- package/dist/esm/joints/MouseJoint.js +137 -0
- package/dist/esm/joints/MouseJoint.js.map +1 -0
- package/dist/esm/joints/PrismaticJoint.d.ts +85 -0
- package/dist/esm/joints/PrismaticJoint.js +241 -0
- package/dist/esm/joints/PrismaticJoint.js.map +1 -0
- package/dist/esm/joints/RevoluteJoint.d.ts +81 -0
- package/dist/esm/joints/RevoluteJoint.js +217 -0
- package/dist/esm/joints/RevoluteJoint.js.map +1 -0
- package/dist/esm/joints/WeldJoint.d.ts +61 -0
- package/dist/esm/joints/WeldJoint.js +159 -0
- package/dist/esm/joints/WeldJoint.js.map +1 -0
- package/dist/esm/joints/WheelJoint.d.ts +92 -0
- package/dist/esm/joints/WheelJoint.js +256 -0
- package/dist/esm/joints/WheelJoint.js.map +1 -0
- package/dist/esm/math.js +15 -1
- package/dist/esm/math.js.map +1 -1
- package/dist/esm/physicsBuildInfo.js +2 -2
- package/dist/esm/public.d.ts +7 -1
- package/dist/esm/solver/ContactSolver.js +7 -0
- package/dist/esm/solver/ContactSolver.js.map +1 -1
- package/package.json +4 -4
|
@@ -18,6 +18,8 @@ export interface BodyOptions {
|
|
|
18
18
|
gravityScale?: number;
|
|
19
19
|
/** When `true`, the body never rotates under contacts (infinite rotational inertia). Default `false`. */
|
|
20
20
|
fixedRotation?: boolean;
|
|
21
|
+
/** When `true`, the body is swept against static geometry each step (CCD) so it cannot tunnel through thin walls. Default `false`. */
|
|
22
|
+
isBullet?: boolean;
|
|
21
23
|
/** Colliders to attach up-front. Each may be a {@link Collider} instance or its {@link ColliderOptions}. */
|
|
22
24
|
colliders?: Array<Collider | ColliderOptions>;
|
|
23
25
|
}
|
|
@@ -48,6 +50,8 @@ export declare class PhysicsBody {
|
|
|
48
50
|
gravityScale: number;
|
|
49
51
|
/** When `true`, rotational inertia is treated as infinite. */
|
|
50
52
|
fixedRotation: boolean;
|
|
53
|
+
/** When `true`, the body is swept against static geometry each step (CCD) so it cannot tunnel through thin walls. */
|
|
54
|
+
isBullet: boolean;
|
|
51
55
|
/** Total mass (0 for static/kinematic). */
|
|
52
56
|
mass: number;
|
|
53
57
|
/** Inverse mass (`0` = immovable). */
|
|
@@ -62,6 +66,8 @@ export declare class PhysicsBody {
|
|
|
62
66
|
linearVelocityY: number;
|
|
63
67
|
/** Angular velocity in rad/s. */
|
|
64
68
|
angularVelocity: number;
|
|
69
|
+
/** When `false`, this body is never put to sleep. Default `true`. */
|
|
70
|
+
allowSleep: boolean;
|
|
65
71
|
/** @internal — Delta position X accumulated across the frame's sub-steps by the TGS integrator; written into the transform once per frame by {@link _finalizePosition}. */
|
|
66
72
|
_deltaPosX: number;
|
|
67
73
|
/** @internal — Delta position Y accumulated across the frame's sub-steps by the TGS integrator. */
|
|
@@ -75,6 +81,15 @@ export declare class PhysicsBody {
|
|
|
75
81
|
private _forceX;
|
|
76
82
|
private _forceY;
|
|
77
83
|
private _torque;
|
|
84
|
+
/** @internal — seconds the body has stayed below the sleep thresholds (frozen while asleep). Read by the world's island pass. */
|
|
85
|
+
_sleepTime: number;
|
|
86
|
+
/** @internal — dense union-find index assigned by the world's island pass each step. */
|
|
87
|
+
_islandIndex: number;
|
|
88
|
+
/** @internal — world-space centre of mass at the start of the current fixed step (CCD swept-test origin). */
|
|
89
|
+
_ccdPrevX: number;
|
|
90
|
+
/** @internal — see {@link _ccdPrevX}. */
|
|
91
|
+
_ccdPrevY: number;
|
|
92
|
+
private _sleeping;
|
|
78
93
|
private _id;
|
|
79
94
|
private _owner;
|
|
80
95
|
private _attached;
|
|
@@ -113,6 +128,8 @@ export declare class PhysicsBody {
|
|
|
113
128
|
get isMassReady(): boolean;
|
|
114
129
|
/** `true` after the owning world has destroyed this body. */
|
|
115
130
|
get destroyed(): boolean;
|
|
131
|
+
/** `true` when the body is asleep — skipped by the integrator and solver until woken. */
|
|
132
|
+
get isSleeping(): boolean;
|
|
116
133
|
/**
|
|
117
134
|
* Attach a collider to this body. Accepts a {@link Collider} instance or its
|
|
118
135
|
* {@link ColliderOptions} (a convenience that constructs the collider for you).
|
|
@@ -168,6 +185,21 @@ export declare class PhysicsBody {
|
|
|
168
185
|
* re-syncing collider geometry per sub-step. Static bodies never move.
|
|
169
186
|
*/
|
|
170
187
|
_integratePosition(h: number): void;
|
|
188
|
+
/**
|
|
189
|
+
* @internal — advance the sleep timer over one fixed step `dt`. A body below
|
|
190
|
+
* both velocity thresholds accumulates time; a too-fast body, or one that opts
|
|
191
|
+
* out via {@link allowSleep}, resets it. The sleep/wake decision is made per
|
|
192
|
+
* island by the world (so a stack sleeps as a unit) from {@link _sleepTime}.
|
|
193
|
+
*/
|
|
194
|
+
_accumulateSleepTime(dt: number, linearThreshold: number, angularThreshold: number): void;
|
|
195
|
+
/** @internal — set the sleep state. Sleeping zeroes the velocity; waking resets the sleep timer. */
|
|
196
|
+
_setSleeping(sleeping: boolean): void;
|
|
197
|
+
/**
|
|
198
|
+
* Wake the body if it is asleep, resetting its sleep timer. The rest of its
|
|
199
|
+
* island wakes with it on the next step (a contact to an awake body keeps the
|
|
200
|
+
* whole island awake). Returns `this`.
|
|
201
|
+
*/
|
|
202
|
+
wake(): this;
|
|
171
203
|
/**
|
|
172
204
|
* @internal — apply the frame's accumulated delta position/rotation to the
|
|
173
205
|
* transform (rotating about the centre of mass), re-sync collider geometry and
|
package/dist/esm/PhysicsBody.js
CHANGED
|
@@ -21,6 +21,8 @@ class PhysicsBody {
|
|
|
21
21
|
gravityScale;
|
|
22
22
|
/** When `true`, rotational inertia is treated as infinite. */
|
|
23
23
|
fixedRotation;
|
|
24
|
+
/** When `true`, the body is swept against static geometry each step (CCD) so it cannot tunnel through thin walls. */
|
|
25
|
+
isBullet;
|
|
24
26
|
/** Total mass (0 for static/kinematic). */
|
|
25
27
|
mass = 0;
|
|
26
28
|
/** Inverse mass (`0` = immovable). */
|
|
@@ -35,6 +37,8 @@ class PhysicsBody {
|
|
|
35
37
|
linearVelocityY = 0;
|
|
36
38
|
/** Angular velocity in rad/s. */
|
|
37
39
|
angularVelocity = 0;
|
|
40
|
+
/** When `false`, this body is never put to sleep. Default `true`. */
|
|
41
|
+
allowSleep = true;
|
|
38
42
|
/** @internal — Delta position X accumulated across the frame's sub-steps by the TGS integrator; written into the transform once per frame by {@link _finalizePosition}. */
|
|
39
43
|
_deltaPosX = 0;
|
|
40
44
|
/** @internal — Delta position Y accumulated across the frame's sub-steps by the TGS integrator. */
|
|
@@ -48,6 +52,15 @@ class PhysicsBody {
|
|
|
48
52
|
_forceX = 0;
|
|
49
53
|
_forceY = 0;
|
|
50
54
|
_torque = 0;
|
|
55
|
+
/** @internal — seconds the body has stayed below the sleep thresholds (frozen while asleep). Read by the world's island pass. */
|
|
56
|
+
_sleepTime = 0;
|
|
57
|
+
/** @internal — dense union-find index assigned by the world's island pass each step. */
|
|
58
|
+
_islandIndex = 0;
|
|
59
|
+
/** @internal — world-space centre of mass at the start of the current fixed step (CCD swept-test origin). */
|
|
60
|
+
_ccdPrevX = 0;
|
|
61
|
+
/** @internal — see {@link _ccdPrevX}. */
|
|
62
|
+
_ccdPrevY = 0;
|
|
63
|
+
_sleeping = false;
|
|
51
64
|
_id = -1;
|
|
52
65
|
_owner = null;
|
|
53
66
|
_attached = false;
|
|
@@ -64,6 +77,7 @@ class PhysicsBody {
|
|
|
64
77
|
this.angularDamping = options.angularDamping ?? 0;
|
|
65
78
|
this.gravityScale = options.gravityScale ?? 1;
|
|
66
79
|
this.fixedRotation = options.fixedRotation ?? false;
|
|
80
|
+
this.isBullet = options.isBullet ?? false;
|
|
67
81
|
// Build up-front colliders now (no id/world registration until the body
|
|
68
82
|
// joins a world via `world.add()`). They sit in `_colliders` unsynchronised;
|
|
69
83
|
// `_attachToWorld` assigns ids, registers them and computes the mass model.
|
|
@@ -125,6 +139,10 @@ class PhysicsBody {
|
|
|
125
139
|
get destroyed() {
|
|
126
140
|
return this._destroyed;
|
|
127
141
|
}
|
|
142
|
+
/** `true` when the body is asleep — skipped by the integrator and solver until woken. */
|
|
143
|
+
get isSleeping() {
|
|
144
|
+
return this._sleeping;
|
|
145
|
+
}
|
|
128
146
|
/**
|
|
129
147
|
* Attach a collider to this body. Accepts a {@link Collider} instance or its
|
|
130
148
|
* {@link ColliderOptions} (a convenience that constructs the collider for you).
|
|
@@ -160,6 +178,7 @@ class PhysicsBody {
|
|
|
160
178
|
if (this._destroyed) {
|
|
161
179
|
throw new Error('PhysicsBody: cannot move a destroyed body.');
|
|
162
180
|
}
|
|
181
|
+
this.wake();
|
|
163
182
|
setTransform(this._transform, position.x, position.y, angle);
|
|
164
183
|
for (const collider of this._colliders) {
|
|
165
184
|
collider.synchronize(this._transform);
|
|
@@ -185,6 +204,7 @@ class PhysicsBody {
|
|
|
185
204
|
* sub-step and then cleared. No-op on static/kinematic bodies. Returns `this`.
|
|
186
205
|
*/
|
|
187
206
|
applyForce(forceX, forceY) {
|
|
207
|
+
this.wake();
|
|
188
208
|
this._forceX += forceX;
|
|
189
209
|
this._forceY += forceY;
|
|
190
210
|
return this;
|
|
@@ -194,6 +214,7 @@ class PhysicsBody {
|
|
|
194
214
|
* on static/kinematic bodies (and fixed-rotation bodies). Returns `this`.
|
|
195
215
|
*/
|
|
196
216
|
applyTorque(torque) {
|
|
217
|
+
this.wake();
|
|
197
218
|
this._torque += torque;
|
|
198
219
|
return this;
|
|
199
220
|
}
|
|
@@ -206,6 +227,7 @@ class PhysicsBody {
|
|
|
206
227
|
if (this.invMass === 0) {
|
|
207
228
|
return this;
|
|
208
229
|
}
|
|
230
|
+
this.wake();
|
|
209
231
|
this.linearVelocityX += impulseX * this.invMass;
|
|
210
232
|
this.linearVelocityY += impulseY * this.invMass;
|
|
211
233
|
if (pointX !== undefined && pointY !== undefined && this.invInertia !== 0) {
|
|
@@ -225,7 +247,7 @@ class PhysicsBody {
|
|
|
225
247
|
* every sub-step and cleared once per frame by {@link _finalizePosition}.
|
|
226
248
|
*/
|
|
227
249
|
_integrateVelocity(h, gravityX, gravityY) {
|
|
228
|
-
if (this.invMass === 0) {
|
|
250
|
+
if (this.invMass === 0 || this._sleeping) {
|
|
229
251
|
return;
|
|
230
252
|
}
|
|
231
253
|
this.linearVelocityX += (gravityX * this.gravityScale + this._forceX * this.invMass) * h;
|
|
@@ -245,7 +267,7 @@ class PhysicsBody {
|
|
|
245
267
|
* re-syncing collider geometry per sub-step. Static bodies never move.
|
|
246
268
|
*/
|
|
247
269
|
_integratePosition(h) {
|
|
248
|
-
if (this.type === 'static') {
|
|
270
|
+
if (this.type === 'static' || this._sleeping) {
|
|
249
271
|
return;
|
|
250
272
|
}
|
|
251
273
|
this._deltaPosX += this.linearVelocityX * h;
|
|
@@ -260,6 +282,42 @@ class PhysicsBody {
|
|
|
260
282
|
this._deltaSin = Math.sin(this._deltaAngle);
|
|
261
283
|
}
|
|
262
284
|
}
|
|
285
|
+
/**
|
|
286
|
+
* @internal — advance the sleep timer over one fixed step `dt`. A body below
|
|
287
|
+
* both velocity thresholds accumulates time; a too-fast body, or one that opts
|
|
288
|
+
* out via {@link allowSleep}, resets it. The sleep/wake decision is made per
|
|
289
|
+
* island by the world (so a stack sleeps as a unit) from {@link _sleepTime}.
|
|
290
|
+
*/
|
|
291
|
+
_accumulateSleepTime(dt, linearThreshold, angularThreshold) {
|
|
292
|
+
const tooFast = this.linearVelocityX * this.linearVelocityX + this.linearVelocityY * this.linearVelocityY > linearThreshold * linearThreshold ||
|
|
293
|
+
Math.abs(this.angularVelocity) > angularThreshold;
|
|
294
|
+
this._sleepTime = !this.allowSleep || tooFast ? 0 : this._sleepTime + dt;
|
|
295
|
+
}
|
|
296
|
+
/** @internal — set the sleep state. Sleeping zeroes the velocity; waking resets the sleep timer. */
|
|
297
|
+
_setSleeping(sleeping) {
|
|
298
|
+
if (this._sleeping === sleeping) {
|
|
299
|
+
return;
|
|
300
|
+
}
|
|
301
|
+
this._sleeping = sleeping;
|
|
302
|
+
if (sleeping) {
|
|
303
|
+
this.linearVelocityX = 0;
|
|
304
|
+
this.linearVelocityY = 0;
|
|
305
|
+
this.angularVelocity = 0;
|
|
306
|
+
}
|
|
307
|
+
else {
|
|
308
|
+
this._sleepTime = 0;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Wake the body if it is asleep, resetting its sleep timer. The rest of its
|
|
313
|
+
* island wakes with it on the next step (a contact to an awake body keeps the
|
|
314
|
+
* whole island awake). Returns `this`.
|
|
315
|
+
*/
|
|
316
|
+
wake() {
|
|
317
|
+
this._setSleeping(false);
|
|
318
|
+
this._sleepTime = 0;
|
|
319
|
+
return this;
|
|
320
|
+
}
|
|
263
321
|
/**
|
|
264
322
|
* @internal — apply the frame's accumulated delta position/rotation to the
|
|
265
323
|
* transform (rotating about the centre of mass), re-sync collider geometry and
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PhysicsBody.js","sources":["../../../src/PhysicsBody.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PhysicsBody.js","sources":["../../../src/PhysicsBody.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAsCA;;;;;;;;AAQG;MACU,WAAW,CAAA;AACN,IAAA,IAAI;;AAGb,IAAA,aAAa;;AAEb,IAAA,cAAc;;AAEd,IAAA,YAAY;;AAEZ,IAAA,aAAa;;AAEb,IAAA,QAAQ;;IAGR,IAAI,GAAG,CAAC;;IAER,OAAO,GAAG,CAAC;;IAEX,OAAO,GAAG,CAAC;;IAEX,UAAU,GAAG,CAAC;;IAGd,eAAe,GAAG,CAAC;;IAEnB,eAAe,GAAG,CAAC;;IAEnB,eAAe,GAAG,CAAC;;IAGnB,UAAU,GAAG,IAAI;;IAGjB,UAAU,GAAG,CAAC;;IAEd,UAAU,GAAG,CAAC;;IAEd,WAAW,GAAG,CAAC;;IAEf,SAAS,GAAG,CAAC;;IAEb,SAAS,GAAG,CAAC;IAEZ,OAAO,GAAG,CAAC;IACX,OAAO,GAAG,CAAC;IACX,OAAO,GAAG,CAAC;;IAGZ,UAAU,GAAG,CAAC;;IAEd,YAAY,GAAG,CAAC;;IAEhB,SAAS,GAAG,CAAC;;IAEb,SAAS,GAAG,CAAC;IAEZ,SAAS,GAAG,KAAK;IAEjB,GAAG,GAAG,EAAE;IACR,MAAM,GAAqB,IAAI;IAC/B,SAAS,GAAG,KAAK;AACR,IAAA,UAAU;IACV,UAAU,GAAe,EAAE;IACpC,KAAK,GAAG,CAAC;IACT,KAAK,GAAG,CAAC;IACT,UAAU,GAAG,KAAK;IAClB,UAAU,GAAG,KAAK;AAE1B,IAAA,WAAA,CAAmB,UAAuB,EAAE,EAAA;QAC1C,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,SAAS;QACrC,IAAI,CAAC,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;QACzG,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,CAAC;QAC/C,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,CAAC;QACjD,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,CAAC;QAC7C,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,KAAK;QACnD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,KAAK;;;;AAKzC,QAAA,IAAI,OAAO,CAAC,SAAS,EAAE;AACrB,YAAA,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,SAAS,EAAE;gBACrC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,YAAY,QAAQ,GAAG,KAAK,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC/E;QACF;IACF;;AAGA,IAAA,IAAW,EAAE,GAAA;QACX,OAAO,IAAI,CAAC,GAAG;IACjB;;AAGA,IAAA,IAAW,QAAQ,GAAA;QACjB,OAAO,IAAI,CAAC,SAAS;IACvB;;AAGA,IAAA,IAAW,CAAC,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1B;;AAGA,IAAA,IAAW,CAAC,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1B;;AAGA,IAAA,IAAW,KAAK,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK;IAC9B;;AAGA,IAAA,IAAW,QAAQ,GAAA;AACjB,QAAA,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IACzD;;AAGA,IAAA,IAAW,SAAS,GAAA;QAClB,OAAO,IAAI,CAAC,UAAU;IACxB;;AAGA,IAAA,IAAW,SAAS,GAAA;QAClB,OAAO,IAAI,CAAC,UAAU;IACxB;;AAGA,IAAA,IAAW,aAAa,GAAA;QACtB,OAAO,IAAI,CAAC,KAAK;IACnB;;AAGA,IAAA,IAAW,aAAa,GAAA;QACtB,OAAO,IAAI,CAAC,KAAK;IACnB;AAEA;;;;AAIG;AACH,IAAA,IAAW,WAAW,GAAA;QACpB,OAAO,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU;IACnD;;AAGA,IAAA,IAAW,SAAS,GAAA;QAClB,OAAO,IAAI,CAAC,UAAU;IACxB;;AAGA,IAAA,IAAW,UAAU,GAAA;QACnB,OAAO,IAAI,CAAC,SAAS;IACvB;AAEA;;;;;;;AAOG;AACI,IAAA,WAAW,CAAC,QAAoC,EAAA;AACrD,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC;QAC5E;;;AAIA,QAAA,MAAM,QAAQ,GAAG,QAAQ,YAAY,QAAQ,GAAG,QAAQ,GAAG,IAAI,QAAQ,CAAC,QAAQ,CAAC;AAEjF,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;;;;QAK9B,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,EAAE;AACjC,YAAA,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;YACzD,IAAI,CAAC,cAAc,EAAE;AACrB,YAAA,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;AACrC,YAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC;QACzC;AAEA,QAAA,OAAO,QAAQ;IACjB;AAEA;;;AAGG;IACI,YAAY,CAAC,QAAoB,EAAE,KAAA,GAAgB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAA;AAC7E,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC;QAC/D;QAEA,IAAI,CAAC,IAAI,EAAE;AAEX,QAAA,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC;AAE5D,QAAA,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;AACtC,YAAA,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;QACvC;AAEA,QAAA,OAAO,IAAI;IACb;;IAGO,oBAAoB,GAAA;AACzB,QAAA,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;AACtC,YAAA,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;QACvC;IACF;;AAGA,IAAA,IAAW,kBAAkB,GAAA;QAC3B,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK;IAChG;;AAGA,IAAA,IAAW,kBAAkB,GAAA;QAC3B,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK;IAChG;AAEA;;;AAGG;IACI,UAAU,CAAC,MAAc,EAAE,MAAc,EAAA;QAC9C,IAAI,CAAC,IAAI,EAAE;AACX,QAAA,IAAI,CAAC,OAAO,IAAI,MAAM;AACtB,QAAA,IAAI,CAAC,OAAO,IAAI,MAAM;AAEtB,QAAA,OAAO,IAAI;IACb;AAEA;;;AAGG;AACI,IAAA,WAAW,CAAC,MAAc,EAAA;QAC/B,IAAI,CAAC,IAAI,EAAE;AACX,QAAA,IAAI,CAAC,OAAO,IAAI,MAAM;AAEtB,QAAA,OAAO,IAAI;IACb;AAEA;;;;AAIG;AACI,IAAA,YAAY,CAAC,QAAgB,EAAE,QAAgB,EAAE,MAAe,EAAE,MAAe,EAAA;AACtF,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC,EAAE;AACtB,YAAA,OAAO,IAAI;QACb;QAEA,IAAI,CAAC,IAAI,EAAE;QACX,IAAI,CAAC,eAAe,IAAI,QAAQ,GAAG,IAAI,CAAC,OAAO;QAC/C,IAAI,CAAC,eAAe,IAAI,QAAQ,GAAG,IAAI,CAAC,OAAO;AAE/C,QAAA,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,EAAE;AACzE,YAAA,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC,kBAAkB;AAC3C,YAAA,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC,kBAAkB;AAE3C,YAAA,IAAI,CAAC,eAAe,IAAI,CAAC,EAAE,GAAG,QAAQ,GAAG,EAAE,GAAG,QAAQ,IAAI,IAAI,CAAC,UAAU;QAC3E;AAEA,QAAA,OAAO,IAAI;IACb;AAEA;;;;;;;;AAQG;AACI,IAAA,kBAAkB,CAAC,CAAS,EAAE,QAAgB,EAAE,QAAgB,EAAA;QACrE,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE;YACxC;QACF;QAEA,IAAI,CAAC,eAAe,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC;QACxF,IAAI,CAAC,eAAe,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC;AACxF,QAAA,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC;;QAG1D,IAAI,CAAC,eAAe,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa;QAClD,IAAI,CAAC,eAAe,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa;QAClD,IAAI,CAAC,eAAe,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc;IACrD;AAEA;;;;;;;AAOG;AACI,IAAA,kBAAkB,CAAC,CAAS,EAAA;QACjC,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;YAC5C;QACF;QAEA,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,eAAe,GAAG,CAAC;QAC3C,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,eAAe,GAAG,CAAC;QAC3C,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,eAAe,GAAG,CAAC;;;;;AAM5C,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,CAAC,EAAE;YAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;YAC3C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;QAC7C;IACF;AAEA;;;;;AAKG;AACI,IAAA,oBAAoB,CAAC,EAAU,EAAE,eAAuB,EAAE,gBAAwB,EAAA;QACvF,MAAM,OAAO,GACX,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,GAAG,eAAe,GAAG,eAAe;YAC7H,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,gBAAgB;QAEnD,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,EAAE;IAC1E;;AAGO,IAAA,YAAY,CAAC,QAAiB,EAAA;AACnC,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,QAAQ,EAAE;YAC/B;QACF;AAEA,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ;QAEzB,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,eAAe,GAAG,CAAC;AACxB,YAAA,IAAI,CAAC,eAAe,GAAG,CAAC;AACxB,YAAA,IAAI,CAAC,eAAe,GAAG,CAAC;QAC1B;aAAO;AACL,YAAA,IAAI,CAAC,UAAU,GAAG,CAAC;QACrB;IACF;AAEA;;;;AAIG;IACI,IAAI,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACxB,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC;AAEnB,QAAA,OAAO,IAAI;IACb;AAEA;;;;;;AAMG;IACI,iBAAiB,GAAA;AACtB,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC;AAChB,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC;AAChB,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC;QAEhB,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,KAAK,IAAI,CAAC,UAAU,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,IAAI,IAAI,CAAC,WAAW,KAAK,CAAC,CAAC,EAAE;YACxG,IAAI,CAAC,WAAW,EAAE;YAElB;QACF;QAEA,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,UAAU;QACzD,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,UAAU;QACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW;QACzD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;;AAG9B,QAAA,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC;QAEzI,IAAI,CAAC,WAAW,EAAE;AAElB,QAAA,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;AACtC,YAAA,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;QACvC;IACF;;IAGQ,WAAW,GAAA;AACjB,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC;AACnB,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC;AACnB,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC;AACpB,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC;AAClB,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC;IACpB;;AAGO,IAAA,eAAe,CAAC,QAAkB,EAAA;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC;AAE/C,QAAA,IAAI,KAAK,KAAK,EAAE,EAAE;YAChB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YAChC,IAAI,CAAC,cAAc,EAAE;QACvB;IACF;AAEA;;;;;;;;;;;;AAYG;IACI,cAAc,CAAC,KAAgB,EAAE,EAAU,EAAA;AAChD,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC;QACzE;AAEA,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;AACnB,QAAA,IAAI,CAAC,GAAG,GAAG,EAAE;AACb,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI;AAErB,QAAA,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;YACtC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,mBAAmB,EAAE,CAAC;QACrD;QAEA,IAAI,CAAC,cAAc,EAAE;AAErB,QAAA,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;AACtC,YAAA,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC;QACvC;AAEA,QAAA,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;AACtC,YAAA,KAAK,CAAC,iBAAiB,CAAC,QAAQ,CAAC;QACnC;IACF;;IAGO,cAAc,GAAA;AACnB,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;IACxB;;IAGQ,cAAc,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;AAC3B,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC;AACb,YAAA,IAAI,CAAC,OAAO,GAAG,CAAC;AAChB,YAAA,IAAI,CAAC,OAAO,GAAG,CAAC;AAChB,YAAA,IAAI,CAAC,UAAU,GAAG,CAAC;AACnB,YAAA,IAAI,CAAC,KAAK,GAAG,CAAC;AACd,YAAA,IAAI,CAAC,KAAK,GAAG,CAAC;AACd,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;YAEvB;QACF;QAEA,IAAI,IAAI,GAAG,CAAC;QACZ,IAAI,EAAE,GAAG,CAAC;QACV,IAAI,EAAE,GAAG,CAAC;QACV,IAAI,aAAa,GAAG,CAAC;QACrB,MAAM,KAAK,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AAE5B,QAAA,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;AACtC,YAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK;YAC5B,MAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC,IAAI;AAEvC,YAAA,IAAI,CAAC,IAAI,CAAC,EAAE;gBACV;YACF;;AAGA,YAAA,cAAc,CAAC,QAAQ,CAAC,cAAc,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC;YAChF,IAAI,IAAI,CAAC;AACT,YAAA,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;AACjB,YAAA,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;;AAEjB,YAAA,aAAa,IAAI,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC,WAAW,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QACrG;AAEA,QAAA,IAAI,IAAI,GAAG,CAAC,EAAE;YACZ,EAAE,IAAI,IAAI;YACV,EAAE,IAAI,IAAI;QACZ;AAEA,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC;AACtC,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;AACf,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;;AAEf,QAAA,MAAM,UAAU,GAAG,aAAa,GAAG,IAAI,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAE7D,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,UAAU;QAClD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,IAAI,UAAU,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,UAAU;AAC5E,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,CAAC;IAC5B;AACD;;;;"}
|
|
@@ -2,9 +2,10 @@ import type { SceneNode } from '@codexo/exojs';
|
|
|
2
2
|
import { Signal, Vector } from '@codexo/exojs';
|
|
3
3
|
import type { Aabb } from './Aabb';
|
|
4
4
|
import type { PhysicsBackend } from './backend/PhysicsBackend';
|
|
5
|
-
import type {
|
|
5
|
+
import type { PhysicsBinding } from './binding/PhysicsBinding';
|
|
6
6
|
import { Collider } from './Collider';
|
|
7
7
|
import type { CollisionEvent, SensorEvent } from './events';
|
|
8
|
+
import type { Joint } from './joints/Joint';
|
|
8
9
|
import type { BodyOwner } from './PhysicsBody';
|
|
9
10
|
import { PhysicsBody } from './PhysicsBody';
|
|
10
11
|
import type { QueryFilter, RayHit } from './query/QueryEngine';
|
|
@@ -30,8 +31,14 @@ export interface PhysicsWorldOptions {
|
|
|
30
31
|
contactHertz?: number;
|
|
31
32
|
/** Soft-contact damping ratio (≥ 1 keeps contacts from oscillating). Default `10`. */
|
|
32
33
|
dampingRatio?: number;
|
|
33
|
-
/**
|
|
34
|
-
|
|
34
|
+
/** Put resting bodies to sleep so they skip integration and solving. Default `true`. */
|
|
35
|
+
enableSleeping?: boolean;
|
|
36
|
+
/** Linear speed at or below which a body is a sleep candidate, px/s. Default `5`. */
|
|
37
|
+
sleepLinearVelocity?: number;
|
|
38
|
+
/** Angular speed at or below which a body is a sleep candidate, rad/s. Default `0.06`. */
|
|
39
|
+
sleepAngularVelocity?: number;
|
|
40
|
+
/** Seconds a body must stay below the sleep thresholds before it sleeps. Default `0.5`. */
|
|
41
|
+
timeToSleep?: number;
|
|
35
42
|
}
|
|
36
43
|
/**
|
|
37
44
|
* {@link PhysicsWorld.attach} convenience options: a body type plus a single
|
|
@@ -64,8 +71,6 @@ export interface AttachOptions {
|
|
|
64
71
|
isSensor?: boolean;
|
|
65
72
|
/** Category/mask/group collision filter; partials merge over the defaults. */
|
|
66
73
|
filter?: Partial<CollisionFilter>;
|
|
67
|
-
/** Binding options forwarded to {@link PhysicsWorld.bind}. */
|
|
68
|
-
binding?: BindingOptions;
|
|
69
74
|
}
|
|
70
75
|
/**
|
|
71
76
|
* The collision/query world: owns bodies, colliders, the detection backend,
|
|
@@ -113,20 +118,35 @@ export declare class PhysicsWorld implements BodyOwner {
|
|
|
113
118
|
readonly gravity: Vector;
|
|
114
119
|
/** The fixed-step accumulator. */
|
|
115
120
|
readonly timeStepper: TimeStepper;
|
|
116
|
-
/** Whether bound nodes interpolate between fixed steps (reserved; no effect yet). */
|
|
117
|
-
readonly interpolation: boolean;
|
|
118
121
|
/** TGS-Soft sub-steps per fixed step. */
|
|
119
122
|
readonly subStepCount: number;
|
|
120
123
|
/** Soft-contact stiffness in Hz. */
|
|
121
124
|
readonly contactHertz: number;
|
|
122
125
|
/** Soft-contact damping ratio. */
|
|
123
126
|
readonly dampingRatio: number;
|
|
127
|
+
/** Whether resting bodies are put to sleep. */
|
|
128
|
+
readonly enableSleeping: boolean;
|
|
129
|
+
/** Linear sleep threshold (px/s). */
|
|
130
|
+
readonly sleepLinearVelocity: number;
|
|
131
|
+
/** Angular sleep threshold (rad/s). */
|
|
132
|
+
readonly sleepAngularVelocity: number;
|
|
133
|
+
/** Seconds below the thresholds before a body sleeps. */
|
|
134
|
+
readonly timeToSleep: number;
|
|
124
135
|
private readonly _backend;
|
|
125
136
|
private readonly _bodies;
|
|
126
137
|
private readonly _colliders;
|
|
138
|
+
private readonly _joints;
|
|
127
139
|
private readonly _bindings;
|
|
128
140
|
private readonly _query;
|
|
129
141
|
private readonly _commands;
|
|
142
|
+
/** Pooled union-find parent array for the per-step island pass (reused; sized to the body count). */
|
|
143
|
+
private readonly _islandParent;
|
|
144
|
+
/** Pooled per-island minimum sleep time, indexed by union-find root. */
|
|
145
|
+
private readonly _islandMinSleep;
|
|
146
|
+
/** Pooled ray-hit buffer + origin/direction for the CCD swept test. */
|
|
147
|
+
private readonly _ccdHits;
|
|
148
|
+
private readonly _ccdOrigin;
|
|
149
|
+
private readonly _ccdDir;
|
|
130
150
|
private _nextBodyId;
|
|
131
151
|
private _nextColliderId;
|
|
132
152
|
private _dispatching;
|
|
@@ -156,6 +176,16 @@ export declare class PhysicsWorld implements BodyOwner {
|
|
|
156
176
|
destroyBody(body: PhysicsBody): void;
|
|
157
177
|
/** Destroy a single collider, recomputing its body's mass. Deferred when called inside a callback. */
|
|
158
178
|
destroyCollider(collider: Collider): void;
|
|
179
|
+
/** Live joints (read-only view). */
|
|
180
|
+
get joints(): readonly Joint[];
|
|
181
|
+
/**
|
|
182
|
+
* Add a constraint joint. Construct it first (`new DistanceJoint({ … })`),
|
|
183
|
+
* then add it. Wakes both bodies; safe inside a callback (registration is
|
|
184
|
+
* deferred). Returns the joint.
|
|
185
|
+
*/
|
|
186
|
+
addJoint<T extends Joint>(joint: T): T;
|
|
187
|
+
/** Remove a joint, waking both bodies so they respond to the lost constraint. Deferred when called inside a callback. */
|
|
188
|
+
removeJoint(joint: Joint): void;
|
|
159
189
|
/**
|
|
160
190
|
* Advance the world by `frameDeltaSeconds`. Accumulates into fixed steps; each
|
|
161
191
|
* fixed step runs detection once, then a TGS-Soft sub-step loop (integrate
|
|
@@ -165,7 +195,7 @@ export declare class PhysicsWorld implements BodyOwner {
|
|
|
165
195
|
*/
|
|
166
196
|
step(frameDeltaSeconds: number): void;
|
|
167
197
|
/** Link a body to a scene node; the node tracks the body after each step. */
|
|
168
|
-
bind(body: PhysicsBody, node: SceneNode
|
|
198
|
+
bind(body: PhysicsBody, node: SceneNode): PhysicsBinding;
|
|
169
199
|
/** Remove a body↔node link. */
|
|
170
200
|
unbind(body: PhysicsBody): void;
|
|
171
201
|
/** Colliders containing `point`. Fresh array. */
|
|
@@ -187,6 +217,42 @@ export declare class PhysicsWorld implements BodyOwner {
|
|
|
187
217
|
/** The detection backend (internal; consumed by the debug draw layer). */
|
|
188
218
|
get backend(): PhysicsBackend;
|
|
189
219
|
private _dispatchEvents;
|
|
220
|
+
/**
|
|
221
|
+
* Accumulate per-body sleep timers and put/keep islands of resting bodies
|
|
222
|
+
* asleep so a stack sleeps and wakes as one unit. An island is a connected
|
|
223
|
+
* component of dynamic bodies joined by touching solid contacts (static and
|
|
224
|
+
* kinematic bodies are boundaries, not nodes); it sleeps once every member has
|
|
225
|
+
* stayed below the sleep thresholds for `timeToSleep`, and wakes the instant
|
|
226
|
+
* any member does (e.g. an awake body merges into it via a new contact).
|
|
227
|
+
* Deterministic: union-find roots break ties by lower index and the contact
|
|
228
|
+
* set is id-sorted.
|
|
229
|
+
*/
|
|
230
|
+
private _updateSleeping;
|
|
231
|
+
/** Union-find union by lower index (deterministic roots). */
|
|
232
|
+
private _union;
|
|
233
|
+
/** Union-find find with path halving. */
|
|
234
|
+
private _find;
|
|
235
|
+
/** Build each joint's per-frame constraint data (once per fixed step). */
|
|
236
|
+
private _prepareJoints;
|
|
237
|
+
/** Re-apply each joint's accumulated impulse (each sub-step). */
|
|
238
|
+
private _warmStartJoints;
|
|
239
|
+
/** One joint velocity pass (each sub-step, after the contacts). */
|
|
240
|
+
private _solveJoints;
|
|
241
|
+
/** Whether any dynamic body is flagged for continuous collision (bullet mode). */
|
|
242
|
+
private _hasBullets;
|
|
243
|
+
/** Snapshot each bullet's centre of mass at the start of the fixed step (the swept-test origin). */
|
|
244
|
+
private _recordBulletPositions;
|
|
245
|
+
/**
|
|
246
|
+
* Sweep each bullet's centre of mass along this fixed step's motion against every
|
|
247
|
+
* other body's colliders; if it would cross one, clamp the body just short of the
|
|
248
|
+
* surface and resolve the impact about the surface normal (a slide for a non-bouncy
|
|
249
|
+
* body, an elastic reflection as restitution → 1) so it cannot tunnel. Sweeps the
|
|
250
|
+
* centre point — good for small/point-like projectiles; a full swept-shape TOI for
|
|
251
|
+
* large fast bodies is backlog (raise sub-steps or thicken geometry meanwhile).
|
|
252
|
+
*/
|
|
253
|
+
private _advanceBullets;
|
|
254
|
+
/** The highest restitution among a body's colliders (its CCD bounce factor). */
|
|
255
|
+
private _bulletRestitution;
|
|
190
256
|
/** Run `command` now, or queue it when inside an event dispatch (deferred to end of step). */
|
|
191
257
|
private _defer;
|
|
192
258
|
private _drainCommands;
|