@vworlds/vecs-physics 1.0.25 → 1.0.27

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 (84) hide show
  1. package/adapter/{state.d.ts → engine.d.ts} +13 -10
  2. package/adapter/{state.js → engine.js} +23 -30
  3. package/adapter/engine.js.map +1 -0
  4. package/adapter/queries.d.ts +68 -0
  5. package/adapter/queries.js +145 -0
  6. package/adapter/queries.js.map +1 -0
  7. package/adapter/runtime.d.ts +4 -0
  8. package/adapter/runtime.js +20 -0
  9. package/adapter/runtime.js.map +1 -1
  10. package/components/body.js +5 -2
  11. package/components/body.js.map +1 -1
  12. package/components/geometry.d.ts +21 -6
  13. package/components/geometry.js +47 -9
  14. package/components/geometry.js.map +1 -1
  15. package/components/material.d.ts +5 -0
  16. package/components/material.js +5 -0
  17. package/components/material.js.map +1 -1
  18. package/index.d.ts +4 -2
  19. package/index.js +5 -3
  20. package/index.js.map +1 -1
  21. package/module.js +32 -19
  22. package/module.js.map +1 -1
  23. package/package.json +2 -2
  24. package/systems/chain_lifecycle.d.ts +6 -0
  25. package/systems/chain_lifecycle.js +102 -0
  26. package/systems/chain_lifecycle.js.map +1 -0
  27. package/systems/debug.d.ts +4 -5
  28. package/systems/debug.js +26 -24
  29. package/systems/debug.js.map +1 -1
  30. package/systems/event_opt_in_sync.d.ts +3 -3
  31. package/systems/event_opt_in_sync.js +53 -25
  32. package/systems/event_opt_in_sync.js.map +1 -1
  33. package/systems/events.d.ts +3 -3
  34. package/systems/events.js +36 -34
  35. package/systems/events.js.map +1 -1
  36. package/systems/forces.d.ts +3 -3
  37. package/systems/forces.js +30 -21
  38. package/systems/forces.js.map +1 -1
  39. package/systems/impulse_accumulate.d.ts +4 -4
  40. package/systems/impulse_accumulate.js +32 -28
  41. package/systems/impulse_accumulate.js.map +1 -1
  42. package/systems/impulse_zero.d.ts +3 -3
  43. package/systems/impulse_zero.js +6 -4
  44. package/systems/impulse_zero.js.map +1 -1
  45. package/systems/index.d.ts +3 -4
  46. package/systems/index.js +42 -48
  47. package/systems/index.js.map +1 -1
  48. package/systems/kinematic.d.ts +3 -3
  49. package/systems/kinematic.js +33 -33
  50. package/systems/kinematic.js.map +1 -1
  51. package/systems/lifecycle.d.ts +3 -3
  52. package/systems/lifecycle.js +58 -36
  53. package/systems/lifecycle.js.map +1 -1
  54. package/systems/mass_recompute.d.ts +3 -3
  55. package/systems/mass_recompute.js +21 -19
  56. package/systems/mass_recompute.js.map +1 -1
  57. package/systems/material_filter_sync.d.ts +3 -3
  58. package/systems/material_filter_sync.js +64 -29
  59. package/systems/material_filter_sync.js.map +1 -1
  60. package/systems/pose_sync_in.d.ts +3 -3
  61. package/systems/pose_sync_in.js +47 -20
  62. package/systems/pose_sync_in.js.map +1 -1
  63. package/systems/pose_sync_out.d.ts +3 -3
  64. package/systems/pose_sync_out.js +8 -6
  65. package/systems/pose_sync_out.js.map +1 -1
  66. package/systems/shape_lifecycle.d.ts +31 -4
  67. package/systems/shape_lifecycle.js +93 -145
  68. package/systems/shape_lifecycle.js.map +1 -1
  69. package/systems/shape_pose_sync.d.ts +3 -3
  70. package/systems/shape_pose_sync.js +35 -10
  71. package/systems/shape_pose_sync.js.map +1 -1
  72. package/systems/shape_predicates.d.ts +12 -0
  73. package/systems/shape_predicates.js +5 -0
  74. package/systems/shape_predicates.js.map +1 -0
  75. package/systems/step.d.ts +3 -3
  76. package/systems/step.js +7 -5
  77. package/systems/step.js.map +1 -1
  78. package/util/resolve_body.d.ts +2 -2
  79. package/util/resolve_body.js +5 -9
  80. package/util/resolve_body.js.map +1 -1
  81. package/util/warn.d.ts +1 -1
  82. package/util/warn.js +2 -1
  83. package/util/warn.js.map +1 -1
  84. package/adapter/state.js.map +0 -1
@@ -1,40 +1,68 @@
1
+ import { ChildOf, Iter } from "@vworlds/vecs";
2
+ import { Body } from "../components/body.js";
3
+ import { Chain, SingleShape } from "../components/geometry.js";
1
4
  import { ContactEvents, HitEvents, SensorEvents } from "../components/events.js";
2
- export function installEventOptInSync(world, state, phase) {
5
+ import { Detectable } from "../components/material.js";
6
+ import { PhysicsSystemTag } from "../adapter/engine.js";
7
+ import { recreateChainForEntity } from "./chain_lifecycle.js";
8
+ import { chainWithBodyParent } from "./shape_predicates.js";
9
+ export function installEventOptInSync(world, engine, phase) {
10
+ world.component(ContactEvents).onAdd((entity) => setEventFlag(engine, entity, "contact", true));
3
11
  world
4
12
  .component(ContactEvents)
5
- .onAdd((entity) => setEventFlag(state, entity.eid, "contact", true));
6
- world
7
- .component(ContactEvents)
8
- .onRemove((entity) => setEventFlag(state, entity.eid, "contact", false));
9
- world.component(HitEvents).onAdd((entity) => setEventFlag(state, entity.eid, "hit", true));
10
- world.component(HitEvents).onRemove((entity) => setEventFlag(state, entity.eid, "hit", false));
11
- world.component(SensorEvents).onAdd((entity) => setEventFlag(state, entity.eid, "sensor", true));
12
- world
13
- .component(SensorEvents)
14
- .onRemove((entity) => setEventFlag(state, entity.eid, "sensor", false));
15
- return world
16
- .system("PhysicsEventOptInSync")
13
+ .onRemove((entity) => setEventFlag(engine, entity, "contact", false));
14
+ world.component(HitEvents).onAdd((entity) => setEventFlag(engine, entity, "hit", true));
15
+ world.component(HitEvents).onRemove((entity) => setEventFlag(engine, entity, "hit", false));
16
+ // Sensor detection: enable if SensorEvents OR Detectable is present.
17
+ // Query only single b2Shape geometries; chains have no runtime sensor-event
18
+ // setter and are recreated by the chain opt-in system below.
19
+ const sensorSystem = world
20
+ .system("PhysicsEventOptInSync:Sensor")
21
+ .with({ all: [SingleShape, { any: [SensorEvents, Detectable] }] })
17
22
  .phase(phase)
18
- .run(() => {
19
- // Hook-driven: onAdd/onRemove do the work synchronously during command drain.
23
+ .enter([SingleShape], (_e, [shape]) => {
24
+ const shapeId = shape._shapeId;
25
+ if (shapeId !== undefined) {
26
+ engine.box2d.b2Shape_EnableSensorEvents(shapeId, true);
27
+ }
28
+ })
29
+ .exit([SingleShape], (_e, [shape]) => {
30
+ const shapeId = shape._shapeId;
31
+ if (shapeId !== undefined) {
32
+ engine.box2d.b2Shape_EnableSensorEvents(shapeId, false);
33
+ }
20
34
  });
35
+ sensorSystem.entity.add(PhysicsSystemTag);
36
+ const chainSensorSystem = world
37
+ .system("PhysicsEventOptInSync:ChainSensor")
38
+ .with({ all: [Chain, { any: [SensorEvents, Detectable] }] }, chainWithBodyParent)
39
+ .phase(phase)
40
+ .enter(Iter, [Chain, { target: [ChildOf, [Body]] }], (it, [chain, body]) => {
41
+ recreateChainForEntity(engine, it.entity, it.src[1], body, chain);
42
+ })
43
+ .exit((entity) => {
44
+ const chain = entity.get(Chain);
45
+ const parent = entity.parent;
46
+ recreateChainForEntity(engine, entity, parent, parent?.get(Body), chain);
47
+ });
48
+ chainSensorSystem.entity.add(PhysicsSystemTag);
21
49
  }
22
- function setEventFlag(state, entityId, flag, enabled) {
23
- const shapeId = state.shapeByEntityWasm.get(entityId);
24
- if (shapeId !== undefined) {
25
- applyEventFlag(state, shapeId, flag, enabled);
50
+ function setEventFlag(engine, entity, flag, enabled) {
51
+ const shape = entity.get(SingleShape);
52
+ if (shape !== undefined) {
53
+ const shapeId = shape._shapeId;
54
+ if (shapeId !== undefined) {
55
+ applyEventFlag(engine, shapeId, flag, enabled);
56
+ }
26
57
  }
27
58
  }
28
- function applyEventFlag(state, shapeId, flag, enabled) {
59
+ function applyEventFlag(engine, shapeId, flag, enabled) {
29
60
  switch (flag) {
30
61
  case "contact":
31
- state.box2d.b2Shape_EnableContactEvents(shapeId, enabled);
62
+ engine.box2d.b2Shape_EnableContactEvents(shapeId, enabled);
32
63
  break;
33
64
  case "hit":
34
- state.box2d.b2Shape_EnableHitEvents(shapeId, enabled);
35
- break;
36
- case "sensor":
37
- state.box2d.b2Shape_EnableSensorEvents(shapeId, enabled);
65
+ engine.box2d.b2Shape_EnableHitEvents(shapeId, enabled);
38
66
  break;
39
67
  }
40
68
  }
@@ -1 +1 @@
1
- {"version":3,"file":"event_opt_in_sync.js","sourceRoot":"","sources":["../../../../src/systems/event_opt_in_sync.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAKjF,MAAM,UAAU,qBAAqB,CAAC,KAAY,EAAE,KAAmB,EAAE,KAAa;IACpF,KAAK;SACF,SAAS,CAAC,aAAa,CAAC;SACxB,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;IACvE,KAAK;SACF,SAAS,CAAC,aAAa,CAAC;SACxB,QAAQ,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;IAE3E,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;IAC3F,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAE/F,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;IACjG,KAAK;SACF,SAAS,CAAC,YAAY,CAAC;SACvB,QAAQ,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;IAE1E,OAAO,KAAK;SACT,MAAM,CAAC,uBAAuB,CAAC;SAC/B,KAAK,CAAC,KAAK,CAAC;SACZ,GAAG,CAAC,GAAG,EAAE;QACR,8EAA8E;IAChF,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,YAAY,CAAC,KAAmB,EAAE,QAAa,EAAE,IAAe,EAAE,OAAgB;IACzF,MAAM,OAAO,GAAG,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CACrB,KAAmB,EACnB,OAAkB,EAClB,IAAe,EACf,OAAgB;IAEhB,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,SAAS;YACZ,KAAK,CAAC,KAAK,CAAC,2BAA2B,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC1D,MAAM;QACR,KAAK,KAAK;YACR,KAAK,CAAC,KAAK,CAAC,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACtD,MAAM;QACR,KAAK,QAAQ;YACX,KAAK,CAAC,KAAK,CAAC,0BAA0B,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACzD,MAAM;IACV,CAAC;AACH,CAAC"}
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 +1,3 @@
1
- import { type Entity, type System, type World } from "@vworlds/vecs";
2
- import { type PhysicsState } from "../adapter/state.js";
3
- export declare function installEvents(world: World, state: PhysicsState, phase: Entity): System;
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;
package/systems/events.js CHANGED
@@ -1,46 +1,48 @@
1
1
  import { ContactEvents, HitEvents, SensorEvents } from "../components/events.js";
2
- export function installEvents(world, state, phase) {
3
- return world
2
+ import { PhysicsSystemTag } from "../adapter/engine.js";
3
+ export function installEvents(world, engine, phase) {
4
+ const system = world
4
5
  .system("PhysicsEvents")
5
6
  .phase(phase)
6
7
  .run(() => {
7
8
  const touchedContact = new Set();
8
9
  const touchedSensor = new Set();
9
10
  const touchedHit = new Set();
10
- publishContactAndHitEvents(world, state, touchedContact, touchedHit);
11
- publishSensorEvents(world, state, touchedSensor);
11
+ publishContactAndHitEvents(world, engine, touchedContact, touchedHit);
12
+ publishSensorEvents(world, engine, touchedSensor);
12
13
  markModified(world, touchedContact, ContactEvents);
13
14
  markModified(world, touchedSensor, SensorEvents);
14
15
  markModified(world, touchedHit, HitEvents);
15
- clearUntouchedContactEvents(world, state.prevTouchedContact, touchedContact);
16
- clearUntouchedSensorEvents(world, state.prevTouchedSensor, touchedSensor);
17
- clearUntouchedHitEvents(world, state.prevTouchedHit, touchedHit);
18
- // Store touched sets on state for the next step's clear pass.
19
- state.prevTouchedContact.clear();
16
+ clearUntouchedContactEvents(world, engine.prevTouchedContact, touchedContact);
17
+ clearUntouchedSensorEvents(world, engine.prevTouchedSensor, touchedSensor);
18
+ clearUntouchedHitEvents(world, engine.prevTouchedHit, touchedHit);
19
+ // Store touched sets on engine for the next step's clear pass.
20
+ engine.prevTouchedContact.clear();
20
21
  for (const eid of touchedContact) {
21
- state.prevTouchedContact.add(eid);
22
+ engine.prevTouchedContact.add(eid);
22
23
  }
23
- state.prevTouchedSensor.clear();
24
+ engine.prevTouchedSensor.clear();
24
25
  for (const eid of touchedSensor) {
25
- state.prevTouchedSensor.add(eid);
26
+ engine.prevTouchedSensor.add(eid);
26
27
  }
27
- state.prevTouchedHit.clear();
28
+ engine.prevTouchedHit.clear();
28
29
  for (const eid of touchedHit) {
29
- state.prevTouchedHit.add(eid);
30
+ engine.prevTouchedHit.add(eid);
30
31
  }
31
32
  });
33
+ system.entity.add(PhysicsSystemTag);
32
34
  }
33
35
  // Contact begin/end and hit events all come from a single
34
36
  // `b2World_GetContactEvents` poll, so fetch the event block once per step and
35
- // fan begin/end into `touchedContact` and hits into `touchedHit` (PLAN.md ->
37
+ // fan begin/end into `touchedContact` and hits into `touchedHit` (ARCHITECTURE.md ->
36
38
  // PhysicsEvents: "poll once per step").
37
- function publishContactAndHitEvents(world, state, touchedContact, touchedHit) {
38
- const events = state.box2d.b2World_GetContactEvents(state.worldId);
39
+ function publishContactAndHitEvents(world, engine, touchedContact, touchedHit) {
40
+ const events = engine.box2d.b2World_GetContactEvents(engine.worldId);
39
41
  try {
40
42
  for (let i = 0; i < events.beginCount; i++) {
41
43
  const event = events.GetBeginEvent(i);
42
44
  try {
43
- emitContactEvent(world, state, touchedContact, event, "begin");
45
+ emitContactEvent(world, engine, touchedContact, event, "begin");
44
46
  }
45
47
  finally {
46
48
  deleteIfPresent(event);
@@ -48,12 +50,12 @@ function publishContactAndHitEvents(world, state, touchedContact, touchedHit) {
48
50
  }
49
51
  for (let i = 0; i < events.endCount; i++) {
50
52
  const event = events.GetEndEvent(i);
51
- emitContactEvent(world, state, touchedContact, event, "end");
53
+ emitContactEvent(world, engine, touchedContact, event, "end");
52
54
  }
53
55
  for (let i = 0; i < events.hitCount; i++) {
54
56
  const event = events.GetHitEvent(i);
55
57
  try {
56
- emitHitEvent(world, state, touchedHit, event);
58
+ emitHitEvent(world, engine, touchedHit, event);
57
59
  }
58
60
  finally {
59
61
  event.delete();
@@ -64,32 +66,32 @@ function publishContactAndHitEvents(world, state, touchedContact, touchedHit) {
64
66
  events.delete();
65
67
  }
66
68
  }
67
- function publishSensorEvents(world, state, touched) {
68
- const events = state.box2d.b2World_GetSensorEvents(state.worldId);
69
+ function publishSensorEvents(world, engine, touched) {
70
+ const events = engine.box2d.b2World_GetSensorEvents(engine.worldId);
69
71
  try {
70
72
  for (let i = 0; i < events.beginCount; i++) {
71
- emitSensorEvent(world, state, touched, events.GetBeginEvent(i), "begin");
73
+ emitSensorEvent(world, engine, touched, events.GetBeginEvent(i), "begin");
72
74
  }
73
75
  for (let i = 0; i < events.endCount; i++) {
74
- emitSensorEvent(world, state, touched, events.GetEndEvent(i), "end");
76
+ emitSensorEvent(world, engine, touched, events.GetEndEvent(i), "end");
75
77
  }
76
78
  }
77
79
  finally {
78
80
  events.delete();
79
81
  }
80
82
  }
81
- function emitContactEvent(world, state, touched, event, kind) {
82
- const entityA = getLiveEntity(world, state.entityByShapeIndex.get(event.shapeIdA.index1));
83
- const entityB = getLiveEntity(world, state.entityByShapeIndex.get(event.shapeIdB.index1));
83
+ function emitContactEvent(world, engine, touched, event, kind) {
84
+ const entityA = getLiveEntity(world, engine.entityByShapeIndex.get(event.shapeIdA.index1));
85
+ const entityB = getLiveEntity(world, engine.entityByShapeIndex.get(event.shapeIdB.index1));
84
86
  if (entityA === undefined || entityB === undefined) {
85
87
  return;
86
88
  }
87
89
  emitContactToEntity(touched, entityA, entityB, kind);
88
90
  emitContactToEntity(touched, entityB, entityA, kind);
89
91
  }
90
- function emitSensorEvent(world, state, touched, event, kind) {
91
- const sensor = getLiveEntity(world, state.entityByShapeIndex.get(event.sensorShapeId.index1));
92
- const visitor = getLiveEntity(world, state.entityByShapeIndex.get(event.visitorShapeId.index1));
92
+ function emitSensorEvent(world, engine, touched, event, kind) {
93
+ const sensor = getLiveEntity(world, engine.entityByShapeIndex.get(event.sensorShapeId.index1));
94
+ const visitor = getLiveEntity(world, engine.entityByShapeIndex.get(event.visitorShapeId.index1));
93
95
  if (sensor === undefined || visitor === undefined) {
94
96
  return;
95
97
  }
@@ -109,9 +111,9 @@ function emitSensorEvent(world, state, touched, event, kind) {
109
111
  events.end.push({ other: visitor });
110
112
  }
111
113
  }
112
- function emitHitEvent(world, state, touched, event) {
113
- const entityA = getLiveEntity(world, state.entityByShapeIndex.get(event.shapeIdA.index1));
114
- const entityB = getLiveEntity(world, state.entityByShapeIndex.get(event.shapeIdB.index1));
114
+ function emitHitEvent(world, engine, touched, event) {
115
+ const entityA = getLiveEntity(world, engine.entityByShapeIndex.get(event.shapeIdA.index1));
116
+ const entityB = getLiveEntity(world, engine.entityByShapeIndex.get(event.shapeIdB.index1));
115
117
  if (entityA === undefined || entityB === undefined) {
116
118
  return;
117
119
  }
@@ -207,6 +209,6 @@ function deleteIfPresent(value) {
207
209
  value.delete?.();
208
210
  }
209
211
  function isDestroyed(entity) {
210
- return entity._destroyed === true;
212
+ return entity.destroyed;
211
213
  }
212
214
  //# sourceMappingURL=events.js.map
@@ -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;AAejF,MAAM,UAAU,aAAa,CAAC,KAAY,EAAE,KAAmB,EAAE,KAAa;IAC5E,OAAO,KAAK;SACT,MAAM,CAAC,eAAe,CAAC;SACvB,KAAK,CAAC,KAAK,CAAC;SACZ,GAAG,CAAC,GAAG,EAAE;QACR,MAAM,cAAc,GAAG,IAAI,GAAG,EAAO,CAAC;QACtC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAO,CAAC;QACrC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAO,CAAC;QAElC,0BAA0B,CAAC,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;QACrE,mBAAmB,CAAC,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;QAEjD,YAAY,CAAC,KAAK,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;QACnD,YAAY,CAAC,KAAK,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC;QACjD,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;QAE3C,2BAA2B,CAAC,KAAK,EAAE,KAAK,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAC;QAC7E,0BAA0B,CAAC,KAAK,EAAE,KAAK,CAAC,iBAAiB,EAAE,aAAa,CAAC,CAAC;QAC1E,uBAAuB,CAAC,KAAK,EAAE,KAAK,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;QAEjE,8DAA8D;QAC9D,KAAK,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;QACjC,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;YACjC,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,CAAC;QACD,KAAK,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAChC,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;YAChC,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC;QACD,KAAK,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC7B,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC7B,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC;AAED,0DAA0D;AAC1D,8EAA8E;AAC9E,6EAA6E;AAC7E,wCAAwC;AACxC,SAAS,0BAA0B,CACjC,KAAY,EACZ,KAAmB,EACnB,cAAwB,EACxB,UAAoB;IAEpB,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACnE,IAAI,CAAC;QACH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YACtC,IAAI,CAAC;gBACH,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;YACjE,CAAC;oBAAS,CAAC;gBACT,eAAe,CAAC,KAAK,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YACpC,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAC/D,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YACpC,IAAI,CAAC;gBACH,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;YAChD,CAAC;oBAAS,CAAC;gBACT,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,CAAC;QACH,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,MAAM,EAAE,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAY,EAAE,KAAmB,EAAE,OAAiB;IAC/E,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,uBAAuB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAClE,IAAI,CAAC;QACH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC3E,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,MAAM,EAAE,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CACvB,KAAY,EACZ,KAAmB,EACnB,OAAiB,EACjB,KAA0C,EAC1C,IAAqB;IAErB,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1F,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1F,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACnD,OAAO;IACT,CAAC;IAED,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACrD,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,eAAe,CACtB,KAAY,EACZ,KAAmB,EACnB,OAAiB,EACjB,KAAkB,EAClB,IAAqB;IAErB,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9F,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IAChG,IAAI,MAAM,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAClD,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,YAAY,CAA6B,CAAC;IACpE,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO;IACT,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACxB,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IACxC,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IACtC,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CACnB,KAAY,EACZ,KAAmB,EACnB,OAAiB,EACjB,KAAsB;IAEtB,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1F,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1F,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACnD,OAAO;IACT,CAAC;IAED,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAClD,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,mBAAmB,CAC1B,OAAiB,EACjB,MAAc,EACd,KAAa,EACb,IAAqB;IAErB,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,aAAa,CAA8B,CAAC;IACtE,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO;IACT,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACxB,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/B,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CACtB,OAAiB,EACjB,MAAc,EACd,KAAa,EACb,KAAsB;IAEtB,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAA0B,CAAC;IAC9D,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO;IACT,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;QACf,KAAK;QACL,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAChB,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACvB,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACvB,KAAK,EAAE,KAAK,CAAC,aAAa;KAC3B,CAAC,CAAC;AACL,CAAC;AAED,SAAS,aAAa,CAAC,KAAY,EAAE,QAAyB;IAC5D,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACzC,IAAI,MAAM,KAAK,SAAS,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;QAChD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CACnB,KAAY,EACZ,OAAiB,EACjB,SAAsB;IAEtB,KAAK,MAAM,QAAQ,IAAI,OAAO,EAAE,CAAC;QAC/B,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED,SAAS,2BAA2B,CAClC,KAAY,EACZ,iBAA2B,EAC3B,OAAiB;IAEjB,KAAK,MAAM,QAAQ,IAAI,iBAAiB,EAAE,CAAC;QACzC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,aAAa,CAA8B,CAAC;QAC1F,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YACxB,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,0BAA0B,CACjC,KAAY,EACZ,iBAA2B,EAC3B,OAAiB;IAEjB,KAAK,MAAM,QAAQ,IAAI,iBAAiB,EAAE,CAAC;QACzC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,YAAY,CAA6B,CAAC;QACxF,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YACxB,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAC9B,KAAY,EACZ,iBAA2B,EAC3B,OAAiB;IAEjB,KAAK,MAAM,QAAQ,IAAI,iBAAiB,EAAE,CAAC;QACzC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,SAAS,CAA0B,CAAC;QAClF,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,KAA8B;IACrD,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;AACnB,CAAC;AAED,SAAS,WAAW,CAAC,MAAc;IACjC,OAAQ,MAA8C,CAAC,UAAU,KAAK,IAAI,CAAC;AAC7E,CAAC"}
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../../../src/systems/events.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- import { type Entity, type System, type World } from "@vworlds/vecs";
2
- import { type PhysicsState } from "../adapter/state.js";
3
- export declare function installForceGather(world: World, state: PhysicsState, phase: Entity): System;
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 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 { resolveBodyId } from "../util/resolve_body.js";
3
- export function installForceGather(world, state, phase) {
4
- const forceFilter = world.filter({ any: [Force, Torque] });
5
- return world
6
- .system("PhysicsForceGather")
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)
7
25
  .phase(phase)
8
- .run(() => {
9
- forceFilter.forEach((entity) => {
10
- const bodyId = resolveBodyId(entity, state);
11
- if (bodyId === undefined) {
12
- return;
13
- }
14
- const force = entity.get(Force);
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
- });
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);
24
32
  });
33
+ torqueSystem.entity.add(PhysicsSystemTag);
25
34
  }
26
35
  //# sourceMappingURL=forces.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"forces.js","sourceRoot":"","sources":["../../../../src/systems/forces.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAEvD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,MAAM,UAAU,kBAAkB,CAAC,KAAY,EAAE,KAAmB,EAAE,KAAa;IACjF,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IAE3D,OAAO,KAAK;SACT,MAAM,CAAC,oBAAoB,CAAC;SAC5B,KAAK,CAAC,KAAK,CAAC;SACZ,GAAG,CAAC,GAAG,EAAE;QACR,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YAC7B,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC5C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,OAAO;YACT,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAsB,CAAC;YACrD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;gBACxC,KAAK,CAAC,KAAK,CAAC,yBAAyB,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/E,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAuB,CAAC;YACxD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YACpE,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}
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 +1,4 @@
1
- import { type Entity, type System, type World } from "@vworlds/vecs";
2
- import { type PhysicsState } from "../adapter/state.js";
3
- export declare function installImpulseAccumulate(world: World, state: PhysicsState, phase: Entity): System;
4
- export declare function registerImpulseHooks(world: World, state: PhysicsState): void;
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,69 +1,73 @@
1
1
  import { AngularImpulse, Impulse } from "../components/force.js";
2
+ import { scr_b2Vec2 } from "../adapter/runtime.js";
3
+ import { PhysicsSystemTag } from "../adapter/engine.js";
2
4
  import { resolveBodyId } from "../util/resolve_body.js";
3
- export function installImpulseAccumulate(world, state, phase) {
4
- return world
5
+ export function installImpulseAccumulate(world, engine, phase) {
6
+ const system = world
5
7
  .system("PhysicsImpulseAccumulate")
6
8
  .phase(phase)
7
9
  .run(() => {
8
- drainLinearImpulses(state);
9
- drainAngularImpulses(state);
10
+ drainLinearImpulses(engine);
11
+ drainAngularImpulses(engine);
10
12
  });
13
+ system.entity.add(PhysicsSystemTag);
11
14
  }
12
- export function registerImpulseHooks(world, state) {
15
+ export function registerImpulseHooks(world, engine) {
13
16
  world.component(Impulse).onSet((entity, impulse) => {
14
- const bodyId = resolveBodyId(entity, state);
17
+ const bodyId = resolveBodyId(entity);
15
18
  if (bodyId === undefined) {
16
19
  return;
17
20
  }
18
- state.impulseEntitiesThisStep.add(entity.eid);
19
- const accumulator = getLinearAccumulator(state, bodyId);
21
+ engine.impulseEntitiesThisStep.add(entity.eid);
22
+ const accumulator = getLinearAccumulator(engine, bodyId);
20
23
  accumulator.x += impulse.x;
21
24
  accumulator.y += impulse.y;
22
25
  accumulator.wake || (accumulator.wake = impulse.wake);
23
26
  });
24
27
  world.component(AngularImpulse).onSet((entity, impulse) => {
25
- const bodyId = resolveBodyId(entity, state);
28
+ const bodyId = resolveBodyId(entity);
26
29
  if (bodyId === undefined) {
27
30
  return;
28
31
  }
29
- state.impulseEntitiesThisStep.add(entity.eid);
30
- const accumulator = getAngularAccumulator(state, bodyId);
32
+ engine.impulseEntitiesThisStep.add(entity.eid);
33
+ const accumulator = getAngularAccumulator(engine, bodyId);
31
34
  accumulator.value += impulse.value;
32
35
  accumulator.wake || (accumulator.wake = impulse.wake);
33
36
  });
34
37
  }
35
- function drainLinearImpulses(state) {
36
- for (const [bodyId, impulse] of state.pendingLinearImpulse) {
37
- if (!state.entityByBodyIndex.has(bodyId.index1)) {
38
+ function drainLinearImpulses(engine) {
39
+ for (const [bodyId, impulse] of engine.pendingLinearImpulse) {
40
+ if (!engine.entityByBodyIndex.has(bodyId.index1)) {
38
41
  continue;
39
42
  }
40
- state.scratchVec2.Set(impulse.x, impulse.y);
41
- state.box2d.b2Body_ApplyLinearImpulseToCenter(bodyId, state.scratchVec2, impulse.wake);
43
+ const vec = scr_b2Vec2[0];
44
+ vec.Set(impulse.x, impulse.y);
45
+ engine.box2d.b2Body_ApplyLinearImpulseToCenter(bodyId, vec, impulse.wake);
42
46
  }
43
- state.pendingLinearImpulse.clear();
47
+ engine.pendingLinearImpulse.clear();
44
48
  }
45
- function drainAngularImpulses(state) {
46
- for (const [bodyId, impulse] of state.pendingAngularImpulse) {
47
- if (!state.entityByBodyIndex.has(bodyId.index1)) {
49
+ function drainAngularImpulses(engine) {
50
+ for (const [bodyId, impulse] of engine.pendingAngularImpulse) {
51
+ if (!engine.entityByBodyIndex.has(bodyId.index1)) {
48
52
  continue;
49
53
  }
50
- state.box2d.b2Body_ApplyAngularImpulse(bodyId, impulse.value, impulse.wake);
54
+ engine.box2d.b2Body_ApplyAngularImpulse(bodyId, impulse.value, impulse.wake);
51
55
  }
52
- state.pendingAngularImpulse.clear();
56
+ engine.pendingAngularImpulse.clear();
53
57
  }
54
- function getLinearAccumulator(state, bodyId) {
55
- let accumulator = state.pendingLinearImpulse.get(bodyId);
58
+ function getLinearAccumulator(engine, bodyId) {
59
+ let accumulator = engine.pendingLinearImpulse.get(bodyId);
56
60
  if (accumulator === undefined) {
57
61
  accumulator = { x: 0, y: 0, wake: false };
58
- state.pendingLinearImpulse.set(bodyId, accumulator);
62
+ engine.pendingLinearImpulse.set(bodyId, accumulator);
59
63
  }
60
64
  return accumulator;
61
65
  }
62
- function getAngularAccumulator(state, bodyId) {
63
- let accumulator = state.pendingAngularImpulse.get(bodyId);
66
+ function getAngularAccumulator(engine, bodyId) {
67
+ let accumulator = engine.pendingAngularImpulse.get(bodyId);
64
68
  if (accumulator === undefined) {
65
69
  accumulator = { value: 0, wake: false };
66
- state.pendingAngularImpulse.set(bodyId, accumulator);
70
+ engine.pendingAngularImpulse.set(bodyId, accumulator);
67
71
  }
68
72
  return accumulator;
69
73
  }
@@ -1 +1 @@
1
- {"version":3,"file":"impulse_accumulate.js","sourceRoot":"","sources":["../../../../src/systems/impulse_accumulate.ts"],"names":[],"mappings":"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"}
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 System, type World } from "@vworlds/vecs";
2
- import { type PhysicsState } from "../adapter/state.js";
3
- export declare function installImpulseZero(world: World, state: PhysicsState, phase: Entity): System;
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,10 +1,11 @@
1
1
  import { AngularImpulse, Impulse } from "../components/force.js";
2
- export function installImpulseZero(world, state, phase) {
3
- return world
2
+ import { PhysicsSystemTag } from "../adapter/engine.js";
3
+ export function installImpulseZero(world, engine, phase) {
4
+ const system = world
4
5
  .system("PhysicsImpulseZero")
5
6
  .phase(phase)
6
7
  .run(() => {
7
- for (const eid of state.impulseEntitiesThisStep) {
8
+ for (const eid of engine.impulseEntitiesThisStep) {
8
9
  const entity = world.getEntity(eid);
9
10
  if (entity === undefined) {
10
11
  continue;
@@ -19,7 +20,8 @@ export function installImpulseZero(world, state, phase) {
19
20
  ai.value = 0;
20
21
  }
21
22
  }
22
- state.impulseEntitiesThisStep.clear();
23
+ engine.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;AAGjE,MAAM,UAAU,kBAAkB,CAAC,KAAY,EAAE,KAAmB,EAAE,KAAa;IACjF,OAAO,KAAK;SACT,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;AACP,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,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,5 +1,5 @@
1
1
  import { type Entity, type World } from "@vworlds/vecs";
2
- import { type PhysicsState } from "../adapter/state.js";
2
+ import { type PhysicsEngine } from "../adapter/engine.js";
3
3
  /** The three phases the physics systems split across. */
4
4
  export interface PhysicsPhases {
5
5
  preStep: Entity;
@@ -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`, and tag each
15
- * system entity with {@link PhysicsSystemTag}. */
16
- export declare function registerPhysicsSystems(world: World, state: PhysicsState, phases: PhysicsPhases, opts?: PhysicsSystemsOptions): void;
14
+ /** Register every physics system into `world`, bound to `engine`. */
15
+ export declare function registerPhysicsSystems(world: World, engine: PhysicsEngine, phases: PhysicsPhases, opts?: PhysicsSystemsOptions): void;