@vworlds/vecs-physics 1.0.48 → 1.0.50

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.
@@ -20,6 +20,49 @@ export interface PhysicsStats {
20
20
  /** Contacts currently alive in Box2D, touching or not. */
21
21
  contactCount: number;
22
22
  }
23
+ /**
24
+ * The resolved settings of a physics world, read by {@link PhysicsQueries.settings}: the values
25
+ * `PhysicsModule` built the Box2D world with, defaults filled in.
26
+ */
27
+ export interface PhysicsSettings {
28
+ /** World gravity in m/s². */
29
+ readonly gravity: Readonly<Vec2>;
30
+ /** Duration of one physics step, in seconds. */
31
+ readonly fixedTimeStep: number;
32
+ /** Box2D substeps per physics step. */
33
+ readonly subSteps: number;
34
+ /** Box2D's cap on the linear speed of a body, in m/s. */
35
+ readonly maximumLinearSpeed: number;
36
+ }
37
+ /**
38
+ * A body's motion as Box2D holds it, filled by {@link PhysicsQueries.bodyMotion}: what a peer needs
39
+ * to extrapolate the body, such as a dead-reckoning baseline. Plain data; allocate one and reuse it.
40
+ */
41
+ export declare class BodyMotion {
42
+ /** Whether the body is awake. A sleeping body does not move and reports zero velocities. */
43
+ awake: boolean;
44
+ /** Linear velocity of the center of mass, x, in m/s. */
45
+ vx: number;
46
+ /** Linear velocity of the center of mass, y, in m/s. */
47
+ vy: number;
48
+ /** Angular velocity in rad/s. */
49
+ w: number;
50
+ /** Linear damping, per second. */
51
+ linearDamping: number;
52
+ /** Angular damping, per second. */
53
+ angularDamping: number;
54
+ /** Center of mass in body coordinates, x, in meters. */
55
+ localCenterX: number;
56
+ /** Center of mass in body coordinates, y, in meters. */
57
+ localCenterY: number;
58
+ /**
59
+ * The gravity scale Box2D applies: the body's own scale, or 0 for a body without mass (a static
60
+ * or kinematic body), which Box2D never accelerates by gravity.
61
+ */
62
+ gravityScale: number;
63
+ /** Whether the body is exempt from Box2D's cap on rotation per step (`Body.allowFastRotation`). */
64
+ allowFastRotation: boolean;
65
+ }
23
66
  /** A single ray-cast hit, resolved to a Vecs shape entity with plain-data
24
67
  * geometry — never a Box2D handle. */
25
68
  export interface RayHit {
@@ -67,6 +110,24 @@ export interface PhysicsQueries {
67
110
  * which makes them suitable for asserting that handles return to baseline after teardown.
68
111
  */
69
112
  stats(): PhysicsStats;
113
+ /** Returns the settings the Box2D world was built with. The object is shared: do not mutate it. */
114
+ settings(): PhysicsSettings;
115
+ /**
116
+ * Returns whether `entity`'s body is awake: `false` for an entity without a live body. It
117
+ * allocates nothing, so it is cheap enough to call per body per step.
118
+ */
119
+ isAwake(entity: Entity): boolean;
120
+ /**
121
+ * Reads `entity`'s body motion into `out`: whether it is awake, its velocities, its damping, its
122
+ * center of mass and the gravity scale Box2D applies to it. Each call reads Box2D, and the two
123
+ * vectors cost a short-lived wasm copy each, so call it when the values are needed, not every
124
+ * step.
125
+ *
126
+ * @param entity The body entity.
127
+ * @param out The object to overwrite.
128
+ * @returns `false`, leaving `out` untouched, when `entity` has no live body.
129
+ */
130
+ bodyMotion(entity: Entity, out: BodyMotion): boolean;
70
131
  /** Casts a ray from `from` to `to` and returns the closest hit, or `undefined`
71
132
  * if the ray hits nothing (or only hits shapes whose entity has since been
72
133
  * destroyed / removed). */
@@ -8,12 +8,44 @@
8
8
  // that boundary. Scratch allocations (b2Vec2, b2QueryFilter, b2AABB,
9
9
  // b2ShapeProxy) reuse global pools allocated at module load. Transient
10
10
  // allocations like b2RayResult are freed via explicit `finally { .delete() }`.
11
+ import { Body } from "../body/components.js";
11
12
  import { Box, Capsule, Circle, Segment } from "../shapes/components.js";
12
13
  import { scr_b2AABB, scr_b2QueryFilter, scr_b2ShapeProxy, scr_b2Vec2, } from "./runtime.js";
13
14
  import { getPhysicsEngine, } from "./engine.js";
14
15
  /** Box2D's `B2_MAX_POLYGON_VERTICES` — the most points a cast {@link Polygon}
15
16
  * (and a `b2ShapeProxy`) can carry. Mirrors `src/shapes/lifecycle.ts`. */
16
17
  const MAX_POLYGON_VERTICES = 8;
18
+ /**
19
+ * A body's motion as Box2D holds it, filled by {@link PhysicsQueries.bodyMotion}: what a peer needs
20
+ * to extrapolate the body, such as a dead-reckoning baseline. Plain data; allocate one and reuse it.
21
+ */
22
+ export class BodyMotion {
23
+ constructor() {
24
+ /** Whether the body is awake. A sleeping body does not move and reports zero velocities. */
25
+ this.awake = false;
26
+ /** Linear velocity of the center of mass, x, in m/s. */
27
+ this.vx = 0;
28
+ /** Linear velocity of the center of mass, y, in m/s. */
29
+ this.vy = 0;
30
+ /** Angular velocity in rad/s. */
31
+ this.w = 0;
32
+ /** Linear damping, per second. */
33
+ this.linearDamping = 0;
34
+ /** Angular damping, per second. */
35
+ this.angularDamping = 0;
36
+ /** Center of mass in body coordinates, x, in meters. */
37
+ this.localCenterX = 0;
38
+ /** Center of mass in body coordinates, y, in meters. */
39
+ this.localCenterY = 0;
40
+ /**
41
+ * The gravity scale Box2D applies: the body's own scale, or 0 for a body without mass (a static
42
+ * or kinematic body), which Box2D never accelerates by gravity.
43
+ */
44
+ this.gravityScale = 1;
45
+ /** Whether the body is exempt from Box2D's cap on rotation per step (`Body.allowFastRotation`). */
46
+ this.allowFastRotation = false;
47
+ }
48
+ }
17
49
  /**
18
50
  * Returns the {@link PhysicsQueries} facade for `world`.
19
51
  *
@@ -31,6 +63,51 @@ class PhysicsQueriesImpl {
31
63
  this.world = world;
32
64
  this.engine = engine;
33
65
  }
66
+ bodyMotion(entity, out) {
67
+ const body = entity.get(Body);
68
+ const bodyId = body?._bodyId;
69
+ if (body === undefined || bodyId === undefined) {
70
+ return false;
71
+ }
72
+ const { box2d } = this.engine;
73
+ out.awake = box2d.b2Body_IsAwake(bodyId);
74
+ const linear = box2d.b2Body_GetLinearVelocity(bodyId);
75
+ try {
76
+ out.vx = linear.x;
77
+ out.vy = linear.y;
78
+ }
79
+ finally {
80
+ linear.delete();
81
+ }
82
+ out.w = box2d.b2Body_GetAngularVelocity(bodyId);
83
+ out.linearDamping = box2d.b2Body_GetLinearDamping(bodyId);
84
+ out.angularDamping = box2d.b2Body_GetAngularDamping(bodyId);
85
+ const center = box2d.b2Body_GetLocalCenterOfMass(bodyId);
86
+ try {
87
+ out.localCenterX = center.x;
88
+ out.localCenterY = center.y;
89
+ }
90
+ finally {
91
+ center.delete();
92
+ }
93
+ // Box2D applies gravity times the scale only to a body with mass (src/solver.c:99).
94
+ out.gravityScale = box2d.b2Body_GetMass(bodyId) > 0 ? box2d.b2Body_GetGravityScale(bodyId) : 0;
95
+ out.allowFastRotation = body.allowFastRotation;
96
+ return true;
97
+ }
98
+ isAwake(entity) {
99
+ const bodyId = entity.get(Body)?._bodyId;
100
+ return bodyId !== undefined && this.engine.box2d.b2Body_IsAwake(bodyId);
101
+ }
102
+ settings() {
103
+ const engine = this.engine;
104
+ return (this._settings ?? (this._settings = Object.freeze({
105
+ gravity: Object.freeze({ x: engine.gravityX, y: engine.gravityY }),
106
+ fixedTimeStep: engine.fixedTimeStep,
107
+ subSteps: engine.subSteps,
108
+ maximumLinearSpeed: engine.maximumLinearSpeed,
109
+ })));
110
+ }
34
111
  stats() {
35
112
  const { box2d, worldId } = this.engine;
36
113
  const counters = box2d.b2World_GetCounters(worldId);
@@ -1 +1 @@
1
- {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../../../src/adapter/queries.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../../../src/adapter/queries.ts"],"names":[],"mappings":"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"}
package/body/pose_out.js CHANGED
@@ -40,28 +40,70 @@ export class BodyPoseOutModule extends Module {
40
40
  .add(PhysicsSystemTag);
41
41
  }
42
42
  }
43
- // `move.transform`, `.p` and `.q` are Embind views into the move event's own memory (same address
44
- // on every read, `transform.p` even shares the transform's), not copies. Read each once and leave
45
- // them alone: calling `delete()` on a view runs the C++ destructor on an interior pointer of the
46
- // event, which corrupts the wasm heap. The event's single `move.delete()` releases the memory.
43
+ /**
44
+ * Copy one moved body's Box2D pose into its pose components, writing only the components whose
45
+ * values changed.
46
+ *
47
+ * Box2D reports every awake body on every step and returns bit-identical values for a body that
48
+ * did not move or turn, while every `entity.set` counts as a modification: it fires `set` hooks,
49
+ * routes `update` events to every system watching the component and, for a networked component,
50
+ * is replicated to every client that sees the entity. Writing unchanged values would make a body
51
+ * flying straight re-send its constant `Rotation` every step and an awake body at rest re-send its
52
+ * whole pose. So each component the body carries is compared with the new values field by field
53
+ * using exact equality (no epsilon) and `set` runs only when at least one field differs.
54
+ *
55
+ * `Position` is always maintained and is created by the first write. `Rotation`, `LinearVelocity`
56
+ * and `AngularVelocity` are maintained only on bodies that already carry them, so a body never
57
+ * gains a component it did not ask for.
58
+ *
59
+ * Inside a system `entity.get` returns the committed state, because writes are deferred until the
60
+ * system finishes. That state includes every write earlier systems made this frame, a user
61
+ * teleport for one, and is exactly what the new values must be compared with. The check allocates
62
+ * nothing per body: the new values are read into locals and compared directly, and the `{ x, y }`
63
+ * literals exist only on the write path.
64
+ *
65
+ * Embind handle rules, which the compare must keep: `move.transform`, `.p` and `.q` are views into
66
+ * the move event's own memory (same address on every read, `transform.p` even shares the
67
+ * transform's), not copies. Read each once and leave them alone: calling `delete()` on a view runs
68
+ * the C++ destructor on an interior pointer of the event, which corrupts the wasm heap. The event's
69
+ * single `move.delete()` releases the memory. The linear velocity is a by-value return, a heap copy
70
+ * this function owns and deletes.
71
+ */
47
72
  function writePose(engine, entity, transform, bodyId) {
48
73
  const p = transform.p;
49
- entity.set(Position, { x: p.x, y: p.y });
50
- if (entity.get(Rotation) !== undefined) {
51
- entity.set(Rotation, { angle: transform.q.GetAngle() });
74
+ const x = p.x;
75
+ const y = p.y;
76
+ const position = entity.get(Position);
77
+ if (position === undefined || position.x !== x || position.y !== y) {
78
+ entity.set(Position, { x, y });
52
79
  }
53
- if (entity.get(LinearVelocity) !== undefined) {
54
- // By-value return: a heap copy that this code owns.
80
+ const rotation = entity.get(Rotation);
81
+ if (rotation !== undefined) {
82
+ const angle = transform.q.GetAngle();
83
+ if (rotation.angle !== angle) {
84
+ entity.set(Rotation, { angle });
85
+ }
86
+ }
87
+ const linearVelocity = entity.get(LinearVelocity);
88
+ if (linearVelocity !== undefined) {
55
89
  const linear = engine.box2d.b2Body_GetLinearVelocity(bodyId);
56
90
  try {
57
- entity.set(LinearVelocity, { x: linear.x, y: linear.y });
91
+ const vx = linear.x;
92
+ const vy = linear.y;
93
+ if (linearVelocity.x !== vx || linearVelocity.y !== vy) {
94
+ entity.set(LinearVelocity, { x: vx, y: vy });
95
+ }
58
96
  }
59
97
  finally {
60
98
  linear.delete();
61
99
  }
62
100
  }
63
- if (entity.get(AngularVelocity) !== undefined) {
64
- entity.set(AngularVelocity, { value: engine.box2d.b2Body_GetAngularVelocity(bodyId) });
101
+ const angularVelocity = entity.get(AngularVelocity);
102
+ if (angularVelocity !== undefined) {
103
+ const value = engine.box2d.b2Body_GetAngularVelocity(bodyId);
104
+ if (angularVelocity.value !== value) {
105
+ entity.set(AngularVelocity, { value });
106
+ }
65
107
  }
66
108
  }
67
109
  //# sourceMappingURL=pose_out.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pose_out.js","sourceRoot":"","sources":["../../../../src/body/pose_out.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pose_out.js","sourceRoot":"","sources":["../../../../src/body/pose_out.ts"],"names":[],"mappings":"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"}
@@ -2,21 +2,61 @@
2
2
  export declare class Force {
3
3
  x: number;
4
4
  y: number;
5
+ /**
6
+ * Whether a non-zero force wakes a sleeping body. Defaults to `true`.
7
+ *
8
+ * With `wake: false` a sleeping body stays asleep and ignores the force. A zero force
9
+ * (`x === 0 && y === 0`) is never applied and never wakes a body, whatever `wake` says, so a
10
+ * body holding an idle `Force { x: 0, y: 0 }` can still fall asleep. To wake a body, or keep it
11
+ * awake, use the `Sleep` component: `awake: true` wakes it and `enabled: false` stops it from
12
+ * falling asleep.
13
+ */
5
14
  wake: boolean;
6
15
  }
7
16
  /** Persistent torque (angular force). */
8
17
  export declare class Torque {
9
18
  value: number;
19
+ /**
20
+ * Whether a non-zero torque wakes a sleeping body. Defaults to `true`.
21
+ *
22
+ * With `wake: false` a sleeping body stays asleep and ignores the torque. A zero torque
23
+ * (`value === 0`) is never applied and never wakes a body, whatever `wake` says, so a body
24
+ * holding an idle `Torque { value: 0 }` can still fall asleep. To wake a body, or keep it
25
+ * awake, use the `Sleep` component: `awake: true` wakes it and `enabled: false` stops it from
26
+ * falling asleep.
27
+ */
10
28
  wake: boolean;
11
29
  }
12
30
  /** One-shot linear impulse in newton-seconds. Zeroed silently after applied. */
13
31
  export declare class Impulse {
14
32
  x: number;
15
33
  y: number;
34
+ /**
35
+ * Whether a non-zero impulse wakes a sleeping body. Defaults to `true`.
36
+ *
37
+ * Non-zero impulses set on a body before a step are summed, and the sum wakes the body if any
38
+ * of them has `wake: true`. With `wake: false` throughout, a sleeping body stays asleep and
39
+ * ignores the impulse. A zero impulse is ignored when it is set: it is not summed and its
40
+ * `wake` does not count. A sum that is exactly zero, such as `{ x: 5 }` followed by
41
+ * `{ x: -5 }`, is skipped when the impulses are applied. Neither wakes a body. To wake a body,
42
+ * or keep it awake, use the `Sleep` component: `awake: true` wakes it and `enabled: false`
43
+ * stops it from falling asleep.
44
+ */
16
45
  wake: boolean;
17
46
  }
18
47
  /** One-shot angular impulse. Zeroed silently after applied. */
19
48
  export declare class AngularImpulse {
20
49
  value: number;
50
+ /**
51
+ * Whether a non-zero angular impulse wakes a sleeping body. Defaults to `true`.
52
+ *
53
+ * Non-zero angular impulses set on a body before a step are summed, and the sum wakes the body
54
+ * if any of them has `wake: true`. With `wake: false` throughout, a sleeping body stays asleep
55
+ * and ignores the impulse. A zero impulse is ignored when it is set: it is not summed and its
56
+ * `wake` does not count. A sum that is exactly zero, such as `3` followed by `-3`, is skipped
57
+ * when the impulses are applied. Neither wakes a body. To wake a body, or keep it awake, use
58
+ * the `Sleep` component: `awake: true` wakes it and `enabled: false` stops it from falling
59
+ * asleep.
60
+ */
21
61
  wake: boolean;
22
62
  }
@@ -1,12 +1,22 @@
1
1
  // Force, torque, and one-shot impulse components. May live on a body entity or
2
- // an immediate child of one. `wake` controls whether applying the load wakes a
3
- // sleeping body. Impulses are zeroed silently after they are applied (see PLAN →
2
+ // an immediate child of one. `wake` controls whether applying a non-zero load
3
+ // wakes a sleeping body; a zero load is never applied and never wakes one.
4
+ // Impulses are zeroed silently after they are applied (see PLAN →
4
5
  // PhysicsImpulseZero). Public API — see `docs/components.md`.
5
6
  /** Persistent force in newtons. */
6
7
  export class Force {
7
8
  constructor() {
8
9
  this.x = 0;
9
10
  this.y = 0;
11
+ /**
12
+ * Whether a non-zero force wakes a sleeping body. Defaults to `true`.
13
+ *
14
+ * With `wake: false` a sleeping body stays asleep and ignores the force. A zero force
15
+ * (`x === 0 && y === 0`) is never applied and never wakes a body, whatever `wake` says, so a
16
+ * body holding an idle `Force { x: 0, y: 0 }` can still fall asleep. To wake a body, or keep it
17
+ * awake, use the `Sleep` component: `awake: true` wakes it and `enabled: false` stops it from
18
+ * falling asleep.
19
+ */
10
20
  this.wake = true;
11
21
  }
12
22
  }
@@ -14,6 +24,15 @@ export class Force {
14
24
  export class Torque {
15
25
  constructor() {
16
26
  this.value = 0;
27
+ /**
28
+ * Whether a non-zero torque wakes a sleeping body. Defaults to `true`.
29
+ *
30
+ * With `wake: false` a sleeping body stays asleep and ignores the torque. A zero torque
31
+ * (`value === 0`) is never applied and never wakes a body, whatever `wake` says, so a body
32
+ * holding an idle `Torque { value: 0 }` can still fall asleep. To wake a body, or keep it
33
+ * awake, use the `Sleep` component: `awake: true` wakes it and `enabled: false` stops it from
34
+ * falling asleep.
35
+ */
17
36
  this.wake = true;
18
37
  }
19
38
  }
@@ -22,6 +41,17 @@ export class Impulse {
22
41
  constructor() {
23
42
  this.x = 0;
24
43
  this.y = 0;
44
+ /**
45
+ * Whether a non-zero impulse wakes a sleeping body. Defaults to `true`.
46
+ *
47
+ * Non-zero impulses set on a body before a step are summed, and the sum wakes the body if any
48
+ * of them has `wake: true`. With `wake: false` throughout, a sleeping body stays asleep and
49
+ * ignores the impulse. A zero impulse is ignored when it is set: it is not summed and its
50
+ * `wake` does not count. A sum that is exactly zero, such as `{ x: 5 }` followed by
51
+ * `{ x: -5 }`, is skipped when the impulses are applied. Neither wakes a body. To wake a body,
52
+ * or keep it awake, use the `Sleep` component: `awake: true` wakes it and `enabled: false`
53
+ * stops it from falling asleep.
54
+ */
25
55
  this.wake = true;
26
56
  }
27
57
  }
@@ -29,6 +59,17 @@ export class Impulse {
29
59
  export class AngularImpulse {
30
60
  constructor() {
31
61
  this.value = 0;
62
+ /**
63
+ * Whether a non-zero angular impulse wakes a sleeping body. Defaults to `true`.
64
+ *
65
+ * Non-zero angular impulses set on a body before a step are summed, and the sum wakes the body
66
+ * if any of them has `wake: true`. With `wake: false` throughout, a sleeping body stays asleep
67
+ * and ignores the impulse. A zero impulse is ignored when it is set: it is not summed and its
68
+ * `wake` does not count. A sum that is exactly zero, such as `3` followed by `-3`, is skipped
69
+ * when the impulses are applied. Neither wakes a body. To wake a body, or keep it awake, use
70
+ * the `Sleep` component: `awake: true` wakes it and `enabled: false` stops it from falling
71
+ * asleep.
72
+ */
32
73
  this.wake = true;
33
74
  }
34
75
  }
@@ -1 +1 @@
1
- {"version":3,"file":"components.js","sourceRoot":"","sources":["../../../../src/forces/components.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,+EAA+E;AAC/E,iFAAiF;AACjF,8DAA8D;AAE9D,mCAAmC;AACnC,MAAM,OAAO,KAAK;IAAlB;QACE,MAAC,GAAG,CAAC,CAAC;QACN,MAAC,GAAG,CAAC,CAAC;QACN,SAAI,GAAG,IAAI,CAAC;IACd,CAAC;CAAA;AAED,yCAAyC;AACzC,MAAM,OAAO,MAAM;IAAnB;QACE,UAAK,GAAG,CAAC,CAAC;QACV,SAAI,GAAG,IAAI,CAAC;IACd,CAAC;CAAA;AAED,gFAAgF;AAChF,MAAM,OAAO,OAAO;IAApB;QACE,MAAC,GAAG,CAAC,CAAC;QACN,MAAC,GAAG,CAAC,CAAC;QACN,SAAI,GAAG,IAAI,CAAC;IACd,CAAC;CAAA;AAED,+DAA+D;AAC/D,MAAM,OAAO,cAAc;IAA3B;QACE,UAAK,GAAG,CAAC,CAAC;QACV,SAAI,GAAG,IAAI,CAAC;IACd,CAAC;CAAA"}
1
+ {"version":3,"file":"components.js","sourceRoot":"","sources":["../../../../src/forces/components.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,8EAA8E;AAC9E,2EAA2E;AAC3E,kEAAkE;AAClE,8DAA8D;AAE9D,mCAAmC;AACnC,MAAM,OAAO,KAAK;IAAlB;QACE,MAAC,GAAG,CAAC,CAAC;QACN,MAAC,GAAG,CAAC,CAAC;QACN;;;;;;;;WAQG;QACH,SAAI,GAAG,IAAI,CAAC;IACd,CAAC;CAAA;AAED,yCAAyC;AACzC,MAAM,OAAO,MAAM;IAAnB;QACE,UAAK,GAAG,CAAC,CAAC;QACV;;;;;;;;WAQG;QACH,SAAI,GAAG,IAAI,CAAC;IACd,CAAC;CAAA;AAED,gFAAgF;AAChF,MAAM,OAAO,OAAO;IAApB;QACE,MAAC,GAAG,CAAC,CAAC;QACN,MAAC,GAAG,CAAC,CAAC;QACN;;;;;;;;;;WAUG;QACH,SAAI,GAAG,IAAI,CAAC;IACd,CAAC;CAAA;AAED,+DAA+D;AAC/D,MAAM,OAAO,cAAc;IAA3B;QACE,UAAK,GAAG,CAAC,CAAC;QACV;;;;;;;;;;WAUG;QACH,SAAI,GAAG,IAAI,CAAC;IACd,CAAC;CAAA"}
package/forces/gather.js CHANGED
@@ -16,6 +16,12 @@ export class ForceGatherModule extends Module {
16
16
  .with(Force, forceTargetPredicate)
17
17
  .phase(phase)
18
18
  .each([Force, Body, { target: [ChildOf, [Body]] }], (_entity, [force, body, parentBody]) => {
19
+ // A zero force changes nothing, but Box2D would still wake a sleeping body for it when
20
+ // `wake` is set, so a body holding an idle `Force { x: 0, y: 0 }` could never stay asleep.
21
+ // Skip it: no wasm call and no wake.
22
+ if (force.x === 0 && force.y === 0) {
23
+ return;
24
+ }
19
25
  const bodyId = body?._bodyId ?? parentBody?._bodyId;
20
26
  if (bodyId === undefined) {
21
27
  return;
@@ -30,6 +36,11 @@ export class ForceGatherModule extends Module {
30
36
  .with(Torque, forceTargetPredicate)
31
37
  .phase(phase)
32
38
  .each([Torque, Body, { target: [ChildOf, [Body]] }], (_entity, [torque, body, parentBody]) => {
39
+ // Same as a zero force: skip it so an idle `Torque { value: 0 }` cannot keep waking
40
+ // its body.
41
+ if (torque.value === 0) {
42
+ return;
43
+ }
33
44
  const bodyId = body?._bodyId ?? parentBody?._bodyId;
34
45
  if (bodyId === undefined) {
35
46
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"gather.js","sourceRoot":"","sources":["../../../../src/forces/gather.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,oBAAoB,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAW,CAAC;AAExE,MAAM,OAAO,iBAAkB,SAAQ,MAAM;IACpC,IAAI;QACT,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAEhC,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;QACpC,KAAK;aACF,MAAM,CAAC,0BAA0B,CAAC;aAClC,IAAI,CAAC,KAAK,EAAE,oBAAoB,CAAC;aACjC,KAAK,CAAC,KAAK,CAAC;aACZ,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,EAAE,EAAE;YACzF,MAAM,MAAM,GAAG,IAAI,EAAE,OAAO,IAAI,UAAU,EAAE,OAAO,CAAC;YACpD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,OAAO;YACT,CAAC;YAED,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YAC1B,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1B,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAClE,CAAC,CAAC;aACD,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAEzB,KAAK;aACF,MAAM,CAAC,2BAA2B,CAAC;aACnC,IAAI,CAAC,MAAM,EAAE,oBAAoB,CAAC;aAClC,KAAK,CAAC,KAAK,CAAC;aACZ,IAAI,CACH,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAC7C,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC,EAAE,EAAE;YACtC,MAAM,MAAM,GAAG,IAAI,EAAE,OAAO,IAAI,UAAU,EAAE,OAAO,CAAC;YACpD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,OAAO;YACT,CAAC;YAED,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACrE,CAAC,CACF;aACA,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC3B,CAAC;CACF"}
1
+ {"version":3,"file":"gather.js","sourceRoot":"","sources":["../../../../src/forces/gather.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,11 @@ export class ImpulseAccumulateModule extends Module {
10
10
  world.module(PhysicsCoreModule);
11
11
  const engine = getPhysicsEngine(world);
12
12
  world.component(Impulse).on("set", (entity, impulse) => {
13
+ // A zero impulse adds nothing and its `wake` must not count, so ignore it before any
14
+ // lookup: no body resolve, no accumulator, nothing for PhysicsImpulseZero to clear.
15
+ if (impulse.x === 0 && impulse.y === 0) {
16
+ return;
17
+ }
13
18
  const bodyId = resolveBodyId(entity);
14
19
  if (bodyId === undefined) {
15
20
  return;
@@ -21,6 +26,10 @@ export class ImpulseAccumulateModule extends Module {
21
26
  accumulator.wake || (accumulator.wake = impulse.wake);
22
27
  });
23
28
  world.component(AngularImpulse).on("set", (entity, impulse) => {
29
+ // Same as a zero linear impulse above.
30
+ if (impulse.value === 0) {
31
+ return;
32
+ }
24
33
  const bodyId = resolveBodyId(entity);
25
34
  if (bodyId === undefined) {
26
35
  return;
@@ -42,6 +51,10 @@ export class ImpulseAccumulateModule extends Module {
42
51
  }
43
52
  function drainLinearImpulses(engine) {
44
53
  for (const [bodyId, impulse] of engine.pendingLinearImpulse) {
54
+ // Impulses that cancel out are physically a no-op: skip the wasm call and its wake.
55
+ if (impulse.x === 0 && impulse.y === 0) {
56
+ continue;
57
+ }
45
58
  if (!engine.entityByBodyIndex.has(bodyId.index1)) {
46
59
  continue;
47
60
  }
@@ -53,6 +66,9 @@ function drainLinearImpulses(engine) {
53
66
  }
54
67
  function drainAngularImpulses(engine) {
55
68
  for (const [bodyId, impulse] of engine.pendingAngularImpulse) {
69
+ if (impulse.value === 0) {
70
+ continue;
71
+ }
56
72
  if (!engine.entityByBodyIndex.has(bodyId.index1)) {
57
73
  continue;
58
74
  }
@@ -1 +1 @@
1
- {"version":3,"file":"impulses.js","sourceRoot":"","sources":["../../../../src/forces/impulses.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"impulses.js","sourceRoot":"","sources":["../../../../src/forces/impulses.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EACL,gBAAgB,EAChB,gBAAgB,GAGjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAKxD,MAAM,OAAO,uBAAwB,SAAQ,MAAM;IAC1C,IAAI;QACT,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAEhC,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACvC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;YACrD,qFAAqF;YACrF,oFAAoF;YACpF,IAAI,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvC,OAAO;YACT,CAAC;YAED,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;YACrC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,OAAO;YACT,CAAC;YAED,MAAM,CAAC,uBAAuB,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC/C,MAAM,WAAW,GAAG,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACzD,WAAW,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC;YAC3B,WAAW,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC;YAC3B,WAAW,CAAC,IAAI,KAAhB,WAAW,CAAC,IAAI,GAAK,OAAO,CAAC,IAAI,EAAC;QACpC,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;YAC5D,uCAAuC;YACvC,IAAI,OAAO,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;gBACxB,OAAO;YACT,CAAC;YAED,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;YACrC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,OAAO;YACT,CAAC;YAED,MAAM,CAAC,uBAAuB,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC/C,MAAM,WAAW,GAAG,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC1D,WAAW,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC;YACnC,WAAW,CAAC,IAAI,KAAhB,WAAW,CAAC,IAAI,GAAK,OAAO,CAAC,IAAI,EAAC;QACpC,CAAC,CAAC,CAAC;QAEH,KAAK;aACF,MAAM,CAAC,0BAA0B,CAAC;aAClC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;aAC5B,GAAG,CAAC,GAAG,EAAE;YACR,mBAAmB,CAAC,MAAM,CAAC,CAAC;YAC5B,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC,CAAC;aACD,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC3B,CAAC;CACF;AAED,SAAS,mBAAmB,CAAC,MAAqB;IAChD,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,oBAAoB,EAAE,CAAC;QAC5D,oFAAoF;QACpF,IAAI,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YACvC,SAAS;QACX,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YACjD,SAAS;QACX,CAAC;QACD,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAC1B,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,iCAAiC,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;AACtC,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAqB;IACjD,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,qBAAqB,EAAE,CAAC;QAC7D,IAAI,OAAO,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;YACxB,SAAS;QACX,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YACjD,SAAS;QACX,CAAC;QACD,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/E,CAAC;IACD,MAAM,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;AACvC,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAqB,EAAE,MAAgB;IACnE,IAAI,WAAW,GAAG,MAAM,CAAC,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1D,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,WAAW,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QAC1C,MAAM,CAAC,oBAAoB,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAqB,EAAE,MAAgB;IACpE,IAAI,WAAW,GAAG,MAAM,CAAC,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3D,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,WAAW,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QACxC,MAAM,CAAC,qBAAqB,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC"}
package/index.d.ts CHANGED
@@ -9,5 +9,5 @@ export { Force, Torque, Impulse, AngularImpulse } from "./forces/components.js";
9
9
  export { KinematicTargetPosition, KinematicTargetRotation } from "./kinematic/components.js";
10
10
  export { Joint, JointBodyA, JointBodyB, JointFrame, RevoluteJoint, DistanceJoint, PrismaticJoint, WheelJoint, WeldJoint, FilterJoint, MotorJoint, JointMotor, JointLimit, JointLinearSpring, JointAngularSpring, JointSettings, } from "./joints/components.js";
11
11
  export { ContactEvents, type ContactEvent, SensorEvents, type SensorEvent, HitEvents, type HitEvent, } from "./events/components.js";
12
- export { physics } from "./adapter/queries.js";
13
- export type { CastGeometry, PhysicsQueries, PhysicsStats, QueryFilter, RayHit, ShapeCastHit, } from "./adapter/queries.js";
12
+ export { BodyMotion, physics } from "./adapter/queries.js";
13
+ export type { CastGeometry, PhysicsQueries, PhysicsSettings, PhysicsStats, QueryFilter, RayHit, ShapeCastHit, } from "./adapter/queries.js";
package/index.js CHANGED
@@ -23,5 +23,5 @@ export { Joint, JointBodyA, JointBodyB, JointFrame, RevoluteJoint, DistanceJoint
23
23
  // Events
24
24
  export { ContactEvents, SensorEvents, HitEvents, } from "./events/components.js";
25
25
  // Queries
26
- export { physics } from "./adapter/queries.js";
26
+ export { BodyMotion, physics } from "./adapter/queries.js";
27
27
  //# sourceMappingURL=index.js.map
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,gFAAgF;AAChF,uBAAuB;AAEvB,cAAc;AACd,OAAO,EAAE,aAAa,EAAuB,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO;AACP,OAAO,EACL,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,cAAc,EACd,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAE9B,gBAAgB;AAChB,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE7E,aAAa;AACb,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE3E,WAAW;AACX,OAAO,EACL,KAAK,EACL,GAAG,EACH,MAAM,EACN,OAAO,EACP,OAAO,EACP,OAAO,EACP,KAAK,GAEN,MAAM,wBAAwB,CAAC;AAEhC,6BAA6B;AAC7B,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE1F,oBAAoB;AACpB,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAEhF,oBAAoB;AACpB,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAE7F,SAAS;AACT,OAAO,EACL,KAAK,EACL,UAAU,EACV,UAAU,EACV,UAAU,EACV,aAAa,EACb,aAAa,EACb,cAAc,EACd,UAAU,EACV,SAAS,EACT,WAAW,EACX,UAAU,EACV,UAAU,EACV,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,GACd,MAAM,wBAAwB,CAAC;AAEhC,SAAS;AACT,OAAO,EACL,aAAa,EAEb,YAAY,EAEZ,SAAS,GAEV,MAAM,wBAAwB,CAAC;AAEhC,UAAU;AACV,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,gFAAgF;AAChF,uBAAuB;AAEvB,cAAc;AACd,OAAO,EAAE,aAAa,EAAuB,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO;AACP,OAAO,EACL,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,cAAc,EACd,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAE9B,gBAAgB;AAChB,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE7E,aAAa;AACb,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE3E,WAAW;AACX,OAAO,EACL,KAAK,EACL,GAAG,EACH,MAAM,EACN,OAAO,EACP,OAAO,EACP,OAAO,EACP,KAAK,GAEN,MAAM,wBAAwB,CAAC;AAEhC,6BAA6B;AAC7B,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE1F,oBAAoB;AACpB,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAEhF,oBAAoB;AACpB,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAE7F,SAAS;AACT,OAAO,EACL,KAAK,EACL,UAAU,EACV,UAAU,EACV,UAAU,EACV,aAAa,EACb,aAAa,EACb,cAAc,EACd,UAAU,EACV,SAAS,EACT,WAAW,EACX,UAAU,EACV,UAAU,EACV,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,GACd,MAAM,wBAAwB,CAAC;AAEhC,SAAS;AACT,OAAO,EACL,aAAa,EAEb,YAAY,EAEZ,SAAS,GAEV,MAAM,wBAAwB,CAAC;AAEhC,UAAU;AACV,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC"}
@@ -12,17 +12,21 @@ export declare abstract class Joint {
12
12
  }
13
13
  /**
14
14
  * Relationship to the first connected body ("body A"). Set its `target` to the
15
- * body entity. Destroying body A destroys the joint entity (Box2D destroys a
16
- * body's joints with it). Anchors/limits/reference angle are expressed relative
17
- * to A through {@link JointFrame}.
15
+ * body entity. Destroying body A destroys the joint entity, with every component
16
+ * on it, as Box2D destroys a body's joints with it (`CleanupPolicy.Delete`); body
17
+ * B is left alone. Removing `Body` from A only tears the constraint down.
18
+ * Anchors/limits/reference angle are expressed relative to A through
19
+ * {@link JointFrame}.
18
20
  */
19
21
  export declare class JointBodyA extends Relationship {
20
22
  }
21
23
  /**
22
24
  * Relationship to the second connected body ("body B"). Set its `target` to the
23
- * body entity. Destroying body B destroys the joint entity. The A/B roles are
24
- * asymmetric: motors drive B relative to A and the reference angle is measured as
25
- * B's rest angle relative to A.
25
+ * body entity. Destroying body B destroys the joint entity, with every component
26
+ * on it (`CleanupPolicy.Delete`); body A is left alone. Removing `Body` from B
27
+ * only tears the constraint down. The A/B roles are asymmetric: motors drive B
28
+ * relative to A and the reference angle is measured as B's rest angle relative
29
+ * to A.
26
30
  */
27
31
  export declare class JointBodyB extends Relationship {
28
32
  }
@@ -30,17 +30,21 @@ export class Joint {
30
30
  }
31
31
  /**
32
32
  * Relationship to the first connected body ("body A"). Set its `target` to the
33
- * body entity. Destroying body A destroys the joint entity (Box2D destroys a
34
- * body's joints with it). Anchors/limits/reference angle are expressed relative
35
- * to A through {@link JointFrame}.
33
+ * body entity. Destroying body A destroys the joint entity, with every component
34
+ * on it, as Box2D destroys a body's joints with it (`CleanupPolicy.Delete`); body
35
+ * B is left alone. Removing `Body` from A only tears the constraint down.
36
+ * Anchors/limits/reference angle are expressed relative to A through
37
+ * {@link JointFrame}.
36
38
  */
37
39
  export class JointBodyA extends Relationship {
38
40
  }
39
41
  /**
40
42
  * Relationship to the second connected body ("body B"). Set its `target` to the
41
- * body entity. Destroying body B destroys the joint entity. The A/B roles are
42
- * asymmetric: motors drive B relative to A and the reference angle is measured as
43
- * B's rest angle relative to A.
43
+ * body entity. Destroying body B destroys the joint entity, with every component
44
+ * on it (`CleanupPolicy.Delete`); body A is left alone. Removing `Body` from B
45
+ * only tears the constraint down. The A/B roles are asymmetric: motors drive B
46
+ * relative to A and the reference angle is measured as B's rest angle relative
47
+ * to A.
44
48
  */
45
49
  export class JointBodyB extends Relationship {
46
50
  }
@@ -1 +1 @@
1
- {"version":3,"file":"components.js","sourceRoot":"","sources":["../../../../src/joints/components.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"components.js","sourceRoot":"","sources":["../../../../src/joints/components.ts"],"names":[],"mappings":"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"}
package/joints/module.js CHANGED
@@ -1,4 +1,4 @@
1
- import { Exclusive, Implements, Module } from "@vworlds/vecs";
1
+ import { CleanupPolicy, Exclusive, Implements, Module } from "@vworlds/vecs";
2
2
  import { BodyModule } from "../body/module.js";
3
3
  import { PhysicsCoreModule } from "../core/module.js";
4
4
  import { DistanceJoint, FilterJoint, Joint, JointAngularSpring, JointBodyA, JointBodyB, JointFrame, JointLimit, JointLinearSpring, JointMotor, JointSettings, MotorJoint, PrismaticJoint, RevoluteJoint, WeldJoint, WheelJoint, } from "./components.js";
@@ -9,8 +9,15 @@ export class JointsModule extends Module {
9
9
  const world = this.world;
10
10
  world.module(PhysicsCoreModule);
11
11
  world.module(BodyModule);
12
- world.component(JointBodyA).add(Exclusive);
13
- world.component(JointBodyB).add(Exclusive);
12
+ // Destroying a connected body destroys the joint entity, as Box2D destroys a
13
+ // body's joints with it. Without the policy the default `Remove` would only drop
14
+ // the edge and leave a bodiless joint entity behind.
15
+ const jointBodyA = world.component(JointBodyA);
16
+ jointBodyA.add(Exclusive);
17
+ jointBodyA.meta.onDeleteTarget = CleanupPolicy.Delete;
18
+ const jointBodyB = world.component(JointBodyB);
19
+ jointBodyB.add(Exclusive);
20
+ jointBodyB.meta.onDeleteTarget = CleanupPolicy.Delete;
14
21
  world.component(Joint);
15
22
  world.component(RevoluteJoint);
16
23
  world.component(DistanceJoint);
@@ -1 +1 @@
1
- {"version":3,"file":"module.js","sourceRoot":"","sources":["../../../../src/joints/module.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../../../../src/joints/module.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vworlds/vecs-physics",
3
- "version": "1.0.48",
3
+ "version": "1.0.50",
4
4
  "type": "module",
5
5
  "main": "./index.js",
6
6
  "types": "./index.d.ts",
@@ -15,7 +15,7 @@
15
15
  "url": "git+https://github.com/vworlds/vecs.git"
16
16
  },
17
17
  "dependencies": {
18
- "@vworlds/vecs": "1.0.48",
18
+ "@vworlds/vecs": "1.0.50",
19
19
  "box2d3-wasm": "^5.2.0"
20
20
  },
21
21
  "license": "MIT"