@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.
Files changed (183) hide show
  1. package/adapter/engine.d.ts +14 -4
  2. package/adapter/engine.js +9 -11
  3. package/adapter/engine.js.map +1 -1
  4. package/adapter/queries.d.ts +1 -1
  5. package/adapter/queries.js +1 -1
  6. package/adapter/queries.js.map +1 -1
  7. package/adapter/runtime.js +1 -1
  8. package/adapter/runtime.js.map +1 -1
  9. package/{components/body.js → body/components.js} +2 -2
  10. package/body/components.js.map +1 -0
  11. package/body/lifecycle.d.ts +4 -0
  12. package/body/lifecycle.js +153 -0
  13. package/body/lifecycle.js.map +1 -0
  14. package/body/mass.d.ts +4 -0
  15. package/body/mass.js +45 -0
  16. package/body/mass.js.map +1 -0
  17. package/body/module.d.ts +4 -0
  18. package/body/module.js +22 -0
  19. package/body/module.js.map +1 -0
  20. package/body/pose_in.d.ts +4 -0
  21. package/body/pose_in.js +90 -0
  22. package/body/pose_in.js.map +1 -0
  23. package/body/pose_out.d.ts +4 -0
  24. package/body/pose_out.js +59 -0
  25. package/body/pose_out.js.map +1 -0
  26. package/{components/body_tuning.js → body/tuning.js} +1 -1
  27. package/body/tuning.js.map +1 -0
  28. package/core/module.d.ts +30 -0
  29. package/core/module.js +77 -0
  30. package/core/module.js.map +1 -0
  31. package/core/reaper.d.ts +4 -0
  32. package/core/reaper.js +45 -0
  33. package/core/reaper.js.map +1 -0
  34. package/core/step.d.ts +4 -0
  35. package/core/step.js +22 -0
  36. package/core/step.js.map +1 -0
  37. package/debug/validation.d.ts +4 -0
  38. package/{systems/debug.js → debug/validation.js} +51 -35
  39. package/debug/validation.js.map +1 -0
  40. package/{components/events.js → events/components.js} +1 -1
  41. package/events/components.js.map +1 -0
  42. package/events/module.d.ts +4 -0
  43. package/events/module.js +13 -0
  44. package/events/module.js.map +1 -0
  45. package/events/opt_in.d.ts +4 -0
  46. package/events/opt_in.js +86 -0
  47. package/events/opt_in.js.map +1 -0
  48. package/events/publish.d.ts +4 -0
  49. package/{systems/events.js → events/publish.js} +43 -34
  50. package/events/publish.js.map +1 -0
  51. package/{components/force.js → forces/components.js} +1 -1
  52. package/forces/components.js.map +1 -0
  53. package/forces/gather.d.ts +4 -0
  54. package/forces/gather.js +42 -0
  55. package/forces/gather.js.map +1 -0
  56. package/forces/impulses.d.ts +4 -0
  57. package/forces/impulses.js +79 -0
  58. package/forces/impulses.js.map +1 -0
  59. package/forces/module.d.ts +4 -0
  60. package/forces/module.js +20 -0
  61. package/forces/module.js.map +1 -0
  62. package/forces/zero.d.ts +4 -0
  63. package/forces/zero.js +34 -0
  64. package/forces/zero.js.map +1 -0
  65. package/index.d.ts +9 -8
  66. package/index.js +10 -8
  67. package/index.js.map +1 -1
  68. package/joints/components.d.ts +116 -0
  69. package/joints/components.js +150 -0
  70. package/joints/components.js.map +1 -0
  71. package/joints/features.d.ts +4 -0
  72. package/joints/features.js +158 -0
  73. package/joints/features.js.map +1 -0
  74. package/joints/lifecycle.d.ts +4 -0
  75. package/joints/lifecycle.js +191 -0
  76. package/joints/lifecycle.js.map +1 -0
  77. package/joints/module.d.ts +4 -0
  78. package/joints/module.js +33 -0
  79. package/joints/module.js.map +1 -0
  80. package/joints/predicates.d.ts +9 -0
  81. package/joints/predicates.js +10 -0
  82. package/joints/predicates.js.map +1 -0
  83. package/{components/target.js → kinematic/components.js} +1 -1
  84. package/kinematic/components.js.map +1 -0
  85. package/kinematic/module.d.ts +4 -0
  86. package/kinematic/module.js +16 -0
  87. package/kinematic/module.js.map +1 -0
  88. package/kinematic/targets.d.ts +4 -0
  89. package/{systems/kinematic.js → kinematic/targets.js} +27 -20
  90. package/kinematic/targets.js.map +1 -0
  91. package/{components/material.js → materials/components.js} +1 -1
  92. package/materials/components.js.map +1 -0
  93. package/materials/module.d.ts +4 -0
  94. package/materials/module.js +18 -0
  95. package/materials/module.js.map +1 -0
  96. package/materials/sync.d.ts +4 -0
  97. package/materials/sync.js +136 -0
  98. package/materials/sync.js.map +1 -0
  99. package/module.d.ts +3 -27
  100. package/module.js +45 -141
  101. package/module.js.map +1 -1
  102. package/package.json +2 -2
  103. package/shapes/chain.d.ts +8 -0
  104. package/{systems/chain_lifecycle.js → shapes/chain.js} +41 -31
  105. package/shapes/chain.js.map +1 -0
  106. package/{components/geometry.js → shapes/components.js} +2 -2
  107. package/{components/geometry.js.map → shapes/components.js.map} +1 -1
  108. package/{systems/shape_lifecycle.d.ts → shapes/lifecycle.d.ts} +7 -5
  109. package/{systems/shape_lifecycle.js → shapes/lifecycle.js} +53 -42
  110. package/shapes/lifecycle.js.map +1 -0
  111. package/shapes/module.d.ts +4 -0
  112. package/shapes/module.js +34 -0
  113. package/shapes/module.js.map +1 -0
  114. package/{components/shape_pose.js → shapes/pose_components.js} +1 -1
  115. package/shapes/pose_components.js.map +1 -0
  116. package/shapes/pose_sync.d.ts +4 -0
  117. package/shapes/pose_sync.js +70 -0
  118. package/shapes/pose_sync.js.map +1 -0
  119. package/{systems/shape_predicates.d.ts → shapes/predicates.d.ts} +2 -2
  120. package/{systems/shape_predicates.js → shapes/predicates.js} +3 -3
  121. package/shapes/predicates.js.map +1 -0
  122. package/util/resolve_body.js +1 -1
  123. package/components/body.js.map +0 -1
  124. package/components/body_tuning.js.map +0 -1
  125. package/components/events.js.map +0 -1
  126. package/components/force.js.map +0 -1
  127. package/components/material.js.map +0 -1
  128. package/components/shape_pose.js.map +0 -1
  129. package/components/target.js.map +0 -1
  130. package/systems/chain_lifecycle.d.ts +0 -6
  131. package/systems/chain_lifecycle.js.map +0 -1
  132. package/systems/debug.d.ts +0 -4
  133. package/systems/debug.js.map +0 -1
  134. package/systems/event_opt_in_sync.d.ts +0 -3
  135. package/systems/event_opt_in_sync.js +0 -73
  136. package/systems/event_opt_in_sync.js.map +0 -1
  137. package/systems/events.d.ts +0 -3
  138. package/systems/events.js.map +0 -1
  139. package/systems/forces.d.ts +0 -3
  140. package/systems/forces.js +0 -35
  141. package/systems/forces.js.map +0 -1
  142. package/systems/impulse_accumulate.d.ts +0 -4
  143. package/systems/impulse_accumulate.js +0 -74
  144. package/systems/impulse_accumulate.js.map +0 -1
  145. package/systems/impulse_zero.d.ts +0 -3
  146. package/systems/impulse_zero.js +0 -27
  147. package/systems/impulse_zero.js.map +0 -1
  148. package/systems/index.d.ts +0 -15
  149. package/systems/index.js +0 -80
  150. package/systems/index.js.map +0 -1
  151. package/systems/kinematic.d.ts +0 -3
  152. package/systems/kinematic.js.map +0 -1
  153. package/systems/lifecycle.d.ts +0 -4
  154. package/systems/lifecycle.js +0 -177
  155. package/systems/lifecycle.js.map +0 -1
  156. package/systems/mass_recompute.d.ts +0 -3
  157. package/systems/mass_recompute.js +0 -38
  158. package/systems/mass_recompute.js.map +0 -1
  159. package/systems/material_filter_sync.d.ts +0 -3
  160. package/systems/material_filter_sync.js +0 -129
  161. package/systems/material_filter_sync.js.map +0 -1
  162. package/systems/pose_sync_in.d.ts +0 -3
  163. package/systems/pose_sync_in.js +0 -79
  164. package/systems/pose_sync_in.js.map +0 -1
  165. package/systems/pose_sync_out.d.ts +0 -3
  166. package/systems/pose_sync_out.js +0 -52
  167. package/systems/pose_sync_out.js.map +0 -1
  168. package/systems/shape_lifecycle.js.map +0 -1
  169. package/systems/shape_pose_sync.d.ts +0 -3
  170. package/systems/shape_pose_sync.js +0 -63
  171. package/systems/shape_pose_sync.js.map +0 -1
  172. package/systems/shape_predicates.js.map +0 -1
  173. package/systems/step.d.ts +0 -3
  174. package/systems/step.js +0 -15
  175. package/systems/step.js.map +0 -1
  176. /package/{components/body.d.ts → body/components.d.ts} +0 -0
  177. /package/{components/body_tuning.d.ts → body/tuning.d.ts} +0 -0
  178. /package/{components/events.d.ts → events/components.d.ts} +0 -0
  179. /package/{components/force.d.ts → forces/components.d.ts} +0 -0
  180. /package/{components/target.d.ts → kinematic/components.d.ts} +0 -0
  181. /package/{components/material.d.ts → materials/components.d.ts} +0 -0
  182. /package/{components/geometry.d.ts → shapes/components.d.ts} +0 -0
  183. /package/{components/shape_pose.d.ts → shapes/pose_components.d.ts} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"event_opt_in_sync.js","sourceRoot":"","sources":["../../../../src/systems/event_opt_in_sync.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { type Entity, type World } from "@vworlds/vecs";
2
- import { type PhysicsEngine } from "../adapter/engine.js";
3
- export declare function installEvents(world: World, engine: PhysicsEngine, phase: Entity): void;
@@ -1 +0,0 @@
1
- {"version":3,"file":"events.js","sourceRoot":"","sources":["../../../../src/systems/events.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { type Entity, type World } from "@vworlds/vecs";
2
- import { type PhysicsEngine } from "../adapter/engine.js";
3
- export declare function installForceGather(world: World, engine: PhysicsEngine, phase: Entity): void;
package/systems/forces.js DELETED
@@ -1,35 +0,0 @@
1
- import { ChildOf } from "@vworlds/vecs";
2
- import { Body } from "../components/body.js";
3
- import { Force, Torque } from "../components/force.js";
4
- import { scr_b2Vec2 } from "../adapter/runtime.js";
5
- import { PhysicsSystemTag } from "../adapter/engine.js";
6
- const forceTargetPredicate = { any: [Body, { parent: Body }] };
7
- export function installForceGather(world, engine, phase) {
8
- const forceSystem = world
9
- .system("PhysicsForceGather:Force")
10
- .with(Force, forceTargetPredicate)
11
- .phase(phase);
12
- forceSystem.entity.add(PhysicsSystemTag);
13
- forceSystem.each([Force, Body, { target: [ChildOf, [Body]] }], (_entity, [force, body, parentBody]) => {
14
- const bodyId = body?._bodyId ?? parentBody?._bodyId;
15
- if (bodyId === undefined) {
16
- return;
17
- }
18
- const vec = scr_b2Vec2[0];
19
- vec.Set(force.x, force.y);
20
- engine.box2d.b2Body_ApplyForceToCenter(bodyId, vec, force.wake);
21
- });
22
- const torqueSystem = world
23
- .system("PhysicsForceGather:Torque")
24
- .with(Torque, forceTargetPredicate)
25
- .phase(phase)
26
- .each([Torque, Body, { target: [ChildOf, [Body]] }], (_entity, [torque, body, parentBody]) => {
27
- const bodyId = body?._bodyId ?? parentBody?._bodyId;
28
- if (bodyId === undefined) {
29
- return;
30
- }
31
- engine.box2d.b2Body_ApplyTorque(bodyId, torque.value, torque.wake);
32
- });
33
- torqueSystem.entity.add(PhysicsSystemTag);
34
- }
35
- //# sourceMappingURL=forces.js.map
@@ -1 +0,0 @@
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,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAsB,MAAM,sBAAsB,CAAC;AAE5E,MAAM,oBAAoB,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAW,CAAC;AAExE,MAAM,UAAU,kBAAkB,CAAC,KAAY,EAAE,MAAqB,EAAE,KAAa;IACnF,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,CACd,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAC5C,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,IAAI,EAAE,OAAO,IAAI,UAAU,EAAE,OAAO,CAAC;QACpD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAC1B,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAClE,CAAC,CACF,CAAC;IAEF,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,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC,EAAE,EAAE;QAC3F,MAAM,MAAM,GAAG,IAAI,EAAE,OAAO,IAAI,UAAU,EAAE,OAAO,CAAC;QACpD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IACL,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AAC5C,CAAC"}
@@ -1,4 +0,0 @@
1
- import { type Entity, type World } from "@vworlds/vecs";
2
- import { type PhysicsEngine } from "../adapter/engine.js";
3
- export declare function installImpulseAccumulate(world: World, engine: PhysicsEngine, phase: Entity): void;
4
- export declare function registerImpulseHooks(world: World, engine: PhysicsEngine): void;
@@ -1,74 +0,0 @@
1
- import { AngularImpulse, Impulse } from "../components/force.js";
2
- import { scr_b2Vec2 } from "../adapter/runtime.js";
3
- import { PhysicsSystemTag } from "../adapter/engine.js";
4
- import { resolveBodyId } from "../util/resolve_body.js";
5
- export function installImpulseAccumulate(world, engine, phase) {
6
- const system = world
7
- .system("PhysicsImpulseAccumulate")
8
- .phase(phase)
9
- .run(() => {
10
- drainLinearImpulses(engine);
11
- drainAngularImpulses(engine);
12
- });
13
- system.entity.add(PhysicsSystemTag);
14
- }
15
- export function registerImpulseHooks(world, engine) {
16
- world.component(Impulse).onSet((entity, impulse) => {
17
- const bodyId = resolveBodyId(entity);
18
- if (bodyId === undefined) {
19
- return;
20
- }
21
- engine.impulseEntitiesThisStep.add(entity.eid);
22
- const accumulator = getLinearAccumulator(engine, bodyId);
23
- accumulator.x += impulse.x;
24
- accumulator.y += impulse.y;
25
- accumulator.wake || (accumulator.wake = impulse.wake);
26
- });
27
- world.component(AngularImpulse).onSet((entity, impulse) => {
28
- const bodyId = resolveBodyId(entity);
29
- if (bodyId === undefined) {
30
- return;
31
- }
32
- engine.impulseEntitiesThisStep.add(entity.eid);
33
- const accumulator = getAngularAccumulator(engine, bodyId);
34
- accumulator.value += impulse.value;
35
- accumulator.wake || (accumulator.wake = impulse.wake);
36
- });
37
- }
38
- function drainLinearImpulses(engine) {
39
- for (const [bodyId, impulse] of engine.pendingLinearImpulse) {
40
- if (!engine.entityByBodyIndex.has(bodyId.index1)) {
41
- continue;
42
- }
43
- const vec = scr_b2Vec2[0];
44
- vec.Set(impulse.x, impulse.y);
45
- engine.box2d.b2Body_ApplyLinearImpulseToCenter(bodyId, vec, impulse.wake);
46
- }
47
- engine.pendingLinearImpulse.clear();
48
- }
49
- function drainAngularImpulses(engine) {
50
- for (const [bodyId, impulse] of engine.pendingAngularImpulse) {
51
- if (!engine.entityByBodyIndex.has(bodyId.index1)) {
52
- continue;
53
- }
54
- engine.box2d.b2Body_ApplyAngularImpulse(bodyId, impulse.value, impulse.wake);
55
- }
56
- engine.pendingAngularImpulse.clear();
57
- }
58
- function getLinearAccumulator(engine, bodyId) {
59
- let accumulator = engine.pendingLinearImpulse.get(bodyId);
60
- if (accumulator === undefined) {
61
- accumulator = { x: 0, y: 0, wake: false };
62
- engine.pendingLinearImpulse.set(bodyId, accumulator);
63
- }
64
- return accumulator;
65
- }
66
- function getAngularAccumulator(engine, bodyId) {
67
- let accumulator = engine.pendingAngularImpulse.get(bodyId);
68
- if (accumulator === undefined) {
69
- accumulator = { value: 0, wake: false };
70
- engine.pendingAngularImpulse.set(bodyId, accumulator);
71
- }
72
- return accumulator;
73
- }
74
- //# sourceMappingURL=impulse_accumulate.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"impulse_accumulate.js","sourceRoot":"","sources":["../../../../src/systems/impulse_accumulate.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { type Entity, type World } from "@vworlds/vecs";
2
- import { type PhysicsEngine } from "../adapter/engine.js";
3
- export declare function installImpulseZero(world: World, engine: PhysicsEngine, phase: Entity): void;
@@ -1,27 +0,0 @@
1
- import { AngularImpulse, Impulse } from "../components/force.js";
2
- import { PhysicsSystemTag } from "../adapter/engine.js";
3
- export function installImpulseZero(world, engine, phase) {
4
- const system = world
5
- .system("PhysicsImpulseZero")
6
- .phase(phase)
7
- .run(() => {
8
- for (const eid of engine.impulseEntitiesThisStep) {
9
- const entity = world.getEntity(eid);
10
- if (entity === undefined) {
11
- continue;
12
- }
13
- const imp = entity.get(Impulse);
14
- if (imp !== undefined) {
15
- imp.x = 0;
16
- imp.y = 0;
17
- }
18
- const ai = entity.get(AngularImpulse);
19
- if (ai !== undefined) {
20
- ai.value = 0;
21
- }
22
- }
23
- engine.impulseEntitiesThisStep.clear();
24
- });
25
- system.entity.add(PhysicsSystemTag);
26
- }
27
- //# sourceMappingURL=impulse_zero.js.map
@@ -1 +0,0 @@
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,EAAsB,MAAM,sBAAsB,CAAC;AAE5E,MAAM,UAAU,kBAAkB,CAAC,KAAY,EAAE,MAAqB,EAAE,KAAa;IACnF,MAAM,MAAM,GAAG,KAAK;SACjB,MAAM,CAAC,oBAAoB,CAAC;SAC5B,KAAK,CAAC,KAAK,CAAC;SACZ,GAAG,CAAC,GAAG,EAAE;QACR,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,uBAAuB,EAAE,CAAC;YACjD,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,MAAM,CAAC,uBAAuB,CAAC,KAAK,EAAE,CAAC;IACzC,CAAC,CAAC,CAAC;IACL,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AACtC,CAAC"}
@@ -1,15 +0,0 @@
1
- import { type Entity, type World } from "@vworlds/vecs";
2
- import { type PhysicsEngine } from "../adapter/engine.js";
3
- /** The three phases the physics systems split across. */
4
- export interface PhysicsPhases {
5
- preStep: Entity;
6
- step: Entity;
7
- postStep: Entity;
8
- }
9
- /** Options forwarded to {@link registerPhysicsSystems} from {@link PhysicsModule}. */
10
- export interface PhysicsSystemsOptions {
11
- /** Install `PhysicsDebugValidation` when `true`. Default `false`. */
12
- debug?: boolean;
13
- }
14
- /** Register every physics system into `world`, bound to `engine`. */
15
- export declare function registerPhysicsSystems(world: World, engine: PhysicsEngine, phases: PhysicsPhases, opts?: PhysicsSystemsOptions): void;
package/systems/index.js DELETED
@@ -1,80 +0,0 @@
1
- // Physics system installation. Creates all physics systems in their canonical
2
- // run order and tags each one with `PhysicsSystemTag` so the pose-sync feedback
3
- // suppression (`PhysicsPoseSyncIn.ignoreSource([PhysicsSystemTag])`) can filter
4
- // the engine's own write-back. This is registration step 12 (ARCHITECTURE.md →
5
- // _Component registration order_).
6
- //
7
- // Physics-pre phase order (creation order = run order within a phase):
8
- // 1. PhysicsBodyLifecycle — body must exist before any shape is inserted
9
- // 2. PhysicsShapeLifecycle — creates/destroys b2Shape records + broad-phase proxies
10
- // 3. PhysicsChainLifecycle — creates/destroys b2Chain records + segment proxies
11
- // 4. PhysicsMaterialFilterSync — propagates Material/Filter/Sensor updates
12
- // 5. PhysicsEventOptInSync — runtime ContactEvents/HitEvents/SensorEvents add/remove (hooks)
13
- // 6. PhysicsShapePoseSync — propagates ShapePosition/ShapeRotation updates
14
- // 7. PhysicsPoseSyncIn — syncs Position/Rotation/Velocity into body sims
15
- // 8. PhysicsKinematicTargets — sets target-convergence velocity on kinematic bodies (VP-20)
16
- // 9. PhysicsForceGather:* — applies Force and Torque to body sims each step (VP-19)
17
- // 10. PhysicsImpulseAccumulate — drains Impulse/AngularImpulse into pendingImpulses (VP-19)
18
- // 11. PhysicsMassRecompute — recomputes mass for dirty bodies (last pre-step)
19
- // 12. PhysicsDebugValidation — structural validation (ONLY when debug: true, VP-25)
20
- //
21
- // Physics-post phase order:
22
- // 1. PhysicsPoseSyncOut — write simulated pose back to ECS
23
- // 2. PhysicsEvents — fan raw event arrays out to ContactEvents/SensorEvents/HitEvents (VP-21b)
24
- // 3. PhysicsImpulseZero — silently zero consumed Impulse/AngularImpulse (VP-19)
25
- import { installChainLifecycle } from "./chain_lifecycle.js";
26
- import { installDebugValidation } from "./debug.js";
27
- import { installEventOptInSync } from "./event_opt_in_sync.js";
28
- import { installEvents } from "./events.js";
29
- import { installForceGather } from "./forces.js";
30
- import { installImpulseAccumulate } from "./impulse_accumulate.js";
31
- import { installImpulseZero } from "./impulse_zero.js";
32
- import { installKinematicTargets } from "./kinematic.js";
33
- import { installBodyLifecycle, installPhysicsReaper } from "./lifecycle.js";
34
- import { installMassRecompute } from "./mass_recompute.js";
35
- import { installMaterialFilterSync } from "./material_filter_sync.js";
36
- import { installPoseSyncIn } from "./pose_sync_in.js";
37
- import { installPoseSyncOut } from "./pose_sync_out.js";
38
- import { installShapeLifecycle } from "./shape_lifecycle.js";
39
- import { installShapePoseSync } from "./shape_pose_sync.js";
40
- import { installStep } from "./step.js";
41
- /** Register every physics system into `world`, bound to `engine`. */
42
- export function registerPhysicsSystems(world, engine, phases, opts = {}) {
43
- // physics-pre: lifecycle + sync systems in dependency order.
44
- installBodyLifecycle(world, engine, phases.preStep);
45
- installShapeLifecycle(world, engine, phases.preStep);
46
- installChainLifecycle(world, engine, phases.preStep);
47
- installMaterialFilterSync(world, engine, phases.preStep);
48
- // physics-pre: keep event opt-in flags in sync when ContactEvents/HitEvents/
49
- // SensorEvents are added/removed on a shape after creation (hook-based).
50
- installEventOptInSync(world, engine, phases.preStep);
51
- // physics-pre: reaper — perform all deferred b2Destroy* here, AFTER every
52
- // exit/sync consumer above has run on the still-live handles, and BEFORE
53
- // MassRecompute + the step. This is the single point where shape/chain/body
54
- // slots are freed, so nothing recycles a slot mid-pass. See installPhysicsReaper.
55
- installPhysicsReaper(world, engine, phases.preStep);
56
- installShapePoseSync(world, engine, phases.preStep);
57
- installPoseSyncIn(world, engine, phases.preStep);
58
- // physics-pre: kinematic target drive after PoseSyncIn, before ForceGather (VP-20).
59
- installKinematicTargets(world, engine, phases.preStep);
60
- // physics-pre: force/impulse systems after KinematicTargets, before MassRecompute (VP-19).
61
- installForceGather(world, engine, phases.preStep);
62
- installImpulseAccumulate(world, engine, phases.preStep);
63
- // physics-pre: mass recompute — last pre-step, after all lifecycle/sync/force.
64
- installMassRecompute(world, engine, phases.preStep);
65
- // physics-step: integrator.
66
- installStep(world, engine, phases.step);
67
- // physics-post: write simulated pose back to ECS.
68
- installPoseSyncOut(world, engine, phases.postStep);
69
- // physics-post: fan raw event arrays out to ECS event components (VP-21b).
70
- // Must run AFTER PoseSyncOut (so positions are up to date) and BEFORE ImpulseZero.
71
- installEvents(world, engine, phases.postStep);
72
- // physics-post: silently zero consumed Impulse/AngularImpulse (last in post).
73
- installImpulseZero(world, engine, phases.postStep);
74
- // physics-pre: debug validation — LAST in physics-pre, ONLY when debug: true.
75
- // Runs after all lifecycle/sync/mass so the world is fully wired for the step.
76
- if (opts.debug === true) {
77
- installDebugValidation(world, engine, phases.preStep);
78
- }
79
- }
80
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/systems/index.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { type Entity, type World } from "@vworlds/vecs";
2
- import { type PhysicsEngine } from "../adapter/engine.js";
3
- export declare function installKinematicTargets(world: World, engine: PhysicsEngine, phase: Entity): void;
@@ -1 +0,0 @@
1
- {"version":3,"file":"kinematic.js","sourceRoot":"","sources":["../../../../src/systems/kinematic.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import { type Entity, type World } from "@vworlds/vecs";
2
- import { type PhysicsEngine } from "../adapter/engine.js";
3
- export declare function installBodyLifecycle(world: World, engine: PhysicsEngine, phase: Entity): void;
4
- export declare function installPhysicsReaper(world: World, engine: PhysicsEngine, phase: Entity): void;
@@ -1,177 +0,0 @@
1
- import { AngularVelocity, Body, BodyType, LinearVelocity, Position, Rotation, } from "../components/body.js";
2
- import { Damping, GravityScale, MotionLocks, Sleep } from "../components/body_tuning.js";
3
- import { PhysicsSystemTag } from "../adapter/engine.js";
4
- import { withAllocated } from "../adapter/disposal.js";
5
- export function installBodyLifecycle(world, engine, phase) {
6
- const system = world.system("PhysicsBodyLifecycle").with(Body).phase(phase);
7
- system.entity.add(PhysicsSystemTag);
8
- system.enter([Body], (entity, [body]) => {
9
- const bodyId = createWasmBodyId(engine, entity, body);
10
- body._bodyId = bodyId;
11
- engine.entityByBodyIndex.set(bodyId.index1, entity.eid);
12
- });
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;
18
- if (bodyId === undefined) {
19
- return;
20
- }
21
- // Defer the actual b2DestroyBody (and the reverse-map clear) until after
22
- // shape + chain teardown -- see PhysicsBodyDestroyDeferred below and the
23
- // pendingBodyDestroys note in PhysicsEngine. Destroying the body here would
24
- // cascade-free its shapes' Box2D slots mid-pass, so a child shape created in
25
- // the same flush could recycle a freed index1 before the dead shape's
26
- // reverse-map entry is cleared, and the dead shape's exit would then wipe the
27
- // live child's entry (dropping its sensor/contact events).
28
- engine.pendingBodyDestroys.push(bodyId);
29
- });
30
- system.update(Body, (entity, body) => {
31
- const bodyId = body._bodyId;
32
- if (bodyId === undefined) {
33
- return;
34
- }
35
- engine.box2d.b2Body_SetType(bodyId, bodyTypeToBox2D(engine.box2d, body.type));
36
- if (body.enabled) {
37
- engine.box2d.b2Body_Enable(bodyId);
38
- }
39
- else {
40
- engine.box2d.b2Body_Disable(bodyId);
41
- }
42
- engine.box2d.b2Body_SetBullet(bodyId, body.bullet);
43
- });
44
- const dampingSystem = world
45
- .system("PhysicsBodyLifecycle:Damping")
46
- .with(Body, Damping)
47
- .phase(phase)
48
- .update({ watch: Damping, onEnter: true, inject: [Body] }, (entity, damping, [body]) => {
49
- const bodyId = body?._bodyId;
50
- if (bodyId === undefined) {
51
- return;
52
- }
53
- engine.box2d.b2Body_SetLinearDamping(bodyId, damping.linear);
54
- engine.box2d.b2Body_SetAngularDamping(bodyId, damping.angular);
55
- });
56
- dampingSystem.entity.add(PhysicsSystemTag);
57
- const gravityScaleSystem = world
58
- .system("PhysicsBodyLifecycle:GravityScale")
59
- .with(Body, GravityScale)
60
- .phase(phase)
61
- .update({ watch: GravityScale, onEnter: true, inject: [Body] }, (entity, gravityScale, [body]) => {
62
- const bodyId = body?._bodyId;
63
- if (bodyId === undefined) {
64
- return;
65
- }
66
- engine.box2d.b2Body_SetGravityScale(bodyId, gravityScale.value);
67
- });
68
- gravityScaleSystem.entity.add(PhysicsSystemTag);
69
- const motionLocksSystem = world
70
- .system("PhysicsBodyLifecycle:MotionLocks")
71
- .with(Body, MotionLocks)
72
- .phase(phase)
73
- .update({ watch: MotionLocks, onEnter: true, inject: [Body] }, (entity, locks, [body]) => {
74
- const bodyId = body?._bodyId;
75
- if (bodyId === undefined) {
76
- return;
77
- }
78
- withAllocated(() => new engine.box2d.b2MotionLocks(), (motionLocks) => {
79
- motionLocks.linearX = locks.x;
80
- motionLocks.linearY = locks.y;
81
- motionLocks.angularZ = locks.rotation;
82
- engine.box2d.b2Body_SetMotionLocks(bodyId, motionLocks);
83
- });
84
- });
85
- motionLocksSystem.entity.add(PhysicsSystemTag);
86
- const sleepSystem = world
87
- .system("PhysicsBodyLifecycle:Sleep")
88
- .with(Body, Sleep)
89
- .phase(phase)
90
- .update({ watch: Sleep, onEnter: true, inject: [Body] }, (entity, sleep, [body]) => {
91
- const bodyId = body?._bodyId;
92
- if (bodyId === undefined) {
93
- return;
94
- }
95
- engine.box2d.b2Body_EnableSleep(bodyId, sleep.enabled);
96
- engine.box2d.b2Body_SetAwake(bodyId, sleep.awake);
97
- engine.box2d.b2Body_SetSleepThreshold(bodyId, sleep.threshold);
98
- });
99
- sleepSystem.entity.add(PhysicsSystemTag);
100
- }
101
- // Single point of Box2D teardown. Every lifecycle exit enqueues its handle
102
- // (pendingShapeDestroys / pendingChainDestroys / pendingBodyDestroys) and does
103
- // only vecs-side bookkeeping; this reaper performs all the b2Destroy* calls at
104
- // once. Must be registered AFTER every system that touches a being-destroyed
105
- // shape/body on a still-live handle (shape/chain lifecycle, material+filter sync,
106
- // event opt-in sync) and BEFORE PhysicsMassRecompute and the step. Order within:
107
- // shapes and chains first, then bodies -- children before parents, so a body's
108
- // cascade never double-frees an already-reaped shape. Because nothing is
109
- // destroyed until here, no slot is freed-then-recycled mid-pass, which is why the
110
- // lifecycle exits and event opt-in carry no stale-id/cascade guards.
111
- export function installPhysicsReaper(world, engine, phase) {
112
- const system = world
113
- .system("PhysicsReaper")
114
- .phase(phase)
115
- .run(() => {
116
- const shapes = engine.pendingShapeDestroys;
117
- for (const shapeId of shapes) {
118
- engine.entityByShapeIndex.delete(shapeId.index1);
119
- engine.box2d.b2DestroyShape(shapeId, true);
120
- }
121
- shapes.length = 0;
122
- const chains = engine.pendingChainDestroys;
123
- for (const chainId of chains) {
124
- engine.box2d.b2DestroyChain(chainId);
125
- }
126
- chains.length = 0;
127
- const bodies = engine.pendingBodyDestroys;
128
- for (const bodyId of bodies) {
129
- engine.entityByBodyIndex.delete(bodyId.index1);
130
- engine.box2d.b2DestroyBody(bodyId);
131
- }
132
- bodies.length = 0;
133
- });
134
- system.entity.add(PhysicsSystemTag);
135
- }
136
- function createWasmBodyId(engine, entity, body) {
137
- const box2d = engine.box2d;
138
- return withAllocated(box2d.b2DefaultBodyDef, (def) => {
139
- const position = entity.get(Position);
140
- const rotation = entity.get(Rotation);
141
- const linearVelocity = entity.get(LinearVelocity);
142
- const angularVelocity = entity.get(AngularVelocity);
143
- const damping = entity.get(Damping);
144
- const gravityScale = entity.get(GravityScale);
145
- const motionLocks = entity.get(MotionLocks);
146
- const sleep = entity.get(Sleep);
147
- def.type = bodyTypeToBox2D(box2d, body.type);
148
- def.position.Set(position?.x ?? 0, position?.y ?? 0);
149
- def.rotation.SetAngle(rotation?.angle ?? 0);
150
- def.linearVelocity.Set(linearVelocity?.x ?? 0, linearVelocity?.y ?? 0);
151
- def.angularVelocity = angularVelocity?.value ?? 0;
152
- def.linearDamping = damping?.linear ?? 0;
153
- def.angularDamping = damping?.angular ?? 0;
154
- def.gravityScale = gravityScale?.value ?? 1;
155
- def.motionLocks.linearX = motionLocks?.x ?? false;
156
- def.motionLocks.linearY = motionLocks?.y ?? false;
157
- def.motionLocks.angularZ = motionLocks?.rotation ?? false;
158
- def.enableSleep = sleep?.enabled ?? true;
159
- def.isAwake = sleep?.awake ?? true;
160
- def.sleepThreshold = sleep?.threshold ?? 0.05;
161
- def.isEnabled = body.enabled;
162
- def.isBullet = body.bullet;
163
- def.allowFastRotation = body.allowFastRotation;
164
- return box2d.b2CreateBody(engine.worldId, def);
165
- });
166
- }
167
- function bodyTypeToBox2D(box2d, type) {
168
- switch (type) {
169
- case BodyType.Static:
170
- return box2d.b2BodyType.b2_staticBody;
171
- case BodyType.Kinematic:
172
- return box2d.b2BodyType.b2_kinematicBody;
173
- case BodyType.Dynamic:
174
- return box2d.b2BodyType.b2_dynamicBody;
175
- }
176
- }
177
- //# sourceMappingURL=lifecycle.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../../../src/systems/lifecycle.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { type Entity, type World } from "@vworlds/vecs";
2
- import { type PhysicsEngine } from "../adapter/engine.js";
3
- export declare function installMassRecompute(world: World, engine: PhysicsEngine, phase: Entity): void;
@@ -1,38 +0,0 @@
1
- import { Body, BodyType } from "../components/body.js";
2
- import { PhysicsSystemTag } from "../adapter/engine.js";
3
- const CODE_DYNAMIC_BODY_WITHOUT_DENSITY = "dynamic-body-without-density";
4
- export function installMassRecompute(world, engine, phase) {
5
- const system = world
6
- .system("PhysicsMassRecompute")
7
- .phase(phase)
8
- .run(() => {
9
- for (const eid of engine.dirtyMassBodies) {
10
- const bodyId = world.getEntity(eid)?.get(Body)?._bodyId;
11
- if (bodyId !== undefined) {
12
- engine.box2d.b2Body_ApplyMassFromShapes(bodyId);
13
- }
14
- }
15
- engine.dirtyMassBodies.clear();
16
- if (engine.debug) {
17
- warnOnMasslessDynamicBodies(world, engine);
18
- }
19
- });
20
- system.entity.add(PhysicsSystemTag);
21
- }
22
- function warnOnMasslessDynamicBodies(world, engine) {
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) {
27
- engine.warn.rearm(eid, CODE_DYNAMIC_BODY_WITHOUT_DENSITY);
28
- return;
29
- }
30
- if (engine.box2d.b2Body_GetMass(bodyId) === 0) {
31
- engine.warn.warnOnce(eid, CODE_DYNAMIC_BODY_WITHOUT_DENSITY, `Entity${eid} is a dynamic body with zero mass after recompute; it will not fall.`);
32
- }
33
- else {
34
- engine.warn.rearm(eid, CODE_DYNAMIC_BODY_WITHOUT_DENSITY);
35
- }
36
- });
37
- }
38
- //# sourceMappingURL=mass_recompute.js.map
@@ -1 +0,0 @@
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,EAAsB,MAAM,sBAAsB,CAAC;AAE5E,MAAM,iCAAiC,GAAG,8BAA8B,CAAC;AAEzE,MAAM,UAAU,oBAAoB,CAAC,KAAY,EAAE,MAAqB,EAAE,KAAa;IACrF,MAAM,MAAM,GAAG,KAAK;SACjB,MAAM,CAAC,sBAAsB,CAAC;SAC9B,KAAK,CAAC,KAAK,CAAC;SACZ,GAAG,CAAC,GAAG,EAAE;QACR,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;YACzC,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,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,MAAM,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QACD,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAE/B,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,2BAA2B,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC,CAAC,CAAC;IACL,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,2BAA2B,CAAC,KAAY,EAAE,MAAqB;IACtE,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,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,iCAAiC,CAAC,CAAC;YAC1D,OAAO;QACT,CAAC;QAED,IAAI,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9C,MAAM,CAAC,IAAI,CAAC,QAAQ,CAClB,GAAG,EACH,iCAAiC,EACjC,SAAS,GAAG,sEAAsE,CACnF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,iCAAiC,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1,3 +0,0 @@
1
- import { type Entity, type World } from "@vworlds/vecs";
2
- import { type PhysicsEngine } from "../adapter/engine.js";
3
- export declare function installMaterialFilterSync(world: World, engine: PhysicsEngine, phase: Entity): void;