@vworlds/vecs-physics 1.0.48 → 1.0.49
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/body/pose_out.js +54 -12
- package/body/pose_out.js.map +1 -1
- package/forces/components.d.ts +40 -0
- package/forces/components.js +43 -2
- package/forces/components.js.map +1 -1
- package/forces/gather.js +11 -0
- package/forces/gather.js.map +1 -1
- package/forces/impulses.js +16 -0
- package/forces/impulses.js.map +1 -1
- package/package.json +2 -2
package/body/pose_out.js
CHANGED
|
@@ -40,28 +40,70 @@ export class BodyPoseOutModule extends Module {
|
|
|
40
40
|
.add(PhysicsSystemTag);
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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
|
-
|
|
54
|
-
|
|
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
|
-
|
|
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
|
-
|
|
64
|
-
|
|
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
|
package/body/pose_out.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pose_out.js","sourceRoot":"","sources":["../../../../src/body/pose_out.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAe,MAAM,eAAe,CAAC;AAEpD,OAAO,EACL,gBAAgB,EAChB,gBAAgB,GAGjB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,eAAe,EACf,IAAI,EACJ,QAAQ,EACR,cAAc,EACd,QAAQ,EACR,QAAQ,GACT,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAUtD,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,KAAK;aACF,MAAM,CAAC,oBAAoB,CAAC;aAC5B,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;aAC7B,GAAG,CAAC,GAAG,EAAE;YACR,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACtE,IAAI,CAAC;gBACH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC9C,MAAM,IAAI,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;oBACxC,IAAI,CAAC;wBACH,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;wBAC3B,MAAM,QAAQ,GAAG,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;wBAC7D,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;4BAC3B,SAAS;wBACX,CAAC;wBAED,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;wBACtC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;wBAC9B,IAAI,IAAI,EAAE,IAAI,KAAK,QAAQ,CAAC,OAAO,EAAE,CAAC;4BACpC,SAAS;wBACX,CAAC;wBAED,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;oBACpD,CAAC;4BAAS,CAAC;wBACT,IAAI,CAAC,MAAM,EAAE,CAAC;oBAChB,CAAC;gBACH,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,UAAU,CAAC,MAAM,EAAE,CAAC;YACtB,CAAC;QACH,CAAC,CAAC;aACD,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC3B,CAAC;CACF;AAED
|
|
1
|
+
{"version":3,"file":"pose_out.js","sourceRoot":"","sources":["../../../../src/body/pose_out.ts"],"names":[],"mappings":"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"}
|
package/forces/components.d.ts
CHANGED
|
@@ -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
|
}
|
package/forces/components.js
CHANGED
|
@@ -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
|
|
3
|
-
// sleeping body
|
|
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
|
}
|
package/forces/components.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"components.js","sourceRoot":"","sources":["../../../../src/forces/components.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E
|
|
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;
|
package/forces/gather.js.map
CHANGED
|
@@ -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":"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,uFAAuF;YACvF,2FAA2F;YAC3F,qCAAqC;YACrC,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnC,OAAO;YACT,CAAC;YAED,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,oFAAoF;YACpF,YAAY;YACZ,IAAI,MAAM,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;gBACvB,OAAO;YACT,CAAC;YAED,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"}
|
package/forces/impulses.js
CHANGED
|
@@ -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
|
}
|
package/forces/impulses.js.map
CHANGED
|
@@ -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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vworlds/vecs-physics",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.49",
|
|
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.
|
|
18
|
+
"@vworlds/vecs": "1.0.49",
|
|
19
19
|
"box2d3-wasm": "^5.2.0"
|
|
20
20
|
},
|
|
21
21
|
"license": "MIT"
|