@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 +1 -1
- package/dist/RenderSync.d.ts +4 -1
- package/dist/RenderSync.d.ts.map +1 -1
- package/dist/RenderSync.js +22 -1
- package/dist/RenderSync.js.map +1 -1
- package/package.json +2 -2
- package/src/RenderSync.ts +23 -2
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.
|
package/dist/RenderSync.d.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
|
package/dist/RenderSync.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RenderSync.d.ts","sourceRoot":"","sources":["../src/RenderSync.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"RenderSync.d.ts","sourceRoot":"","sources":["../src/RenderSync.ts"],"names":[],"mappings":"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"}
|
package/dist/RenderSync.js
CHANGED
|
@@ -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
|
-
|
|
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);
|
package/dist/RenderSync.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RenderSync.js","sourceRoot":"","sources":["../src/RenderSync.ts"],"names":[],"mappings":"
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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()) {
|