@vworlds/vecs-physics 1.0.37 → 1.0.39
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/adapter/engine.d.ts +14 -4
- package/adapter/engine.js +9 -11
- package/adapter/engine.js.map +1 -1
- package/adapter/queries.d.ts +1 -1
- package/adapter/queries.js +1 -1
- package/adapter/queries.js.map +1 -1
- package/adapter/runtime.js +1 -1
- package/adapter/runtime.js.map +1 -1
- package/{components/body.js → body/components.js} +2 -2
- package/body/components.js.map +1 -0
- package/body/lifecycle.d.ts +4 -0
- package/body/lifecycle.js +153 -0
- package/body/lifecycle.js.map +1 -0
- package/body/mass.d.ts +4 -0
- package/body/mass.js +45 -0
- package/body/mass.js.map +1 -0
- package/body/module.d.ts +4 -0
- package/body/module.js +22 -0
- package/body/module.js.map +1 -0
- package/body/pose_in.d.ts +4 -0
- package/body/pose_in.js +90 -0
- package/body/pose_in.js.map +1 -0
- package/body/pose_out.d.ts +4 -0
- package/body/pose_out.js +59 -0
- package/body/pose_out.js.map +1 -0
- package/{components/body_tuning.js → body/tuning.js} +1 -1
- package/body/tuning.js.map +1 -0
- package/core/module.d.ts +30 -0
- package/core/module.js +77 -0
- package/core/module.js.map +1 -0
- package/core/reaper.d.ts +4 -0
- package/core/reaper.js +45 -0
- package/core/reaper.js.map +1 -0
- package/core/step.d.ts +4 -0
- package/core/step.js +22 -0
- package/core/step.js.map +1 -0
- package/debug/validation.d.ts +4 -0
- package/{systems/debug.js → debug/validation.js} +51 -35
- package/debug/validation.js.map +1 -0
- package/{components/events.js → events/components.js} +1 -1
- package/events/components.js.map +1 -0
- package/events/module.d.ts +4 -0
- package/events/module.js +13 -0
- package/events/module.js.map +1 -0
- package/events/opt_in.d.ts +4 -0
- package/events/opt_in.js +86 -0
- package/events/opt_in.js.map +1 -0
- package/events/publish.d.ts +4 -0
- package/{systems/events.js → events/publish.js} +43 -34
- package/events/publish.js.map +1 -0
- package/{components/force.js → forces/components.js} +1 -1
- package/forces/components.js.map +1 -0
- package/forces/gather.d.ts +4 -0
- package/forces/gather.js +42 -0
- package/forces/gather.js.map +1 -0
- package/forces/impulses.d.ts +4 -0
- package/forces/impulses.js +79 -0
- package/forces/impulses.js.map +1 -0
- package/forces/module.d.ts +4 -0
- package/forces/module.js +20 -0
- package/forces/module.js.map +1 -0
- package/forces/zero.d.ts +4 -0
- package/forces/zero.js +34 -0
- package/forces/zero.js.map +1 -0
- package/index.d.ts +9 -8
- package/index.js +10 -8
- package/index.js.map +1 -1
- package/joints/components.d.ts +116 -0
- package/joints/components.js +150 -0
- package/joints/components.js.map +1 -0
- package/joints/features.d.ts +4 -0
- package/joints/features.js +158 -0
- package/joints/features.js.map +1 -0
- package/joints/lifecycle.d.ts +4 -0
- package/joints/lifecycle.js +191 -0
- package/joints/lifecycle.js.map +1 -0
- package/joints/module.d.ts +4 -0
- package/joints/module.js +33 -0
- package/joints/module.js.map +1 -0
- package/joints/predicates.d.ts +9 -0
- package/joints/predicates.js +10 -0
- package/joints/predicates.js.map +1 -0
- package/{components/target.js → kinematic/components.js} +1 -1
- package/kinematic/components.js.map +1 -0
- package/kinematic/module.d.ts +4 -0
- package/kinematic/module.js +16 -0
- package/kinematic/module.js.map +1 -0
- package/kinematic/targets.d.ts +4 -0
- package/{systems/kinematic.js → kinematic/targets.js} +27 -20
- package/kinematic/targets.js.map +1 -0
- package/{components/material.js → materials/components.js} +1 -1
- package/materials/components.js.map +1 -0
- package/materials/module.d.ts +4 -0
- package/materials/module.js +18 -0
- package/materials/module.js.map +1 -0
- package/materials/sync.d.ts +4 -0
- package/materials/sync.js +136 -0
- package/materials/sync.js.map +1 -0
- package/module.d.ts +3 -27
- package/module.js +45 -141
- package/module.js.map +1 -1
- package/package.json +2 -2
- package/shapes/chain.d.ts +8 -0
- package/{systems/chain_lifecycle.js → shapes/chain.js} +41 -31
- package/shapes/chain.js.map +1 -0
- package/{components/geometry.js → shapes/components.js} +2 -2
- package/{components/geometry.js.map → shapes/components.js.map} +1 -1
- package/{systems/shape_lifecycle.d.ts → shapes/lifecycle.d.ts} +7 -5
- package/{systems/shape_lifecycle.js → shapes/lifecycle.js} +53 -42
- package/shapes/lifecycle.js.map +1 -0
- package/shapes/module.d.ts +4 -0
- package/shapes/module.js +34 -0
- package/shapes/module.js.map +1 -0
- package/{components/shape_pose.js → shapes/pose_components.js} +1 -1
- package/shapes/pose_components.js.map +1 -0
- package/shapes/pose_sync.d.ts +4 -0
- package/shapes/pose_sync.js +70 -0
- package/shapes/pose_sync.js.map +1 -0
- package/{systems/shape_predicates.d.ts → shapes/predicates.d.ts} +2 -2
- package/{systems/shape_predicates.js → shapes/predicates.js} +3 -3
- package/shapes/predicates.js.map +1 -0
- package/util/resolve_body.js +1 -1
- package/components/body.js.map +0 -1
- package/components/body_tuning.js.map +0 -1
- package/components/events.js.map +0 -1
- package/components/force.js.map +0 -1
- package/components/material.js.map +0 -1
- package/components/shape_pose.js.map +0 -1
- package/components/target.js.map +0 -1
- package/systems/chain_lifecycle.d.ts +0 -6
- package/systems/chain_lifecycle.js.map +0 -1
- package/systems/debug.d.ts +0 -4
- package/systems/debug.js.map +0 -1
- package/systems/event_opt_in_sync.d.ts +0 -3
- package/systems/event_opt_in_sync.js +0 -73
- package/systems/event_opt_in_sync.js.map +0 -1
- package/systems/events.d.ts +0 -3
- package/systems/events.js.map +0 -1
- package/systems/forces.d.ts +0 -3
- package/systems/forces.js +0 -35
- package/systems/forces.js.map +0 -1
- package/systems/impulse_accumulate.d.ts +0 -4
- package/systems/impulse_accumulate.js +0 -74
- package/systems/impulse_accumulate.js.map +0 -1
- package/systems/impulse_zero.d.ts +0 -3
- package/systems/impulse_zero.js +0 -27
- package/systems/impulse_zero.js.map +0 -1
- package/systems/index.d.ts +0 -15
- package/systems/index.js +0 -80
- package/systems/index.js.map +0 -1
- package/systems/kinematic.d.ts +0 -3
- package/systems/kinematic.js.map +0 -1
- package/systems/lifecycle.d.ts +0 -4
- package/systems/lifecycle.js +0 -177
- package/systems/lifecycle.js.map +0 -1
- package/systems/mass_recompute.d.ts +0 -3
- package/systems/mass_recompute.js +0 -38
- package/systems/mass_recompute.js.map +0 -1
- package/systems/material_filter_sync.d.ts +0 -3
- package/systems/material_filter_sync.js +0 -129
- package/systems/material_filter_sync.js.map +0 -1
- package/systems/pose_sync_in.d.ts +0 -3
- package/systems/pose_sync_in.js +0 -79
- package/systems/pose_sync_in.js.map +0 -1
- package/systems/pose_sync_out.d.ts +0 -3
- package/systems/pose_sync_out.js +0 -52
- package/systems/pose_sync_out.js.map +0 -1
- package/systems/shape_lifecycle.js.map +0 -1
- package/systems/shape_pose_sync.d.ts +0 -3
- package/systems/shape_pose_sync.js +0 -63
- package/systems/shape_pose_sync.js.map +0 -1
- package/systems/shape_predicates.js.map +0 -1
- package/systems/step.d.ts +0 -3
- package/systems/step.js +0 -15
- package/systems/step.js.map +0 -1
- /package/{components/body.d.ts → body/components.d.ts} +0 -0
- /package/{components/body_tuning.d.ts → body/tuning.d.ts} +0 -0
- /package/{components/events.d.ts → events/components.d.ts} +0 -0
- /package/{components/force.d.ts → forces/components.d.ts} +0 -0
- /package/{components/target.d.ts → kinematic/components.d.ts} +0 -0
- /package/{components/material.d.ts → materials/components.d.ts} +0 -0
- /package/{components/geometry.d.ts → shapes/components.d.ts} +0 -0
- /package/{components/shape_pose.d.ts → shapes/pose_components.d.ts} +0 -0
|
@@ -1,36 +1,45 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
engine.
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
1
|
+
import { Module } from "@vworlds/vecs";
|
|
2
|
+
import { ContactEvents, HitEvents, SensorEvents } from "./components.js";
|
|
3
|
+
import { getPhysicsEngine, PhysicsSystemTag } from "../adapter/engine.js";
|
|
4
|
+
import { PhysicsCoreModule } from "../core/module.js";
|
|
5
|
+
import { EventsModule } from "./module.js";
|
|
6
|
+
export class EventPublishModule extends Module {
|
|
7
|
+
init() {
|
|
8
|
+
const world = this.world;
|
|
9
|
+
world.module(PhysicsCoreModule);
|
|
10
|
+
world.module(EventsModule);
|
|
11
|
+
const engine = getPhysicsEngine(world);
|
|
12
|
+
world
|
|
13
|
+
.system("PhysicsEvents")
|
|
14
|
+
.phase(engine.phases.postStep)
|
|
15
|
+
.run(() => {
|
|
16
|
+
const touchedContact = new Set();
|
|
17
|
+
const touchedSensor = new Set();
|
|
18
|
+
const touchedHit = new Set();
|
|
19
|
+
publishContactAndHitEvents(world, engine, touchedContact, touchedHit);
|
|
20
|
+
publishSensorEvents(world, engine, touchedSensor);
|
|
21
|
+
markModified(world, touchedContact, ContactEvents);
|
|
22
|
+
markModified(world, touchedSensor, SensorEvents);
|
|
23
|
+
markModified(world, touchedHit, HitEvents);
|
|
24
|
+
clearUntouchedContactEvents(world, engine.prevTouchedContact, touchedContact);
|
|
25
|
+
clearUntouchedSensorEvents(world, engine.prevTouchedSensor, touchedSensor);
|
|
26
|
+
clearUntouchedHitEvents(world, engine.prevTouchedHit, touchedHit);
|
|
27
|
+
// Store touched sets on engine for the next step's clear pass.
|
|
28
|
+
engine.prevTouchedContact.clear();
|
|
29
|
+
for (const eid of touchedContact) {
|
|
30
|
+
engine.prevTouchedContact.add(eid);
|
|
31
|
+
}
|
|
32
|
+
engine.prevTouchedSensor.clear();
|
|
33
|
+
for (const eid of touchedSensor) {
|
|
34
|
+
engine.prevTouchedSensor.add(eid);
|
|
35
|
+
}
|
|
36
|
+
engine.prevTouchedHit.clear();
|
|
37
|
+
for (const eid of touchedHit) {
|
|
38
|
+
engine.prevTouchedHit.add(eid);
|
|
39
|
+
}
|
|
40
|
+
})
|
|
41
|
+
.add(PhysicsSystemTag);
|
|
42
|
+
}
|
|
34
43
|
}
|
|
35
44
|
// Contact begin/end and hit events all come from a single
|
|
36
45
|
// `b2World_GetContactEvents` poll, so fetch the event block once per step and
|
|
@@ -211,4 +220,4 @@ function deleteIfPresent(value) {
|
|
|
211
220
|
function isDestroyed(entity) {
|
|
212
221
|
return entity.destroyed;
|
|
213
222
|
}
|
|
214
|
-
//# sourceMappingURL=
|
|
223
|
+
//# sourceMappingURL=publish.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../../src/events/publish.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +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"}
|
package/forces/gather.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { ChildOf, Module } from "@vworlds/vecs";
|
|
2
|
+
import { getPhysicsEngine, PhysicsSystemTag } from "../adapter/engine.js";
|
|
3
|
+
import { Body } from "../body/components.js";
|
|
4
|
+
import { Force, Torque } from "./components.js";
|
|
5
|
+
import { scr_b2Vec2 } from "../adapter/runtime.js";
|
|
6
|
+
import { PhysicsCoreModule } from "../core/module.js";
|
|
7
|
+
const forceTargetPredicate = { any: [Body, { parent: Body }] };
|
|
8
|
+
export class ForceGatherModule extends Module {
|
|
9
|
+
init() {
|
|
10
|
+
const world = this.world;
|
|
11
|
+
world.module(PhysicsCoreModule);
|
|
12
|
+
const engine = getPhysicsEngine(world);
|
|
13
|
+
const phase = engine.phases.preStep;
|
|
14
|
+
world
|
|
15
|
+
.system("PhysicsForceGather:Force")
|
|
16
|
+
.with(Force, forceTargetPredicate)
|
|
17
|
+
.phase(phase)
|
|
18
|
+
.each([Force, Body, { target: [ChildOf, [Body]] }], (_entity, [force, body, parentBody]) => {
|
|
19
|
+
const bodyId = body?._bodyId ?? parentBody?._bodyId;
|
|
20
|
+
if (bodyId === undefined) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const vec = scr_b2Vec2[0];
|
|
24
|
+
vec.Set(force.x, force.y);
|
|
25
|
+
engine.box2d.b2Body_ApplyForceToCenter(bodyId, vec, force.wake);
|
|
26
|
+
})
|
|
27
|
+
.add(PhysicsSystemTag);
|
|
28
|
+
world
|
|
29
|
+
.system("PhysicsForceGather:Torque")
|
|
30
|
+
.with(Torque, forceTargetPredicate)
|
|
31
|
+
.phase(phase)
|
|
32
|
+
.each([Torque, Body, { target: [ChildOf, [Body]] }], (_entity, [torque, body, parentBody]) => {
|
|
33
|
+
const bodyId = body?._bodyId ?? parentBody?._bodyId;
|
|
34
|
+
if (bodyId === undefined) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
engine.box2d.b2Body_ApplyTorque(bodyId, torque.value, torque.wake);
|
|
38
|
+
})
|
|
39
|
+
.add(PhysicsSystemTag);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=gather.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { Module } from "@vworlds/vecs";
|
|
2
|
+
import { AngularImpulse, Impulse } from "./components.js";
|
|
3
|
+
import { scr_b2Vec2 } from "../adapter/runtime.js";
|
|
4
|
+
import { getPhysicsEngine, PhysicsSystemTag, } from "../adapter/engine.js";
|
|
5
|
+
import { PhysicsCoreModule } from "../core/module.js";
|
|
6
|
+
import { resolveBodyId } from "../util/resolve_body.js";
|
|
7
|
+
export class ImpulseAccumulateModule extends Module {
|
|
8
|
+
init() {
|
|
9
|
+
const world = this.world;
|
|
10
|
+
world.module(PhysicsCoreModule);
|
|
11
|
+
const engine = getPhysicsEngine(world);
|
|
12
|
+
world.component(Impulse).onSet((entity, impulse) => {
|
|
13
|
+
const bodyId = resolveBodyId(entity);
|
|
14
|
+
if (bodyId === undefined) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
engine.impulseEntitiesThisStep.add(entity.eid);
|
|
18
|
+
const accumulator = getLinearAccumulator(engine, bodyId);
|
|
19
|
+
accumulator.x += impulse.x;
|
|
20
|
+
accumulator.y += impulse.y;
|
|
21
|
+
accumulator.wake || (accumulator.wake = impulse.wake);
|
|
22
|
+
});
|
|
23
|
+
world.component(AngularImpulse).onSet((entity, impulse) => {
|
|
24
|
+
const bodyId = resolveBodyId(entity);
|
|
25
|
+
if (bodyId === undefined) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
engine.impulseEntitiesThisStep.add(entity.eid);
|
|
29
|
+
const accumulator = getAngularAccumulator(engine, bodyId);
|
|
30
|
+
accumulator.value += impulse.value;
|
|
31
|
+
accumulator.wake || (accumulator.wake = impulse.wake);
|
|
32
|
+
});
|
|
33
|
+
world
|
|
34
|
+
.system("PhysicsImpulseAccumulate")
|
|
35
|
+
.phase(engine.phases.preStep)
|
|
36
|
+
.run(() => {
|
|
37
|
+
drainLinearImpulses(engine);
|
|
38
|
+
drainAngularImpulses(engine);
|
|
39
|
+
})
|
|
40
|
+
.add(PhysicsSystemTag);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function drainLinearImpulses(engine) {
|
|
44
|
+
for (const [bodyId, impulse] of engine.pendingLinearImpulse) {
|
|
45
|
+
if (!engine.entityByBodyIndex.has(bodyId.index1)) {
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
const vec = scr_b2Vec2[0];
|
|
49
|
+
vec.Set(impulse.x, impulse.y);
|
|
50
|
+
engine.box2d.b2Body_ApplyLinearImpulseToCenter(bodyId, vec, impulse.wake);
|
|
51
|
+
}
|
|
52
|
+
engine.pendingLinearImpulse.clear();
|
|
53
|
+
}
|
|
54
|
+
function drainAngularImpulses(engine) {
|
|
55
|
+
for (const [bodyId, impulse] of engine.pendingAngularImpulse) {
|
|
56
|
+
if (!engine.entityByBodyIndex.has(bodyId.index1)) {
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
engine.box2d.b2Body_ApplyAngularImpulse(bodyId, impulse.value, impulse.wake);
|
|
60
|
+
}
|
|
61
|
+
engine.pendingAngularImpulse.clear();
|
|
62
|
+
}
|
|
63
|
+
function getLinearAccumulator(engine, bodyId) {
|
|
64
|
+
let accumulator = engine.pendingLinearImpulse.get(bodyId);
|
|
65
|
+
if (accumulator === undefined) {
|
|
66
|
+
accumulator = { x: 0, y: 0, wake: false };
|
|
67
|
+
engine.pendingLinearImpulse.set(bodyId, accumulator);
|
|
68
|
+
}
|
|
69
|
+
return accumulator;
|
|
70
|
+
}
|
|
71
|
+
function getAngularAccumulator(engine, bodyId) {
|
|
72
|
+
let accumulator = engine.pendingAngularImpulse.get(bodyId);
|
|
73
|
+
if (accumulator === undefined) {
|
|
74
|
+
accumulator = { value: 0, wake: false };
|
|
75
|
+
engine.pendingAngularImpulse.set(bodyId, accumulator);
|
|
76
|
+
}
|
|
77
|
+
return accumulator;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=impulses.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"impulses.js","sourceRoot":"","sources":["../../../../src/forces/impulses.ts"],"names":[],"mappings":"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"}
|
package/forces/module.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Module } from "@vworlds/vecs";
|
|
2
|
+
import { BodyModule } from "../body/module.js";
|
|
3
|
+
import { PhysicsCoreModule } from "../core/module.js";
|
|
4
|
+
import { AngularImpulse, Force, Impulse, Torque } from "./components.js";
|
|
5
|
+
import { ForceGatherModule } from "./gather.js";
|
|
6
|
+
import { ImpulseAccumulateModule } from "./impulses.js";
|
|
7
|
+
export class ForcesModule extends Module {
|
|
8
|
+
init() {
|
|
9
|
+
const world = this.world;
|
|
10
|
+
world.module(PhysicsCoreModule);
|
|
11
|
+
world.module(BodyModule);
|
|
12
|
+
world.component(Force);
|
|
13
|
+
world.component(Torque);
|
|
14
|
+
world.component(Impulse);
|
|
15
|
+
world.component(AngularImpulse);
|
|
16
|
+
world.module(ForceGatherModule);
|
|
17
|
+
world.module(ImpulseAccumulateModule);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module.js","sourceRoot":"","sources":["../../../../src/forces/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAExD,MAAM,OAAO,YAAa,SAAQ,MAAM;IAC/B,IAAI;QACT,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAChC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAEzB,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACvB,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACxB,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACzB,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAEhC,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAChC,KAAK,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;IACxC,CAAC;CACF"}
|
package/forces/zero.d.ts
ADDED
package/forces/zero.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Module } from "@vworlds/vecs";
|
|
2
|
+
import { getPhysicsEngine, PhysicsSystemTag } from "../adapter/engine.js";
|
|
3
|
+
import { PhysicsCoreModule } from "../core/module.js";
|
|
4
|
+
import { AngularImpulse, Impulse } from "./components.js";
|
|
5
|
+
export class ImpulseZeroModule extends Module {
|
|
6
|
+
init() {
|
|
7
|
+
const world = this.world;
|
|
8
|
+
world.module(PhysicsCoreModule);
|
|
9
|
+
const engine = getPhysicsEngine(world);
|
|
10
|
+
world
|
|
11
|
+
.system("PhysicsImpulseZero")
|
|
12
|
+
.phase(engine.phases.postStep)
|
|
13
|
+
.run(() => {
|
|
14
|
+
for (const eid of engine.impulseEntitiesThisStep) {
|
|
15
|
+
const entity = world.getEntity(eid);
|
|
16
|
+
if (entity === undefined) {
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
const imp = entity.get(Impulse);
|
|
20
|
+
if (imp !== undefined) {
|
|
21
|
+
imp.x = 0;
|
|
22
|
+
imp.y = 0;
|
|
23
|
+
}
|
|
24
|
+
const ai = entity.get(AngularImpulse);
|
|
25
|
+
if (ai !== undefined) {
|
|
26
|
+
ai.value = 0;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
engine.impulseEntitiesThisStep.clear();
|
|
30
|
+
})
|
|
31
|
+
.add(PhysicsSystemTag);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=zero.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zero.js","sourceRoot":"","sources":["../../../../src/forces/zero.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1D,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,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,uBAAuB,EAAE,CAAC;gBACjD,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBACpC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;oBACzB,SAAS;gBACX,CAAC;gBAED,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAwB,CAAC;gBACvD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;oBACtB,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;oBACV,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBACZ,CAAC;gBAED,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,cAAc,CAA+B,CAAC;gBACpE,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;oBACrB,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC;gBACf,CAAC;YACH,CAAC;YAED,MAAM,CAAC,uBAAuB,CAAC,KAAK,EAAE,CAAC;QACzC,CAAC,CAAC;aACD,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC3B,CAAC;CACF"}
|
package/index.d.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
export { PhysicsModule, type PhysicsOptions } from "./module.js";
|
|
2
2
|
export { preloadPhysics } from "./adapter/runtime.js";
|
|
3
|
-
export { Body, BodyType, Position, Rotation, LinearVelocity, AngularVelocity, } from "./components
|
|
4
|
-
export { Damping, GravityScale, MotionLocks, Sleep } from "./
|
|
5
|
-
export { ShapePosition, ShapeRotation } from "./
|
|
6
|
-
export { Shape, Box, Circle, Capsule, Segment, Polygon, Chain, type Vec2, } from "./components
|
|
7
|
-
export { Material, CollisionFilter, Sensor, Detectable } from "./components
|
|
8
|
-
export { Force, Torque, Impulse, AngularImpulse } from "./components
|
|
9
|
-
export { KinematicTargetPosition, KinematicTargetRotation } from "./components
|
|
10
|
-
export {
|
|
3
|
+
export { Body, BodyType, Position, Rotation, LinearVelocity, AngularVelocity, } from "./body/components.js";
|
|
4
|
+
export { Damping, GravityScale, MotionLocks, Sleep } from "./body/tuning.js";
|
|
5
|
+
export { ShapePosition, ShapeRotation } from "./shapes/pose_components.js";
|
|
6
|
+
export { Shape, Box, Circle, Capsule, Segment, Polygon, Chain, type Vec2, } from "./shapes/components.js";
|
|
7
|
+
export { Material, CollisionFilter, Sensor, Detectable } from "./materials/components.js";
|
|
8
|
+
export { Force, Torque, Impulse, AngularImpulse } from "./forces/components.js";
|
|
9
|
+
export { KinematicTargetPosition, KinematicTargetRotation } from "./kinematic/components.js";
|
|
10
|
+
export { Joint, JointBodyA, JointBodyB, JointFrame, RevoluteJoint, DistanceJoint, WeldJoint, FilterJoint, JointMotor, JointLimit, JointLinearSpring, JointAngularSpring, JointSettings, } from "./joints/components.js";
|
|
11
|
+
export { ContactEvents, type ContactEvent, SensorEvents, type SensorEvent, HitEvents, type HitEvent, } from "./events/components.js";
|
|
11
12
|
export { physics } from "./adapter/queries.js";
|
|
12
13
|
export type { PhysicsQueries, QueryFilter, RayHit } from "./adapter/queries.js";
|
package/index.js
CHANGED
|
@@ -5,21 +5,23 @@
|
|
|
5
5
|
export { PhysicsModule } from "./module.js";
|
|
6
6
|
export { preloadPhysics } from "./adapter/runtime.js";
|
|
7
7
|
// Body
|
|
8
|
-
export { Body, BodyType, Position, Rotation, LinearVelocity, AngularVelocity, } from "./components
|
|
8
|
+
export { Body, BodyType, Position, Rotation, LinearVelocity, AngularVelocity, } from "./body/components.js";
|
|
9
9
|
// Body tunables
|
|
10
|
-
export { Damping, GravityScale, MotionLocks, Sleep } from "./
|
|
10
|
+
export { Damping, GravityScale, MotionLocks, Sleep } from "./body/tuning.js";
|
|
11
11
|
// Shape pose
|
|
12
|
-
export { ShapePosition, ShapeRotation } from "./
|
|
12
|
+
export { ShapePosition, ShapeRotation } from "./shapes/pose_components.js";
|
|
13
13
|
// Geometry
|
|
14
|
-
export { Shape, Box, Circle, Capsule, Segment, Polygon, Chain, } from "./components
|
|
14
|
+
export { Shape, Box, Circle, Capsule, Segment, Polygon, Chain, } from "./shapes/components.js";
|
|
15
15
|
// Material / filter / sensor
|
|
16
|
-
export { Material, CollisionFilter, Sensor, Detectable } from "./components
|
|
16
|
+
export { Material, CollisionFilter, Sensor, Detectable } from "./materials/components.js";
|
|
17
17
|
// Forces & impulses
|
|
18
|
-
export { Force, Torque, Impulse, AngularImpulse } from "./components
|
|
18
|
+
export { Force, Torque, Impulse, AngularImpulse } from "./forces/components.js";
|
|
19
19
|
// Kinematic targets
|
|
20
|
-
export { KinematicTargetPosition, KinematicTargetRotation } from "./components
|
|
20
|
+
export { KinematicTargetPosition, KinematicTargetRotation } from "./kinematic/components.js";
|
|
21
|
+
// Joints
|
|
22
|
+
export { Joint, JointBodyA, JointBodyB, JointFrame, RevoluteJoint, DistanceJoint, WeldJoint, FilterJoint, JointMotor, JointLimit, JointLinearSpring, JointAngularSpring, JointSettings, } from "./joints/components.js";
|
|
21
23
|
// Events
|
|
22
|
-
export { ContactEvents, SensorEvents, HitEvents, } from "./components
|
|
24
|
+
export { ContactEvents, SensorEvents, HitEvents, } from "./events/components.js";
|
|
23
25
|
// Queries
|
|
24
26
|
export { physics } from "./adapter/queries.js";
|
|
25
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,
|
|
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,SAAS,EACT,WAAW,EACX,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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { Relationship } from "@vworlds/vecs";
|
|
2
|
+
import type { Vec2 } from "../shapes/components.js";
|
|
3
|
+
/**
|
|
4
|
+
* Empty umbrella marker for every concrete joint type. A joint entity carries
|
|
5
|
+
* exactly one of `RevoluteJoint`, `DistanceJoint`, `WeldJoint`, or `FilterJoint`;
|
|
6
|
+
* each implements `Joint` so queries and systems can match any joint without
|
|
7
|
+
* enumerating every concrete type. Holds the single Box2D handle, since every
|
|
8
|
+
* joint type maps to exactly one `b2JointId`.
|
|
9
|
+
*/
|
|
10
|
+
export declare abstract class Joint {
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Relationship to the first connected body ("body A"). Set its `target` to the
|
|
14
|
+
* body entity. Destroying body A destroys the joint entity (Box2D destroys a
|
|
15
|
+
* body's joints with it). Anchors/limits/reference angle are expressed relative
|
|
16
|
+
* to A through {@link JointFrame}.
|
|
17
|
+
*/
|
|
18
|
+
export declare class JointBodyA extends Relationship {
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Relationship to the second connected body ("body B"). Set its `target` to the
|
|
22
|
+
* body entity. Destroying body B destroys the joint entity. The A/B roles are
|
|
23
|
+
* asymmetric: motors drive B relative to A and the reference angle is measured as
|
|
24
|
+
* B's rest angle relative to A.
|
|
25
|
+
*/
|
|
26
|
+
export declare class JointBodyB extends Relationship {
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Where the joint attaches on each body and the bodies' rest orientation.
|
|
30
|
+
* `localAnchorA`/`localAnchorB` are anchor points in each body's local frame;
|
|
31
|
+
* `referenceAngle` is body B's angle relative to body A at rest (radians).
|
|
32
|
+
*
|
|
33
|
+
* Optional: a missing `JointFrame` anchors both bodies at their origins with a
|
|
34
|
+
* zero reference angle. `DistanceJoint` ignores `referenceAngle`.
|
|
35
|
+
*/
|
|
36
|
+
export declare class JointFrame {
|
|
37
|
+
localAnchorA: Vec2;
|
|
38
|
+
localAnchorB: Vec2;
|
|
39
|
+
referenceAngle: number;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Revolute (hinge) joint: pins the two bodies at a shared anchor and lets them
|
|
43
|
+
* rotate relative to each other. Add {@link JointMotor} to drive the rotation,
|
|
44
|
+
* {@link JointLimit} to clamp the angle (radians, relative to the reference
|
|
45
|
+
* angle), or {@link JointAngularSpring} for a soft rest angle.
|
|
46
|
+
*/
|
|
47
|
+
export declare class RevoluteJoint extends Joint {
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Distance joint: keeps the two anchor points a fixed `length` apart (a rigid
|
|
51
|
+
* rod by default). Add {@link JointLinearSpring} to make it springy,
|
|
52
|
+
* {@link JointLimit} to bound the separation (`lower`/`upper` become min/max
|
|
53
|
+
* length), or {@link JointMotor} to drive the length.
|
|
54
|
+
*/
|
|
55
|
+
export declare class DistanceJoint extends Joint {
|
|
56
|
+
length: number;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Weld joint: rigidly fixes the two bodies' relative position and orientation
|
|
60
|
+
* (at the reference angle). Add {@link JointLinearSpring} and/or
|
|
61
|
+
* {@link JointAngularSpring} to make the weld soft along each axis.
|
|
62
|
+
*/
|
|
63
|
+
export declare class WeldJoint extends Joint {
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Filter joint: disables collision between the two connected bodies without
|
|
67
|
+
* otherwise constraining them. Carries no tunables; motor/limit/spring features
|
|
68
|
+
* do not apply.
|
|
69
|
+
*/
|
|
70
|
+
export declare class FilterJoint extends Joint {
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Optional motor feature. Present = motor enabled. Drives the joint toward
|
|
74
|
+
* `targetSpeed` (rad/s for revolute, m/s for distance) bounded by `maxForce`
|
|
75
|
+
* (interpreted as a torque for angular joints). Applies to `RevoluteJoint` and
|
|
76
|
+
* `DistanceJoint`.
|
|
77
|
+
*/
|
|
78
|
+
export declare class JointMotor {
|
|
79
|
+
targetSpeed: number;
|
|
80
|
+
maxForce: number;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Optional limit feature. Present = limit enabled. `lower`/`upper` are an angle
|
|
84
|
+
* range (radians) for `RevoluteJoint` and a length range (meters) for
|
|
85
|
+
* `DistanceJoint`.
|
|
86
|
+
*/
|
|
87
|
+
export declare class JointLimit {
|
|
88
|
+
lower: number;
|
|
89
|
+
upper: number;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Optional linear spring feature (soft constraint along the joint's linear axis).
|
|
93
|
+
* Present = spring enabled. `hertz` is the stiffness frequency, `dampingRatio`
|
|
94
|
+
* the damping. Applies to `DistanceJoint` and the linear axis of `WeldJoint`.
|
|
95
|
+
*/
|
|
96
|
+
export declare class JointLinearSpring {
|
|
97
|
+
hertz: number;
|
|
98
|
+
dampingRatio: number;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Optional angular spring feature (soft constraint on the relative angle).
|
|
102
|
+
* Present = spring enabled. Applies to `RevoluteJoint` and the angular axis of
|
|
103
|
+
* `WeldJoint`. Split from {@link JointLinearSpring} so a weld can carry both at
|
|
104
|
+
* once.
|
|
105
|
+
*/
|
|
106
|
+
export declare class JointAngularSpring {
|
|
107
|
+
hertz: number;
|
|
108
|
+
dampingRatio: number;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Optional base-joint settings. `collideConnected` lets the two connected bodies
|
|
112
|
+
* still collide with each other (off by default). Missing = Box2D defaults.
|
|
113
|
+
*/
|
|
114
|
+
export declare class JointSettings {
|
|
115
|
+
collideConnected: boolean;
|
|
116
|
+
}
|