@typeonce/ritmo-render 0.8.0 → 0.9.0

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/README.md CHANGED
@@ -32,7 +32,7 @@ const runtime = Game.Runtime.make({
32
32
  detach: (mesh) => scene.remove(mesh)
33
33
  }))
34
34
  )
35
- })
35
+ }).value
36
36
  ```
37
37
 
38
38
  For Pixi, [`@typeonce/ritmo-pixi`](https://www.npmjs.com/package/@typeonce/ritmo-pixi) provides `PixiNodeRegistry.make(container)`, an implementation of the same registry contract. The host provides it with `Game.Runtime.service`; render systems keep depending on the generic service descriptor.
@@ -7,7 +7,10 @@
7
7
  * entity loses any of them or despawns. A node appears whichever of those
8
8
  * components arrives last, and goes as soon as one leaves. `RenderSync.system(...)` builds one system that does all three,
9
9
  * in a safe order (destroy, create, update), for one bound `Game`. What a
10
- * node looks like and how state is applied stay caller-defined.
10
+ * node looks like and how state is applied stay caller-defined. The registry
11
+ * belongs to the system: when removals were dropped before it read them
12
+ * (`lagged()`, after it did not run for long), it destroys every node whose
13
+ * entity no longer matches, so give each `RenderSync.system` its own registry.
11
14
  *
12
15
  * Change detection is per system, so the system sees every addition, change,
13
16
  * and removal exactly once, wherever it sits in the schedule, and applies each
@@ -1 +1 @@
1
- {"version":3,"file":"RenderSync.d.ts","sourceRoot":"","sources":["../src/RenderSync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RenderSync.d.ts","sourceRoot":"","sources":["../src/RenderSync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAA;AACtF,OAAO,KAAK,KAAK,MAAM,MAAM,wBAAwB,CAAA;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACtH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAErD,KAAK,eAAe,GAAG,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAA;AACvE,KAAK,iBAAiB,GAAG,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;AAC3D,KAAK,kBAAkB,GAAG,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;AAE7D;;GAEG;AACH,MAAM,MAAM,MAAM,CAAC,CAAC,SAAS,eAAe,IAC1C,CAAC,SAAS,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,KAAK,CAAA;AAElF;;GAEG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,IAAI,QAAQ,CAAC,MAAM,CAC3D,MAAM,EACN,UAAU,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAC9F,CAAC,CAAA;AAEF,KAAK,cAAc,CAAC,MAAM,IAAI;IAC5B,QAAQ,EAAE,CAAC,IAAI,MAAM,MAAM,GACzB,MAAM,CAAC,CAAC,CAAC,SAAS,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GACnE,MAAM,CAAC,CAAC,CAAC,SAAS,kBAAkB,CAAC,MAAM,CAAC,CAAC,GAAG,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GACrF,KAAK;CACV,CAAA;AAED,KAAK,aAAa,CAAC,SAAS,IAAI;IAC9B,QAAQ,EAAE,CAAC,IAAI,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,kBAAkB,GAAG,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;CAC5H,CAAA;AAED,KAAK,aAAa,CAAC,QAAQ,IAAI;IAC7B,QAAQ,EAAE,CAAC,IAAI,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,iBAAiB,GAAG,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;CAC9G,CAAA;AAED,wFAAwF;AACxF,MAAM,MAAM,cAAc,CAAC,SAAS,IAClC,SAAS,SAAS,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAA;AAEjH;;GAEG;AACH,MAAM,WAAW,WAAW,CAC1B,CAAC,SAAS,MAAM,CAAC,GAAG,EACpB,IAAI,EACJ,UAAU,SAAS,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAChD,SAAS,SAAS,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,SAAS,EAC3D,MAAM,EACN,QAAQ,EACR,SAAS,GAAG,EAAE;IAEd,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;IACzC,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAA;IAChE,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC,SAAS,CAAC,CAAA;IAC7C,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAA;IACrC,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,SAAS,CAAC,CAAA;IAC5C,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;CAC3C;AAED,MAAM,WAAW,OAAO,CACtB,CAAC,SAAS,MAAM,CAAC,GAAG,EACpB,IAAI,EACJ,UAAU,SAAS,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAChD,SAAS,SAAS,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,SAAS,EAC3D,QAAQ,SAAS,eAAe,EAChC,MAAM,SAAS,SAAS,CAAC,CAAC,CAAC,EAC3B,QAAQ,SAAS,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,EAC5D,SAAS,SAAS,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EAC7E,IAAI,SAAS,aAAa,CAAC,SAAS,CAAC,GAAG,SAAS,EAAE;IAEnD,uBAAuB;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,mEAAmE;IACnE,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;IAC/B;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAA;IAC9B,+CAA+C;IAC/C,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;IAC3B,qEAAqE;IACrE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,4DAA4D;IAC5D,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAA;IAC5B,2EAA2E;IAC3E,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAA;IAC9B;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAA;IAChE;;;;OAIG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAA;IACpB,mDAAmD;IACnD,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,KAAK,MAAM,CAAC,QAAQ,CAAC,CAAA;IACxH;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,KAAK,IAAI,CAAA;CACpI;AAED;;;GAGG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,SAAS,iBAAiB,GAAG,kBAAkB,GAAG,4BAA4B,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,IAChK,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;AAExD;;GAEG;AACH,eAAO,MAAM,MAAM,GACjB,CAAC,SAAS,MAAM,CAAC,GAAG,EACpB,IAAI,EACJ,KAAK,CAAC,UAAU,SAAS,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,EACtD,KAAK,CAAC,QAAQ,SAAS,eAAe,EACtC,KAAK,CAAC,MAAM,SAAS,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,EACtC,KAAK,CAAC,QAAQ,SAAS,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,GAAG,EAAE,EACvE,KAAK,CAAC,SAAS,SAAS,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,EACnF,KAAK,CAAC,IAAI,SAAS,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,EAC/D,KAAK,CAAC,SAAS,SAAS,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,SAAS,QAEvE,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,WACjB,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,KAC5F,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC,MAAM,QAAQ,CAAC,GAAG,SAAS,CAAC,MAAM,SAAS,CAAC,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAoG7H,CAAA;AAED,8EAA8E;AAC9E,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;;GAIG;AACH,MAAM,MAAM,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAA;AAKrF,KAAK,OAAO,CAAC,KAAK,IAAI;KAAG,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,EAAE,GAAG,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,MAAM,GAAG,CAAC,GAAG,KAAK;CAAE,CAAC,OAAO,CAAC,MAAM,KAAK,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC,CAAA;AAGtI,KAAK,eAAe,CAAC,KAAK,IAAI,KAAK,SAAS,MAAM,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,CAAA;AAE5G,OAAO,CAAC,MAAM,OAAO,EAAE,OAAO,MAAM,CAAA;AACpC,wEAAwE;AACxE,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,CAAA;CACzB;AAED,+EAA+E;AAC/E,MAAM,MAAM,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,MAAM,GAAG,MAAM,CAAA;AAEzE;;;;GAIG;AACH,MAAM,MAAM,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,IACtC;IAAC,eAAe,CAAC,IAAI,CAAC;IAAE,eAAe,CAAC,EAAE,CAAC;CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,GAC7D;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,CAAA;CAAE,GAC5C;IAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,CAAA;CAAE,CAAA;AAEjD,MAAM,MAAM,kBAAkB,CAC5B,CAAC,SAAS,MAAM,CAAC,GAAG,EACpB,IAAI,EACJ,QAAQ,SAAS,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAC9C,OAAO,SAAS,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAC7C,QAAQ,SAAS,eAAe,EAChC,KAAK,SAAS,iBAAiB,EAC/B,IAAI,SAAS,aAAa,CAAC,SAAS,CAAC,GAAG,SAAS,EAAE,EACnD,MAAM,GAAG,OAAO,IAEd,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,GAC1E,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAA;AAE9E,UAAU,eAAe,CACvB,CAAC,SAAS,MAAM,CAAC,GAAG,EACpB,IAAI,EACJ,QAAQ,SAAS,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAC9C,OAAO,SAAS,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAC7C,QAAQ,SAAS,eAAe,EAChC,KAAK,SAAS,iBAAiB,EAC/B,IAAI,SAAS,aAAa,CAAC,SAAS,CAAC,EACrC,MAAM;IAEN,uBAAuB;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,6EAA6E;IAC7E,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;IAC3B,uDAAuD;IACvD,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;IAC3B,6CAA6C;IAC7C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,KAAK,GAAG,sCAAsC,CAAA;IAC3H,8CAA8C;IAC9C,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAA;IACpB;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,CAAA;CAC7G;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,eAAO,MAAM,WAAW,GACtB,CAAC,SAAS,MAAM,CAAC,GAAG,EACpB,IAAI,EACJ,KAAK,CAAC,QAAQ,SAAS,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,EACpD,KAAK,CAAC,OAAO,SAAS,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,EACnD,KAAK,CAAC,QAAQ,SAAS,eAAe,EACtC,KAAK,CAAC,KAAK,SAAS,iBAAiB,EACrC,KAAK,CAAC,IAAI,SAAS,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,EAAE,EAC/D,MAAM,GAAG,OAAO,QAEV,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,WACjB,kBAAkB,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,KACrF,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,GAAG,KAAK,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAkC7E,CAAA"}
@@ -53,6 +53,11 @@ export const system = (Game, options) => {
53
53
  ];
54
54
  // Never empty: `required` always holds the renderable.
55
55
  queries["sync"] = Query({ selection, filters: [filters.length === 1 ? filters[0] : anyOf(...filters)] });
56
+ // Every entity that should have a node: read only after removals were lost.
57
+ queries["members"] = Query({
58
+ selection: { __renderable: Game.Query.read(options.renderable) },
59
+ with: required.filter((descriptor) => descriptor !== options.renderable)
60
+ });
56
61
  return System(options.name, {
57
62
  queries,
58
63
  removed: removedReads,
@@ -63,9 +68,25 @@ export const system = (Game, options) => {
63
68
  const registry = services.__registry;
64
69
  // Destroy first: an entity that lost a required component has no node,
65
70
  // and one that lost it and got it back since the last run gets a fresh one.
71
+ let lagged = false;
66
72
  for (let index = 0; index < required.length; index++) {
67
- for (const entity of removed[`removed${index}`].all())
73
+ const stream = removed[`removed${index}`];
74
+ for (const entity of stream.all())
68
75
  registry.remove(entity);
76
+ if (stream.lagged())
77
+ lagged = true;
78
+ }
79
+ // Removals were dropped before this system read them (it did not run
80
+ // for longer than the stream keeps them): destroy every node whose
81
+ // entity no longer has one, so none stays on screen.
82
+ if (lagged) {
83
+ const members = new Set();
84
+ for (const { entity } of queries["members"].each())
85
+ members.add(entity.id);
86
+ for (const [entity] of [...registry.entries()]) {
87
+ if (!members.has(entity))
88
+ registry.remove(entity);
89
+ }
69
90
  }
70
91
  for (const { entity, data } of queries["sync"].each()) {
71
92
  const context = contextOf(entity, data, services, resources);
@@ -1 +1 @@
1
- {"version":3,"file":"RenderSync.js","sourceRoot":"","sources":["../src/RenderSync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RenderSync.js","sourceRoot":"","sources":["../src/RenderSync.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@typeonce/ritmo-render",
3
- "version": "0.8.0",
3
+ "version": "0.9.0",
4
4
  "description": "Renderer-agnostic entity-to-node mirroring for Ritmo",
5
5
  "author": "Sandro Maglione",
6
6
  "license": "MIT",
@@ -45,7 +45,7 @@
45
45
  "provenance": true
46
46
  },
47
47
  "dependencies": {
48
- "@typeonce/ritmo": "^0.8.0"
48
+ "@typeonce/ritmo": "^0.9.0"
49
49
  },
50
50
  "engines": {
51
51
  "node": ">=20"
package/src/RenderSync.ts CHANGED
@@ -7,7 +7,10 @@
7
7
  * entity loses any of them or despawns. A node appears whichever of those
8
8
  * components arrives last, and goes as soon as one leaves. `RenderSync.system(...)` builds one system that does all three,
9
9
  * in a safe order (destroy, create, update), for one bound `Game`. What a
10
- * node looks like and how state is applied stay caller-defined.
10
+ * node looks like and how state is applied stay caller-defined. The registry
11
+ * belongs to the system: when removals were dropped before it read them
12
+ * (`lagged()`, after it did not run for long), it destroys every node whose
13
+ * entity no longer matches, so give each `RenderSync.system` its own registry.
11
14
  *
12
15
  * Change detection is per system, so the system sees every addition, change,
13
16
  * and removal exactly once, wherever it sits in the schedule, and applies each
@@ -244,6 +247,11 @@ export const system = <
244
247
  ]
245
248
  // Never empty: `required` always holds the renderable.
246
249
  queries["sync"] = Query({ selection, filters: [filters.length === 1 ? filters[0] : anyOf(...filters)] })
250
+ // Every entity that should have a node: read only after removals were lost.
251
+ queries["members"] = Query({
252
+ selection: { __renderable: Game.Query.read(options.renderable) },
253
+ with: required.filter((descriptor) => descriptor !== options.renderable)
254
+ })
247
255
 
248
256
  return System(options.name, {
249
257
  queries,
@@ -255,8 +263,21 @@ export const system = <
255
263
  const registry = services.__registry as NodeRegistry<Node>
256
264
  // Destroy first: an entity that lost a required component has no node,
257
265
  // and one that lost it and got it back since the last run gets a fresh one.
266
+ let lagged = false
258
267
  for (let index = 0; index < required.length; index++) {
259
- for (const entity of removed[`removed${index}`].all()) registry.remove(entity)
268
+ const stream = removed[`removed${index}`]
269
+ for (const entity of stream.all()) registry.remove(entity)
270
+ if (stream.lagged()) lagged = true
271
+ }
272
+ // Removals were dropped before this system read them (it did not run
273
+ // for longer than the stream keeps them): destroy every node whose
274
+ // entity no longer has one, so none stays on screen.
275
+ if (lagged) {
276
+ const members = new Set<number>()
277
+ for (const { entity } of queries["members"].each()) members.add(entity.id)
278
+ for (const [entity] of [...registry.entries()]) {
279
+ if (!members.has(entity)) registry.remove(entity)
280
+ }
260
281
  }
261
282
 
262
283
  for (const { entity, data } of queries["sync"].each()) {