@vworlds/vecs-physics 1.0.25 → 1.0.26
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/state.d.ts +1 -5
- package/adapter/state.js +5 -10
- package/adapter/state.js.map +1 -1
- package/components/body.js +4 -1
- package/components/body.js.map +1 -1
- package/components/geometry.d.ts +14 -6
- package/components/geometry.js +35 -9
- package/components/geometry.js.map +1 -1
- package/index.d.ts +1 -1
- package/index.js +1 -1
- package/index.js.map +1 -1
- package/module.js +17 -7
- package/module.js.map +1 -1
- package/package.json +2 -2
- package/systems/debug.d.ts +3 -4
- package/systems/debug.js +10 -8
- package/systems/debug.js.map +1 -1
- package/systems/event_opt_in_sync.d.ts +2 -2
- package/systems/event_opt_in_sync.js +16 -13
- package/systems/event_opt_in_sync.js.map +1 -1
- package/systems/events.d.ts +2 -2
- package/systems/events.js +3 -1
- package/systems/events.js.map +1 -1
- package/systems/forces.d.ts +2 -2
- package/systems/forces.js +29 -20
- package/systems/forces.js.map +1 -1
- package/systems/impulse_accumulate.d.ts +2 -2
- package/systems/impulse_accumulate.js +5 -3
- package/systems/impulse_accumulate.js.map +1 -1
- package/systems/impulse_zero.d.ts +2 -2
- package/systems/impulse_zero.js +3 -1
- package/systems/impulse_zero.js.map +1 -1
- package/systems/index.d.ts +1 -2
- package/systems/index.js +28 -37
- package/systems/index.js.map +1 -1
- package/systems/kinematic.d.ts +2 -2
- package/systems/kinematic.js +14 -15
- package/systems/kinematic.js.map +1 -1
- package/systems/lifecycle.d.ts +2 -2
- package/systems/lifecycle.js +38 -16
- package/systems/lifecycle.js.map +1 -1
- package/systems/mass_recompute.d.ts +2 -2
- package/systems/mass_recompute.js +10 -8
- package/systems/mass_recompute.js.map +1 -1
- package/systems/material_filter_sync.d.ts +2 -2
- package/systems/material_filter_sync.js +41 -20
- package/systems/material_filter_sync.js.map +1 -1
- package/systems/pose_sync_in.d.ts +2 -2
- package/systems/pose_sync_in.js +33 -9
- package/systems/pose_sync_in.js.map +1 -1
- package/systems/pose_sync_out.d.ts +2 -2
- package/systems/pose_sync_out.js +3 -1
- package/systems/pose_sync_out.js.map +1 -1
- package/systems/shape_lifecycle.d.ts +5 -3
- package/systems/shape_lifecycle.js +90 -102
- package/systems/shape_lifecycle.js.map +1 -1
- package/systems/shape_pose_sync.d.ts +2 -2
- package/systems/shape_pose_sync.js +18 -8
- package/systems/shape_pose_sync.js.map +1 -1
- package/systems/shape_predicates.d.ts +7 -0
- package/systems/shape_predicates.js +4 -0
- package/systems/shape_predicates.js.map +1 -0
- package/systems/step.d.ts +2 -2
- package/systems/step.js +3 -1
- package/systems/step.js.map +1 -1
- package/util/resolve_body.d.ts +2 -2
- package/util/resolve_body.js +5 -7
- package/util/resolve_body.js.map +1 -1
- package/util/warn.d.ts +1 -1
- package/util/warn.js +2 -1
- package/util/warn.js.map +1 -1
package/systems/events.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../../../src/systems/events.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../../../src/systems/events.ts"],"names":[],"mappings":"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"}
|
package/systems/forces.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { type Entity, type
|
|
1
|
+
import { type Entity, type World } from "@vworlds/vecs";
|
|
2
2
|
import { type PhysicsState } from "../adapter/state.js";
|
|
3
|
-
export declare function installForceGather(world: World, state: PhysicsState, phase: Entity):
|
|
3
|
+
export declare function installForceGather(world: World, state: PhysicsState, phase: Entity): void;
|
package/systems/forces.js
CHANGED
|
@@ -1,26 +1,35 @@
|
|
|
1
|
+
import { ChildOf } from "@vworlds/vecs";
|
|
2
|
+
import { Body } from "../components/body.js";
|
|
1
3
|
import { Force, Torque } from "../components/force.js";
|
|
2
|
-
import {
|
|
4
|
+
import { PhysicsSystemTag } from "../adapter/state.js";
|
|
5
|
+
const forceTargetPredicate = { any: [Body, { parent: Body }] };
|
|
3
6
|
export function installForceGather(world, state, phase) {
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
.
|
|
7
|
+
const forceSystem = world
|
|
8
|
+
.system("PhysicsForceGather:Force")
|
|
9
|
+
.with(Force, forceTargetPredicate)
|
|
10
|
+
.phase(phase);
|
|
11
|
+
forceSystem.entity.add(PhysicsSystemTag);
|
|
12
|
+
forceSystem.each([Force, Body, { target: [ChildOf, [Body]] }], (_entity, tuple) => {
|
|
13
|
+
const [force, body, parentBody] = tuple;
|
|
14
|
+
const bodyId = body?._bodyId ?? parentBody?._bodyId;
|
|
15
|
+
if (bodyId === undefined) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
state.scratchVec2.Set(force.x, force.y);
|
|
19
|
+
state.box2d.b2Body_ApplyForceToCenter(bodyId, state.scratchVec2, force.wake);
|
|
20
|
+
});
|
|
21
|
+
const torqueSystem = world
|
|
22
|
+
.system("PhysicsForceGather:Torque")
|
|
23
|
+
.with(Torque, forceTargetPredicate)
|
|
7
24
|
.phase(phase)
|
|
8
|
-
.
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
if (force !== undefined) {
|
|
16
|
-
state.scratchVec2.Set(force.x, force.y);
|
|
17
|
-
state.box2d.b2Body_ApplyForceToCenter(bodyId, state.scratchVec2, force.wake);
|
|
18
|
-
}
|
|
19
|
-
const torque = entity.get(Torque);
|
|
20
|
-
if (torque !== undefined) {
|
|
21
|
-
state.box2d.b2Body_ApplyTorque(bodyId, torque.value, torque.wake);
|
|
22
|
-
}
|
|
23
|
-
});
|
|
25
|
+
.each([Torque, Body, { target: [ChildOf, [Body]] }], (_entity, tuple) => {
|
|
26
|
+
const [torque, body, parentBody] = tuple;
|
|
27
|
+
const bodyId = body?._bodyId ?? parentBody?._bodyId;
|
|
28
|
+
if (bodyId === undefined) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
state.box2d.b2Body_ApplyTorque(bodyId, torque.value, torque.wake);
|
|
24
32
|
});
|
|
33
|
+
torqueSystem.entity.add(PhysicsSystemTag);
|
|
25
34
|
}
|
|
26
35
|
//# sourceMappingURL=forces.js.map
|
package/systems/forces.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forces.js","sourceRoot":"","sources":["../../../../src/systems/forces.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"forces.js","sourceRoot":"","sources":["../../../../src/systems/forces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAA2B,MAAM,eAAe,CAAC;AAEjE,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAqB,MAAM,qBAAqB,CAAC;AAE1E,MAAM,oBAAoB,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAW,CAAC;AAExE,MAAM,UAAU,kBAAkB,CAAC,KAAY,EAAE,KAAmB,EAAE,KAAa;IACjF,MAAM,WAAW,GAAG,KAAK;SACtB,MAAM,CAAC,0BAA0B,CAAC;SAClC,IAAI,CAAC,KAAK,EAAE,oBAAoB,CAAC;SACjC,KAAK,CAAC,KAAK,CAAC,CAAC;IAChB,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAEzC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;QAChF,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,EAAE,OAAO,IAAI,UAAU,EAAE,OAAO,CAAC;QACpD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QACxC,KAAK,CAAC,KAAK,CAAC,yBAAyB,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,KAAK;SACvB,MAAM,CAAC,2BAA2B,CAAC;SACnC,IAAI,CAAC,MAAM,EAAE,oBAAoB,CAAC;SAClC,KAAK,CAAC,KAAK,CAAC;SACZ,IAAI,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;QACtE,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC;QACzC,MAAM,MAAM,GAAG,IAAI,EAAE,OAAO,IAAI,UAAU,EAAE,OAAO,CAAC;QACpD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IACL,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AAC5C,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Entity, type
|
|
1
|
+
import { type Entity, type World } from "@vworlds/vecs";
|
|
2
2
|
import { type PhysicsState } from "../adapter/state.js";
|
|
3
|
-
export declare function installImpulseAccumulate(world: World, state: PhysicsState, phase: Entity):
|
|
3
|
+
export declare function installImpulseAccumulate(world: World, state: PhysicsState, phase: Entity): void;
|
|
4
4
|
export declare function registerImpulseHooks(world: World, state: PhysicsState): void;
|
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
import { AngularImpulse, Impulse } from "../components/force.js";
|
|
2
|
+
import { PhysicsSystemTag } from "../adapter/state.js";
|
|
2
3
|
import { resolveBodyId } from "../util/resolve_body.js";
|
|
3
4
|
export function installImpulseAccumulate(world, state, phase) {
|
|
4
|
-
|
|
5
|
+
const system = world
|
|
5
6
|
.system("PhysicsImpulseAccumulate")
|
|
6
7
|
.phase(phase)
|
|
7
8
|
.run(() => {
|
|
8
9
|
drainLinearImpulses(state);
|
|
9
10
|
drainAngularImpulses(state);
|
|
10
11
|
});
|
|
12
|
+
system.entity.add(PhysicsSystemTag);
|
|
11
13
|
}
|
|
12
14
|
export function registerImpulseHooks(world, state) {
|
|
13
15
|
world.component(Impulse).onSet((entity, impulse) => {
|
|
14
|
-
const bodyId = resolveBodyId(entity
|
|
16
|
+
const bodyId = resolveBodyId(entity);
|
|
15
17
|
if (bodyId === undefined) {
|
|
16
18
|
return;
|
|
17
19
|
}
|
|
@@ -22,7 +24,7 @@ export function registerImpulseHooks(world, state) {
|
|
|
22
24
|
accumulator.wake || (accumulator.wake = impulse.wake);
|
|
23
25
|
});
|
|
24
26
|
world.component(AngularImpulse).onSet((entity, impulse) => {
|
|
25
|
-
const bodyId = resolveBodyId(entity
|
|
27
|
+
const bodyId = resolveBodyId(entity);
|
|
26
28
|
if (bodyId === undefined) {
|
|
27
29
|
return;
|
|
28
30
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"impulse_accumulate.js","sourceRoot":"","sources":["../../../../src/systems/impulse_accumulate.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"impulse_accumulate.js","sourceRoot":"","sources":["../../../../src/systems/impulse_accumulate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { type Entity, type
|
|
1
|
+
import { type Entity, type World } from "@vworlds/vecs";
|
|
2
2
|
import { type PhysicsState } from "../adapter/state.js";
|
|
3
|
-
export declare function installImpulseZero(world: World, state: PhysicsState, phase: Entity):
|
|
3
|
+
export declare function installImpulseZero(world: World, state: PhysicsState, phase: Entity): void;
|
package/systems/impulse_zero.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { AngularImpulse, Impulse } from "../components/force.js";
|
|
2
|
+
import { PhysicsSystemTag } from "../adapter/state.js";
|
|
2
3
|
export function installImpulseZero(world, state, phase) {
|
|
3
|
-
|
|
4
|
+
const system = world
|
|
4
5
|
.system("PhysicsImpulseZero")
|
|
5
6
|
.phase(phase)
|
|
6
7
|
.run(() => {
|
|
@@ -21,5 +22,6 @@ export function installImpulseZero(world, state, phase) {
|
|
|
21
22
|
}
|
|
22
23
|
state.impulseEntitiesThisStep.clear();
|
|
23
24
|
});
|
|
25
|
+
system.entity.add(PhysicsSystemTag);
|
|
24
26
|
}
|
|
25
27
|
//# sourceMappingURL=impulse_zero.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"impulse_zero.js","sourceRoot":"","sources":["../../../../src/systems/impulse_zero.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"impulse_zero.js","sourceRoot":"","sources":["../../../../src/systems/impulse_zero.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAqB,MAAM,qBAAqB,CAAC;AAE1E,MAAM,UAAU,kBAAkB,CAAC,KAAY,EAAE,KAAmB,EAAE,KAAa;IACjF,MAAM,MAAM,GAAG,KAAK;SACjB,MAAM,CAAC,oBAAoB,CAAC;SAC5B,KAAK,CAAC,KAAK,CAAC;SACZ,GAAG,CAAC,GAAG,EAAE;QACR,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,uBAAuB,EAAE,CAAC;YAChD,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,SAAS;YACX,CAAC;YAED,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAwB,CAAC;YACvD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBACtB,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBACV,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACZ,CAAC;YAED,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,cAAc,CAA+B,CAAC;YACpE,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;gBACrB,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC;YACf,CAAC;QACH,CAAC;QAED,KAAK,CAAC,uBAAuB,CAAC,KAAK,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;IACL,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AACtC,CAAC"}
|
package/systems/index.d.ts
CHANGED
|
@@ -11,6 +11,5 @@ export interface PhysicsSystemsOptions {
|
|
|
11
11
|
/** Install `PhysicsDebugValidation` when `true`. Default `false`. */
|
|
12
12
|
debug?: boolean;
|
|
13
13
|
}
|
|
14
|
-
/** Register every physics system into `world`, bound to `state
|
|
15
|
-
* system entity with {@link PhysicsSystemTag}. */
|
|
14
|
+
/** Register every physics system into `world`, bound to `state`. */
|
|
16
15
|
export declare function registerPhysicsSystems(world: World, state: PhysicsState, phases: PhysicsPhases, opts?: PhysicsSystemsOptions): void;
|
package/systems/index.js
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
// 5. PhysicsShapePoseSync — propagates ShapePosition/ShapeRotation updates
|
|
13
13
|
// 6. PhysicsPoseSyncIn — syncs Position/Rotation/Velocity into body sims
|
|
14
14
|
// 7. PhysicsKinematicTargets — sets target-convergence velocity on kinematic bodies (VP-20)
|
|
15
|
-
// 8. PhysicsForceGather
|
|
15
|
+
// 8. PhysicsForceGather:* — applies Force and Torque to body sims each step (VP-19)
|
|
16
16
|
// 9. PhysicsImpulseAccumulate — drains Impulse/AngularImpulse into pendingImpulses (VP-19)
|
|
17
17
|
// 10. PhysicsMassRecompute — recomputes mass for dirty bodies (last pre-step)
|
|
18
18
|
// 11. PhysicsDebugValidation — structural validation (ONLY when debug: true, VP-25)
|
|
@@ -21,7 +21,6 @@
|
|
|
21
21
|
// 1. PhysicsPoseSyncOut — write simulated pose back to ECS
|
|
22
22
|
// 2. PhysicsEvents — fan raw event arrays out to ContactEvents/SensorEvents/HitEvents (VP-21b)
|
|
23
23
|
// 3. PhysicsImpulseZero — silently zero consumed Impulse/AngularImpulse (VP-19)
|
|
24
|
-
import { PhysicsSystemTag } from "../adapter/state.js";
|
|
25
24
|
import { installDebugValidation } from "./debug.js";
|
|
26
25
|
import { installEventOptInSync } from "./event_opt_in_sync.js";
|
|
27
26
|
import { installEvents } from "./events.js";
|
|
@@ -37,45 +36,37 @@ import { installPoseSyncOut } from "./pose_sync_out.js";
|
|
|
37
36
|
import { installShapeLifecycle } from "./shape_lifecycle.js";
|
|
38
37
|
import { installShapePoseSync } from "./shape_pose_sync.js";
|
|
39
38
|
import { installStep } from "./step.js";
|
|
40
|
-
/** Register every physics system into `world`, bound to `state
|
|
41
|
-
* system entity with {@link PhysicsSystemTag}. */
|
|
39
|
+
/** Register every physics system into `world`, bound to `state`. */
|
|
42
40
|
export function registerPhysicsSystems(world, state, phases, opts = {}) {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
installImpulseZero(world, state, phases.postStep),
|
|
69
|
-
];
|
|
41
|
+
// physics-pre: lifecycle + sync systems in dependency order.
|
|
42
|
+
installBodyLifecycle(world, state, phases.preStep);
|
|
43
|
+
installShapeLifecycle(world, state, phases.preStep);
|
|
44
|
+
installMaterialFilterSync(world, state, phases.preStep);
|
|
45
|
+
// physics-pre: keep event opt-in flags in sync when ContactEvents/HitEvents/
|
|
46
|
+
// SensorEvents are added/removed on a shape after creation (hook-based).
|
|
47
|
+
installEventOptInSync(world, state, phases.preStep);
|
|
48
|
+
installShapePoseSync(world, state, phases.preStep);
|
|
49
|
+
installPoseSyncIn(world, state, phases.preStep);
|
|
50
|
+
// physics-pre: kinematic target drive after PoseSyncIn, before ForceGather (VP-20).
|
|
51
|
+
installKinematicTargets(world, state, phases.preStep);
|
|
52
|
+
// physics-pre: force/impulse systems after KinematicTargets, before MassRecompute (VP-19).
|
|
53
|
+
installForceGather(world, state, phases.preStep);
|
|
54
|
+
installImpulseAccumulate(world, state, phases.preStep);
|
|
55
|
+
// physics-pre: mass recompute — last pre-step, after all lifecycle/sync/force.
|
|
56
|
+
installMassRecompute(world, state, phases.preStep);
|
|
57
|
+
// physics-step: integrator.
|
|
58
|
+
installStep(world, state, phases.step);
|
|
59
|
+
// physics-post: write simulated pose back to ECS.
|
|
60
|
+
installPoseSyncOut(world, state, phases.postStep);
|
|
61
|
+
// physics-post: fan raw event arrays out to ECS event components (VP-21b).
|
|
62
|
+
// Must run AFTER PoseSyncOut (so positions are up to date) and BEFORE ImpulseZero.
|
|
63
|
+
installEvents(world, state, phases.postStep);
|
|
64
|
+
// physics-post: silently zero consumed Impulse/AngularImpulse (last in post).
|
|
65
|
+
installImpulseZero(world, state, phases.postStep);
|
|
70
66
|
// physics-pre: debug validation — LAST in physics-pre, ONLY when debug: true.
|
|
71
67
|
// Runs after all lifecycle/sync/mass so the world is fully wired for the step.
|
|
72
68
|
if (opts.debug === true) {
|
|
73
|
-
|
|
74
|
-
systems.push(debugSystem);
|
|
75
|
-
}
|
|
76
|
-
// Tag every physics system entity for the `ignoreSource` silence domain.
|
|
77
|
-
for (const system of systems) {
|
|
78
|
-
system.entity.add(PhysicsSystemTag);
|
|
69
|
+
installDebugValidation(world, state, phases.preStep);
|
|
79
70
|
}
|
|
80
71
|
}
|
|
81
72
|
//# sourceMappingURL=index.js.map
|
package/systems/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/systems/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,gFAAgF;AAChF,gFAAgF;AAChF,uEAAuE;AACvE,mCAAmC;AACnC,EAAE;AACF,uEAAuE;AACvE,gFAAgF;AAChF,wFAAwF;AACxF,6EAA6E;AAC7E,mGAAmG;AACnG,kFAAkF;AAClF,mFAAmF;AACnF,gGAAgG;AAChG,2FAA2F;AAC3F,8FAA8F;AAC9F,oFAAoF;AACpF,wFAAwF;AACxF,EAAE;AACF,4BAA4B;AAC5B,8DAA8D;AAC9D,uGAAuG;AACvG,mFAAmF;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/systems/index.ts"],"names":[],"mappings":"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"}
|
package/systems/kinematic.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { type Entity, type
|
|
1
|
+
import { type Entity, type World } from "@vworlds/vecs";
|
|
2
2
|
import { type PhysicsState } from "../adapter/state.js";
|
|
3
|
-
export declare function installKinematicTargets(world: World, state: PhysicsState, phase: Entity):
|
|
3
|
+
export declare function installKinematicTargets(world: World, state: PhysicsState, phase: Entity): void;
|
package/systems/kinematic.js
CHANGED
|
@@ -1,26 +1,25 @@
|
|
|
1
1
|
import { Body } from "../components/body.js";
|
|
2
2
|
import { KinematicTargetPosition, KinematicTargetRotation } from "../components/target.js";
|
|
3
|
+
import { PhysicsSystemTag } from "../adapter/state.js";
|
|
3
4
|
export function installKinematicTargets(world, state, phase) {
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
const dt = state.fixedTimeStep;
|
|
6
|
+
if (dt <= 0) {
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
const system = world
|
|
8
10
|
.system("PhysicsKinematicTargets")
|
|
11
|
+
.with({ all: [Body, { any: [KinematicTargetPosition, KinematicTargetRotation] }] })
|
|
9
12
|
.phase(phase)
|
|
10
|
-
.
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
+
.each([Body, KinematicTargetPosition, KinematicTargetRotation], (_entity, tuple) => {
|
|
14
|
+
const [body, positionTarget, rotationTarget] = tuple;
|
|
15
|
+
const bodyId = body._bodyId;
|
|
16
|
+
if (bodyId === undefined || !isKinematicBody(state, bodyId)) {
|
|
13
17
|
return;
|
|
14
18
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
if (bodyId === undefined || !isKinematicBody(state, bodyId)) {
|
|
18
|
-
return;
|
|
19
|
-
}
|
|
20
|
-
drivePositionTarget(state, bodyId, entity.get(KinematicTargetPosition), dt);
|
|
21
|
-
driveRotationTarget(state, bodyId, entity.get(KinematicTargetRotation), dt);
|
|
22
|
-
});
|
|
19
|
+
drivePositionTarget(state, bodyId, positionTarget, dt);
|
|
20
|
+
driveRotationTarget(state, bodyId, rotationTarget, dt);
|
|
23
21
|
});
|
|
22
|
+
system.entity.add(PhysicsSystemTag);
|
|
24
23
|
}
|
|
25
24
|
function drivePositionTarget(state, bodyId, target, dt) {
|
|
26
25
|
if (target === undefined) {
|
package/systems/kinematic.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kinematic.js","sourceRoot":"","sources":["../../../../src/systems/kinematic.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"kinematic.js","sourceRoot":"","sources":["../../../../src/systems/kinematic.ts"],"names":[],"mappings":"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"}
|
package/systems/lifecycle.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { type Entity, type
|
|
1
|
+
import { type Entity, type World } from "@vworlds/vecs";
|
|
2
2
|
import { type PhysicsState } from "../adapter/state.js";
|
|
3
|
-
export declare function installBodyLifecycle(world: World, state: PhysicsState, phase: Entity):
|
|
3
|
+
export declare function installBodyLifecycle(world: World, state: PhysicsState, phase: Entity): void;
|
package/systems/lifecycle.js
CHANGED
|
@@ -1,25 +1,28 @@
|
|
|
1
1
|
import { AngularVelocity, Body, BodyType, LinearVelocity, Position, Rotation, } from "../components/body.js";
|
|
2
2
|
import { Damping, GravityScale, MotionLocks, Sleep } from "../components/body_tuning.js";
|
|
3
|
+
import { PhysicsSystemTag } from "../adapter/state.js";
|
|
3
4
|
import { withAllocated } from "../adapter/disposal.js";
|
|
4
5
|
export function installBodyLifecycle(world, state, phase) {
|
|
5
6
|
const system = world.system("PhysicsBodyLifecycle").with(Body).phase(phase);
|
|
6
|
-
system.
|
|
7
|
-
|
|
7
|
+
system.entity.add(PhysicsSystemTag);
|
|
8
|
+
system.enter([Body], (entity, [body]) => {
|
|
8
9
|
const bodyId = createWasmBodyId(state, entity, body);
|
|
9
|
-
|
|
10
|
+
body._bodyId = bodyId;
|
|
10
11
|
state.entityByBodyIndex.set(bodyId.index1, entity.eid);
|
|
11
12
|
});
|
|
12
|
-
|
|
13
|
-
|
|
13
|
+
// Inject `[Body]` so the handle survives the post-`_destroy` snapshot -- by
|
|
14
|
+
// the time the exit callback runs (next tick's inbox drain), `entity.get(Body)`
|
|
15
|
+
// would return `undefined`.
|
|
16
|
+
system.exit([Body], (entity, [body]) => {
|
|
17
|
+
const bodyId = body?._bodyId;
|
|
14
18
|
if (bodyId === undefined) {
|
|
15
19
|
return;
|
|
16
20
|
}
|
|
17
21
|
state.box2d.b2DestroyBody(bodyId);
|
|
18
|
-
state.bodyByEntityWasm.delete(entity.eid);
|
|
19
22
|
state.entityByBodyIndex.delete(bodyId.index1);
|
|
20
23
|
});
|
|
21
24
|
system.update(Body, (entity, body) => {
|
|
22
|
-
const bodyId =
|
|
25
|
+
const bodyId = body._bodyId;
|
|
23
26
|
if (bodyId === undefined) {
|
|
24
27
|
return;
|
|
25
28
|
}
|
|
@@ -32,23 +35,37 @@ export function installBodyLifecycle(world, state, phase) {
|
|
|
32
35
|
}
|
|
33
36
|
state.box2d.b2Body_SetBullet(bodyId, body.bullet);
|
|
34
37
|
});
|
|
35
|
-
|
|
36
|
-
|
|
38
|
+
const dampingSystem = world
|
|
39
|
+
.system("PhysicsBodyLifecycle:Damping")
|
|
40
|
+
.with(Body, Damping)
|
|
41
|
+
.phase(phase)
|
|
42
|
+
.update(Damping, [Body], (entity, damping, [body]) => {
|
|
43
|
+
const bodyId = body?._bodyId;
|
|
37
44
|
if (bodyId === undefined) {
|
|
38
45
|
return;
|
|
39
46
|
}
|
|
40
47
|
state.box2d.b2Body_SetLinearDamping(bodyId, damping.linear);
|
|
41
48
|
state.box2d.b2Body_SetAngularDamping(bodyId, damping.angular);
|
|
42
49
|
});
|
|
43
|
-
|
|
44
|
-
|
|
50
|
+
dampingSystem.entity.add(PhysicsSystemTag);
|
|
51
|
+
const gravityScaleSystem = world
|
|
52
|
+
.system("PhysicsBodyLifecycle:GravityScale")
|
|
53
|
+
.with(Body, GravityScale)
|
|
54
|
+
.phase(phase)
|
|
55
|
+
.update(GravityScale, [Body], (entity, gravityScale, [body]) => {
|
|
56
|
+
const bodyId = body?._bodyId;
|
|
45
57
|
if (bodyId === undefined) {
|
|
46
58
|
return;
|
|
47
59
|
}
|
|
48
60
|
state.box2d.b2Body_SetGravityScale(bodyId, gravityScale.value);
|
|
49
61
|
});
|
|
50
|
-
|
|
51
|
-
|
|
62
|
+
gravityScaleSystem.entity.add(PhysicsSystemTag);
|
|
63
|
+
const motionLocksSystem = world
|
|
64
|
+
.system("PhysicsBodyLifecycle:MotionLocks")
|
|
65
|
+
.with(Body, MotionLocks)
|
|
66
|
+
.phase(phase)
|
|
67
|
+
.update(MotionLocks, [Body], (entity, locks, [body]) => {
|
|
68
|
+
const bodyId = body?._bodyId;
|
|
52
69
|
if (bodyId === undefined) {
|
|
53
70
|
return;
|
|
54
71
|
}
|
|
@@ -59,8 +76,13 @@ export function installBodyLifecycle(world, state, phase) {
|
|
|
59
76
|
state.box2d.b2Body_SetMotionLocks(bodyId, motionLocks);
|
|
60
77
|
});
|
|
61
78
|
});
|
|
62
|
-
|
|
63
|
-
|
|
79
|
+
motionLocksSystem.entity.add(PhysicsSystemTag);
|
|
80
|
+
const sleepSystem = world
|
|
81
|
+
.system("PhysicsBodyLifecycle:Sleep")
|
|
82
|
+
.with(Body, Sleep)
|
|
83
|
+
.phase(phase)
|
|
84
|
+
.update(Sleep, [Body], (entity, sleep, [body]) => {
|
|
85
|
+
const bodyId = body?._bodyId;
|
|
64
86
|
if (bodyId === undefined) {
|
|
65
87
|
return;
|
|
66
88
|
}
|
|
@@ -68,7 +90,7 @@ export function installBodyLifecycle(world, state, phase) {
|
|
|
68
90
|
state.box2d.b2Body_SetAwake(bodyId, sleep.awake);
|
|
69
91
|
state.box2d.b2Body_SetSleepThreshold(bodyId, sleep.threshold);
|
|
70
92
|
});
|
|
71
|
-
|
|
93
|
+
sleepSystem.entity.add(PhysicsSystemTag);
|
|
72
94
|
}
|
|
73
95
|
function createWasmBodyId(state, entity, body) {
|
|
74
96
|
const box2d = state.box2d;
|
package/systems/lifecycle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../../../src/systems/lifecycle.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,eAAe,EACf,IAAI,EACJ,QAAQ,EACR,cAAc,EACd,QAAQ,EACR,QAAQ,GACT,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../../../src/systems/lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { type Entity, type
|
|
1
|
+
import { type Entity, type World } from "@vworlds/vecs";
|
|
2
2
|
import { type PhysicsState } from "../adapter/state.js";
|
|
3
|
-
export declare function installMassRecompute(world: World, state: PhysicsState, phase: Entity):
|
|
3
|
+
export declare function installMassRecompute(world: World, state: PhysicsState, phase: Entity): void;
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { Body, BodyType } from "../components/body.js";
|
|
2
|
+
import { PhysicsSystemTag } from "../adapter/state.js";
|
|
2
3
|
const CODE_DYNAMIC_BODY_WITHOUT_DENSITY = "dynamic-body-without-density";
|
|
3
4
|
export function installMassRecompute(world, state, phase) {
|
|
4
|
-
|
|
5
|
+
const system = world
|
|
5
6
|
.system("PhysicsMassRecompute")
|
|
6
7
|
.phase(phase)
|
|
7
8
|
.run(() => {
|
|
8
9
|
for (const eid of state.dirtyMassBodies) {
|
|
9
|
-
const bodyId =
|
|
10
|
+
const bodyId = world.getEntity(eid)?.get(Body)?._bodyId;
|
|
10
11
|
if (bodyId !== undefined) {
|
|
11
12
|
state.box2d.b2Body_ApplyMassFromShapes(bodyId);
|
|
12
13
|
}
|
|
@@ -16,14 +17,15 @@ export function installMassRecompute(world, state, phase) {
|
|
|
16
17
|
warnOnMasslessDynamicBodies(world, state);
|
|
17
18
|
}
|
|
18
19
|
});
|
|
20
|
+
system.entity.add(PhysicsSystemTag);
|
|
19
21
|
}
|
|
20
22
|
function warnOnMasslessDynamicBodies(world, state) {
|
|
21
|
-
|
|
22
|
-
const
|
|
23
|
-
const
|
|
24
|
-
if (body
|
|
23
|
+
world.filter(Body).forEach([Body], (entity, [body]) => {
|
|
24
|
+
const eid = entity.eid;
|
|
25
|
+
const bodyId = body._bodyId;
|
|
26
|
+
if (body.type !== BodyType.Dynamic || bodyId === undefined) {
|
|
25
27
|
state.warn.rearm(eid, CODE_DYNAMIC_BODY_WITHOUT_DENSITY);
|
|
26
|
-
|
|
28
|
+
return;
|
|
27
29
|
}
|
|
28
30
|
if (state.box2d.b2Body_GetMass(bodyId) === 0) {
|
|
29
31
|
state.warn.warnOnce(eid, CODE_DYNAMIC_BODY_WITHOUT_DENSITY, `Entity${eid} is a dynamic body with zero mass after recompute; it will not fall.`);
|
|
@@ -31,6 +33,6 @@ function warnOnMasslessDynamicBodies(world, state) {
|
|
|
31
33
|
else {
|
|
32
34
|
state.warn.rearm(eid, CODE_DYNAMIC_BODY_WITHOUT_DENSITY);
|
|
33
35
|
}
|
|
34
|
-
}
|
|
36
|
+
});
|
|
35
37
|
}
|
|
36
38
|
//# sourceMappingURL=mass_recompute.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mass_recompute.js","sourceRoot":"","sources":["../../../../src/systems/mass_recompute.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"mass_recompute.js","sourceRoot":"","sources":["../../../../src/systems/mass_recompute.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAqB,MAAM,qBAAqB,CAAC;AAE1E,MAAM,iCAAiC,GAAG,8BAA8B,CAAC;AAEzE,MAAM,UAAU,oBAAoB,CAAC,KAAY,EAAE,KAAmB,EAAE,KAAa;IACnF,MAAM,MAAM,GAAG,KAAK;SACjB,MAAM,CAAC,sBAAsB,CAAC;SAC9B,KAAK,CAAC,KAAK,CAAC;SACZ,GAAG,CAAC,GAAG,EAAE;QACR,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;YACxD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,KAAK,CAAC,KAAK,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;QACD,KAAK,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAE9B,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,2BAA2B,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC,CAAC,CAAC;IACL,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,2BAA2B,CAAC,KAAY,EAAE,KAAmB;IACpE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE;QACpD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,OAAO,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAC3D,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,iCAAiC,CAAC,CAAC;YACzD,OAAO;QACT,CAAC;QAED,IAAI,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7C,KAAK,CAAC,IAAI,CAAC,QAAQ,CACjB,GAAG,EACH,iCAAiC,EACjC,SAAS,GAAG,sEAAsE,CACnF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,iCAAiC,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
|