@typeonce/ritmo-render 0.7.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":"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"}
@@ -6,6 +6,7 @@ export const system = (Game, options) => {
6
6
  // above carries the exact requirements (the registry and extra services).
7
7
  const System = Game.System;
8
8
  const Query = Game.Query;
9
+ const anyOf = Game.Query.anyOf;
9
10
  const transform = options.transform;
10
11
  const selection = {
11
12
  ...options.select,
@@ -44,11 +45,18 @@ export const system = (Game, options) => {
44
45
  // Despawns are recorded as removals of every component, so these cover them too.
45
46
  removedReads[`removed${index}`] = Game.System.readRemoved(descriptor);
46
47
  });
47
- additions.forEach((descriptor, index) => {
48
- queries[`added${index}`] = Query({ selection, filters: [Game.Query.added(descriptor)] });
49
- });
50
- triggers.forEach((trigger, index) => {
51
- queries[`changed${index}`] = Query({ selection, filters: [Game.Query.changed(trigger)] });
48
+ // One query: an entity whose required component was added, or whose
49
+ // trigger changed, is synced once.
50
+ const filters = [
51
+ ...additions.map((descriptor) => Game.Query.added(descriptor)),
52
+ ...triggers.map((trigger) => Game.Query.changed(trigger))
53
+ ];
54
+ // Never empty: `required` always holds the renderable.
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)
52
60
  });
53
61
  return System(options.name, {
54
62
  queries,
@@ -60,29 +68,29 @@ export const system = (Game, options) => {
60
68
  const registry = services.__registry;
61
69
  // Destroy first: an entity that lost a required component has no node,
62
70
  // and one that lost it and got it back since the last run gets a fresh one.
71
+ let lagged = false;
63
72
  for (let index = 0; index < required.length; index++) {
64
- for (const entity of removed[`removed${index}`].all())
73
+ const stream = removed[`removed${index}`];
74
+ for (const entity of stream.all())
65
75
  registry.remove(entity);
76
+ if (stream.lagged())
77
+ lagged = true;
66
78
  }
67
- const applied = new Set();
68
- for (let index = 0; index < additions.length; index++) {
69
- for (const { entity, data } of queries[`added${index}`].each()) {
70
- if (applied.has(entity.id))
71
- continue;
72
- const context = contextOf(entity, data, services, resources);
73
- options.apply(registry.ensure(entity.id, () => options.create(context)), context);
74
- applied.add(entity.id);
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);
75
89
  }
76
90
  }
77
- for (let index = 0; index < triggers.length; index++) {
78
- for (const { entity, data } of queries[`changed${index}`].each()) {
79
- if (applied.has(entity.id))
80
- continue;
81
- applied.add(entity.id);
82
- const context = contextOf(entity, data, services, resources);
83
- const node = registry.get(entity.id) ?? registry.ensure(entity.id, () => options.create(context));
84
- options.apply(node, context);
85
- }
91
+ for (const { entity, data } of queries["sync"].each()) {
92
+ const context = contextOf(entity, data, services, resources);
93
+ options.apply(registry.ensure(entity.id, () => options.create(context)), context);
86
94
  }
87
95
  });
88
96
  };
@@ -1 +1 @@
1
- {"version":3,"file":"RenderSync.js","sourceRoot":"","sources":["../src/RenderSync.ts"],"names":[],"mappings":"AAwKA;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAWpB,IAA0B,EAC1B,OAA6F,EACiC,EAAE;IAGhI,wEAAwE;IACxE,0EAA0E;IAC1E,MAAM,MAAM,GAAG,IAAI,CAAC,MAAyF,CAAA;IAC7G,MAAM,KAAK,GAAG,IAAI,CAAC,KAA4C,CAAA;IAC/D,MAAM,SAAS,GAAG,OAAO,CAAC,SAAsD,CAAA;IAChF,MAAM,SAAS,GAAG;QAChB,GAAG,OAAO,CAAC,MAAM;QACjB,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;QACjD,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;KAChF,CAAA;IACD,MAAM,QAAQ,GAA4B,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAA;IAC/F,KAAK,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,CAAC;QACvE,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IACjD,CAAC;IACD,MAAM,SAAS,GAA4B,EAAE,CAAA;IAC7C,KAAK,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,CAAC;QACxE,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,UAA0C,CAAC,CAAA;IACvF,CAAC;IAED,MAAM,SAAS,GAAG,CAChB,MAAgC,EAChC,IAAyB,EACzB,QAAiC,EACjC,KAA8B,EACrB,EAAE,CAAC,CAAC;QACb,MAAM,EAAE,MAAM,CAAC,EAAE;QACjB,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,EAAE;QACtC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE;QACrC,IAAI;QACJ,SAAS,EAAE,KAAK;QAChB,QAAQ,EAAE,QAAQ;KACnB,CAAuB,CAAA;IAExB,6EAA6E;IAC7E,MAAM,QAAQ,GAAG;QACf,OAAO,CAAC,UAAU;QAClB,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC/C,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9G,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,KAAK,CAAC,CAAA;IAEvE,sEAAsE;IACtE,yDAAyD;IACzD,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IAC7G,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAA;IACjF,MAAM,OAAO,GAA2B,EAAE,CAAA;IAC1C,MAAM,YAAY,GAA4B,EAAE,CAAA;IAChD,QAAQ,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE;QACrC,iFAAiF;QACjF,YAAY,CAAC,UAAU,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;IACvE,CAAC,CAAC,CAAA;IACF,SAAS,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE;QACtC,OAAO,CAAC,QAAQ,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAA;IAC1F,CAAC,CAAC,CAAA;IACF,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;QAClC,OAAO,CAAC,UAAU,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAA;IAC3F,CAAC,CAAC,CAAA;IAEF,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;QAC1B,OAAO;QACP,OAAO,EAAE,YAAY;QACrB,SAAS;QACT,QAAQ;QACR,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,EAAE;KACzB,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC/C,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAgC,CAAA;QAC1D,uEAAuE;QACvE,4EAA4E;QAC5E,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YACrD,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE;gBAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAChF,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAA;QACjC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YACtD,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC,QAAQ,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC/D,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;oBAAE,SAAQ;gBACpC,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAA;gBAC5D,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;gBACjF,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;YACxB,CAAC;QACH,CAAC;QACD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YACrD,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;gBACjE,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;oBAAE,SAAQ;gBACpC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;gBACtB,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAA;gBAC5D,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;gBACjG,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;YAC9B,CAAC;QACH,CAAC;IACH,CAAC,CAAiI,CAAA;AACpI,CAAC,CAAA;AAuFD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAUzB,IAA0B,EAC1B,OAAsF,EACR,EAAE;IAEhF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAyF,CAAA;IAC7G,MAAM,KAAK,GAAG,IAAI,CAAC,KAA4C,CAAA;IAC/D,MAAM,QAAQ,GAAG,KAAK,CAAC;QACrB,SAAS,EAAE;YACT,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAoB,CAAC;YACvD,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAkB,CAAC;SACrD;KACF,CAAC,CAAA;IACF,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;QAC1B,OAAO,EAAE,EAAE,QAAQ,EAAE;QACrB,QAAQ,EAAE;YACR,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;YAC/C,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAqB,CAAC;SAC1D;QACD,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,EAAE;KACzB,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC3B,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAA8B,CAAA;QACxD,MAAM,KAAK,GAAI,QAAQ,CAAC,KAAoC,CAAC,KAAK,CAAA;QAClE,MAAM,KAAK,GAAG,OAAO,CAAC,KAA4D,CAAA;QAClF,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAA;QAC3B,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;YACvD,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;YACpC,IAAI,IAAI,KAAK,SAAS;gBAAE,SAAQ;YAChC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAA;gBAC7E,SAAQ;YACV,CAAC;YACD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAY,CAAA;YAC1C,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAY,CAAA;YACvC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,EAAoB,EAAE,MAAM,CAAC,EAAE,CAAC,CAAA;QACxH,CAAC;IACH,CAAC,CAAiF,CAAA;AACpF,CAAC,CAAA"}
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.7.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.7.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
@@ -189,6 +192,7 @@ export const system = <
189
192
  // above carries the exact requirements (the registry and extra services).
190
193
  const System = Game.System as unknown as (name: string, spec: object, run: (context: any) => void) => unknown
191
194
  const Query = Game.Query as unknown as (spec: object) => object
195
+ const anyOf = Game.Query.anyOf as unknown as (...filters: ReadonlyArray<object>) => object
192
196
  const transform = options.transform as Schema.ComponentDescriptor<S> | undefined
193
197
  const selection = {
194
198
  ...options.select,
@@ -235,11 +239,18 @@ export const system = <
235
239
  // Despawns are recorded as removals of every component, so these cover them too.
236
240
  removedReads[`removed${index}`] = Game.System.readRemoved(descriptor)
237
241
  })
238
- additions.forEach((descriptor, index) => {
239
- queries[`added${index}`] = Query({ selection, filters: [Game.Query.added(descriptor)] })
240
- })
241
- triggers.forEach((trigger, index) => {
242
- queries[`changed${index}`] = Query({ selection, filters: [Game.Query.changed(trigger)] })
242
+ // One query: an entity whose required component was added, or whose
243
+ // trigger changed, is synced once.
244
+ const filters = [
245
+ ...additions.map((descriptor) => Game.Query.added(descriptor)),
246
+ ...triggers.map((trigger) => Game.Query.changed(trigger))
247
+ ]
248
+ // Never empty: `required` always holds the renderable.
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)
243
254
  })
244
255
 
245
256
  return System(options.name, {
@@ -252,27 +263,26 @@ export const system = <
252
263
  const registry = services.__registry as NodeRegistry<Node>
253
264
  // Destroy first: an entity that lost a required component has no node,
254
265
  // and one that lost it and got it back since the last run gets a fresh one.
266
+ let lagged = false
255
267
  for (let index = 0; index < required.length; index++) {
256
- 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
257
271
  }
258
-
259
- const applied = new Set<number>()
260
- for (let index = 0; index < additions.length; index++) {
261
- for (const { entity, data } of queries[`added${index}`].each()) {
262
- if (applied.has(entity.id)) continue
263
- const context = contextOf(entity, data, services, resources)
264
- options.apply(registry.ensure(entity.id, () => options.create(context)), context)
265
- applied.add(entity.id)
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)
266
280
  }
267
281
  }
268
- for (let index = 0; index < triggers.length; index++) {
269
- for (const { entity, data } of queries[`changed${index}`].each()) {
270
- if (applied.has(entity.id)) continue
271
- applied.add(entity.id)
272
- const context = contextOf(entity, data, services, resources)
273
- const node = registry.get(entity.id) ?? registry.ensure(entity.id, () => options.create(context))
274
- options.apply(node, context)
275
- }
282
+
283
+ for (const { entity, data } of queries["sync"].each()) {
284
+ const context = contextOf(entity, data, services, resources)
285
+ options.apply(registry.ensure(entity.id, () => options.create(context)), context)
276
286
  }
277
287
  }) as RenderSystem<S, Root, Registry | Services[keyof Services] | Resources[keyof Resources] | ConditionNeedsFromConditions<When>>
278
288
  }