@vworlds/vecs 1.0.45 → 1.0.46
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 +7 -1
- package/dist/component.d.ts +57 -60
- package/dist/component.js +24 -17
- package/dist/component.js.map +1 -1
- package/dist/component_meta.d.ts +67 -79
- package/dist/component_meta.js +331 -37
- package/dist/component_meta.js.map +1 -1
- package/dist/dsl.js +1 -1
- package/dist/dsl.js.map +1 -1
- package/dist/entity/entity.base.js +4 -0
- package/dist/entity/entity.base.js.map +1 -1
- package/dist/entity/entity.components.d.ts +39 -41
- package/dist/entity/entity.components.js +249 -82
- package/dist/entity/entity.components.js.map +1 -1
- package/dist/entity/entity.d.ts +1 -2
- package/dist/entity/entity.js +2 -3
- package/dist/entity/entity.js.map +1 -1
- package/dist/entity/entity.lifecycle.d.ts +7 -1
- package/dist/entity/entity.lifecycle.js +40 -50
- package/dist/entity/entity.lifecycle.js.map +1 -1
- package/dist/entity/entity.queries.js +30 -0
- package/dist/entity/entity.queries.js.map +1 -1
- package/dist/entity/entity.relationships.d.ts +4 -0
- package/dist/entity/entity.relationships.js +18 -10
- package/dist/entity/entity.relationships.js.map +1 -1
- package/dist/index.d.ts +7 -4
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/inject.d.ts +63 -14
- package/dist/inject.js +165 -89
- package/dist/inject.js.map +1 -1
- package/dist/modules/identity.js +2 -2
- package/dist/modules/identity.js.map +1 -1
- package/dist/modules/implements.js +2 -2
- package/dist/modules/implements.js.map +1 -1
- package/dist/modules/pipeline.js +5 -5
- package/dist/modules/pipeline.js.map +1 -1
- package/dist/modules/relationship_types.d.ts +70 -6
- package/dist/modules/relationship_types.js +70 -6
- package/dist/modules/relationship_types.js.map +1 -1
- package/dist/modules/relationships.d.ts +31 -9
- package/dist/modules/relationships.js +120 -44
- package/dist/modules/relationships.js.map +1 -1
- package/dist/modules/singleton.js +2 -2
- package/dist/modules/singleton.js.map +1 -1
- package/dist/modules/snapshot.d.ts +26 -0
- package/dist/modules/snapshot.js +45 -0
- package/dist/modules/snapshot.js.map +1 -0
- package/dist/modules/snapshot_types.d.ts +85 -0
- package/dist/modules/snapshot_types.js +130 -0
- package/dist/modules/snapshot_types.js.map +1 -0
- package/dist/package.json +2 -2
- package/dist/query/callbacks.d.ts +9 -7
- package/dist/query/callbacks.js +27 -41
- package/dist/query/callbacks.js.map +1 -1
- package/dist/query/grouped_query.js +7 -7
- package/dist/query/grouped_query.js.map +1 -1
- package/dist/query/grouping.d.ts +6 -2
- package/dist/query/grouping.js +84 -15
- package/dist/query/grouping.js.map +1 -1
- package/dist/query/query.d.ts +4 -4
- package/dist/query/query.js +37 -14
- package/dist/query/query.js.map +1 -1
- package/dist/snapshot/capture.d.ts +1 -0
- package/dist/snapshot/capture.js +212 -0
- package/dist/snapshot/capture.js.map +1 -0
- package/dist/snapshot/clone.d.ts +1 -0
- package/dist/snapshot/clone.js +107 -0
- package/dist/snapshot/clone.js.map +1 -0
- package/dist/snapshot/index.d.ts +5 -0
- package/dist/snapshot/index.js +21 -0
- package/dist/snapshot/index.js.map +1 -0
- package/dist/snapshot/preflight.d.ts +1 -0
- package/dist/snapshot/preflight.js +40 -0
- package/dist/snapshot/preflight.js.map +1 -0
- package/dist/snapshot/restore.d.ts +1 -0
- package/dist/snapshot/restore.js +111 -0
- package/dist/snapshot/restore.js.map +1 -0
- package/dist/snapshot/types.d.ts +135 -0
- package/dist/snapshot/types.js +26 -0
- package/dist/snapshot/types.js.map +1 -0
- package/dist/system.d.ts +3 -1
- package/dist/system.js +33 -23
- package/dist/system.js.map +1 -1
- package/dist/terms/all_term.js +19 -0
- package/dist/terms/all_term.js.map +1 -1
- package/dist/terms/any_term.js +19 -0
- package/dist/terms/any_term.js.map +1 -1
- package/dist/terms/not_term.js +4 -0
- package/dist/terms/not_term.js.map +1 -1
- package/dist/terms/target_term.d.ts +1 -2
- package/dist/terms/target_term.js +2 -4
- package/dist/terms/target_term.js.map +1 -1
- package/dist/terms/term.d.ts +2 -0
- package/dist/terms/term.js +59 -10
- package/dist/terms/term.js.map +1 -1
- package/dist/util/array_map.d.ts +43 -12
- package/dist/util/array_map.js +90 -41
- package/dist/util/array_map.js.map +1 -1
- package/dist/util/dense_set.js +26 -0
- package/dist/util/dense_set.js.map +1 -1
- package/dist/world/world.base.js +12 -0
- package/dist/world/world.base.js.map +1 -1
- package/dist/world/world.d.ts +7 -0
- package/dist/world/world.deferred.js +17 -0
- package/dist/world/world.deferred.js.map +1 -1
- package/dist/world/world.entities.d.ts +13 -2
- package/dist/world/world.entities.js +16 -2
- package/dist/world/world.entities.js.map +1 -1
- package/dist/world/world.js +15 -3
- package/dist/world/world.js.map +1 -1
- package/dist/world/world.pipeline.d.ts +2 -2
- package/dist/world/world.pipeline.js +4 -2
- package/dist/world/world.pipeline.js.map +1 -1
- package/dist/world/world.queries.d.ts +7 -0
- package/dist/world/world.queries.js +52 -0
- package/dist/world/world.queries.js.map +1 -1
- package/dist/world/world.transfers.d.ts +137 -0
- package/dist/world/world.transfers.js +188 -0
- package/dist/world/world.transfers.js.map +1 -0
- package/docs/README.md +18 -6
- package/docs/components.md +90 -53
- package/docs/concepts.md +21 -17
- package/docs/design-guide.md +125 -94
- package/docs/entities.md +62 -76
- package/docs/execution-model.md +26 -10
- package/docs/getting-started.md +6 -6
- package/docs/glossary.md +19 -10
- package/docs/modules.md +8 -8
- package/docs/queries-and-filters.md +15 -10
- package/docs/relationships.md +245 -124
- package/docs/snapshots.md +181 -0
- package/docs/systems.md +64 -21
- package/docs/utilities.md +10 -6
- package/package.json +2 -2
- package/skills/vecs/SKILL.md +5 -4
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
// Snapshot policy trait, its policy values, and the declaration helpers that
|
|
2
|
+
// read and write them.
|
|
3
|
+
//
|
|
4
|
+
// Everything `component.ts` needs lives here rather than in `snapshot.ts`, which
|
|
5
|
+
// pulls in `module.ts` and would close the `component.ts` -> `module.ts` ->
|
|
6
|
+
// `component.ts` cycle at class-definition time. `SnapshotModule` keeps only the
|
|
7
|
+
// runtime invariants it installs, mirroring the `relationship_types.ts` /
|
|
8
|
+
// `relationships.ts` split.
|
|
9
|
+
import { Relationship } from "../component_meta.js";
|
|
10
|
+
/**
|
|
11
|
+
* Built-in pair-form trait declaring how {@link World.snapshotSubtree} captures
|
|
12
|
+
* one component type.
|
|
13
|
+
*
|
|
14
|
+
* The trait is attached to the **component entity**, not to ordinary entities,
|
|
15
|
+
* and its target selects the policy. It is exclusive, one-of
|
|
16
|
+
* {@link OneOf | restricted to its own children}. Configure it through the
|
|
17
|
+
* owning module; declarations affect future captures, while each existing
|
|
18
|
+
* snapshot retains the materializer bound at its capture time.
|
|
19
|
+
*
|
|
20
|
+
* ```ts
|
|
21
|
+
* // Declare "this type never crosses worlds" (resources, live queries, engines).
|
|
22
|
+
* world.component(PhysicsEngine).snapshotPolicy(DontSnapshot);
|
|
23
|
+
*
|
|
24
|
+
* // Declare a bespoke capture that drops runtime handles.
|
|
25
|
+
* world.component(Body).snapshotPolicy(CustomSnapshot, {
|
|
26
|
+
* capture: (body) => ({ ...body, _bodyId: undefined }),
|
|
27
|
+
* materialize: (data) => Object.assign(new Body(), data),
|
|
28
|
+
* });
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* A type with no {@link OnSnapshot} edge uses {@link ClonePublic}, so ordinary
|
|
32
|
+
* plain-data components need no declaration at all.
|
|
33
|
+
*/
|
|
34
|
+
export class OnSnapshot extends Relationship {
|
|
35
|
+
constructor() {
|
|
36
|
+
super(...arguments);
|
|
37
|
+
/**
|
|
38
|
+
* Capture hook for the {@link CustomSnapshot} policy. `undefined` for every
|
|
39
|
+
* other policy.
|
|
40
|
+
*/
|
|
41
|
+
this.capture = undefined;
|
|
42
|
+
/**
|
|
43
|
+
* Materialize hook for the {@link CustomSnapshot} policy. `undefined` for
|
|
44
|
+
* every other policy.
|
|
45
|
+
*/
|
|
46
|
+
this.materialize = undefined;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Default snapshot policy: construct a fresh instance of the component class
|
|
51
|
+
* and clone the source instance's own enumerable fields onto it.
|
|
52
|
+
*
|
|
53
|
+
* Shallow, and therefore exactly as aliasing-sensitive as `set`: a component
|
|
54
|
+
* holding a nested object shares it with the source until something copies it.
|
|
55
|
+
* A type that must not carry runtime handles across worlds needs its own
|
|
56
|
+
* policy — see {@link CustomSnapshot}.
|
|
57
|
+
*/
|
|
58
|
+
export class ClonePublic {
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Snapshot policy declaring that a component type never crosses worlds.
|
|
62
|
+
*
|
|
63
|
+
* Use it for attached resources and other instances whose identity is bound to
|
|
64
|
+
* a single world: live queries and systems, engine handles, socket sessions.
|
|
65
|
+
* A snapshot silently omits an unselected `DontSnapshot` type, but *selecting*
|
|
66
|
+
* one explicitly is a preflight error, so a caller cannot silently lose state
|
|
67
|
+
* it asked for.
|
|
68
|
+
*/
|
|
69
|
+
export class DontSnapshot {
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Snapshot policy delegating capture and materialization to the owner.
|
|
73
|
+
*
|
|
74
|
+
* Register it with {@link Component.snapshotPolicy}, passing the `capture` and
|
|
75
|
+
* `materialize` callbacks; the callbacks are stored on that component entity's
|
|
76
|
+
* own {@link OnSnapshot} edge, so each component type keeps a separate policy.
|
|
77
|
+
*/
|
|
78
|
+
export class CustomSnapshot {
|
|
79
|
+
}
|
|
80
|
+
/** @internal The policy a component type resolves to when it declares none. */
|
|
81
|
+
export const CLONE_PUBLIC = { kind: "clone" };
|
|
82
|
+
/** @internal The policy a component type resolves to when it is excluded. */
|
|
83
|
+
export const NO_SNAPSHOT = { kind: "none" };
|
|
84
|
+
/**
|
|
85
|
+
* @internal Attach `policy` to `component`'s {@link OnSnapshot} edge and store
|
|
86
|
+
* the custom callbacks when the policy needs them.
|
|
87
|
+
*
|
|
88
|
+
* Called by `Component.snapshotPolicy`; the `OnSnapshot` hooks installed by
|
|
89
|
+
* `SnapshotModule` enforce the setup-time invariant.
|
|
90
|
+
*/
|
|
91
|
+
export function _declareSnapshotPolicy(component, policy, capture, materialize) {
|
|
92
|
+
const world = component.world;
|
|
93
|
+
const target = world.component(policy);
|
|
94
|
+
component.add(OnSnapshot, target);
|
|
95
|
+
component.set(OnSnapshot, {
|
|
96
|
+
capture: policy === CustomSnapshot ? capture : undefined,
|
|
97
|
+
materialize: policy === CustomSnapshot ? materialize : undefined,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* @internal Resolve the capture policy declared for `meta` in `world`.
|
|
102
|
+
*
|
|
103
|
+
* A type with no {@link OnSnapshot} declaration resolves to {@link CLONE_PUBLIC}.
|
|
104
|
+
*
|
|
105
|
+
* @throws If an `OnSnapshot` edge selects {@link CustomSnapshot} without both
|
|
106
|
+
* callbacks, which would otherwise restore as a silently empty component.
|
|
107
|
+
*/
|
|
108
|
+
export function _resolveSnapshotPolicy(world, meta) {
|
|
109
|
+
const onSnapshot = world.component(OnSnapshot);
|
|
110
|
+
const declaration = world.getEntity(meta.eid)?.get(onSnapshot.eid);
|
|
111
|
+
if (declaration === undefined) {
|
|
112
|
+
return CLONE_PUBLIC;
|
|
113
|
+
}
|
|
114
|
+
const policy = declaration._target();
|
|
115
|
+
if (policy === undefined || policy.eid === world.component(ClonePublic).eid) {
|
|
116
|
+
return CLONE_PUBLIC;
|
|
117
|
+
}
|
|
118
|
+
if (policy.eid !== world.component(CustomSnapshot).eid) {
|
|
119
|
+
return NO_SNAPSHOT;
|
|
120
|
+
}
|
|
121
|
+
if (declaration.capture === undefined || declaration.materialize === undefined) {
|
|
122
|
+
throw new Error(`OnSnapshot policy for ${meta.Class.name} selects CustomSnapshot without capture and materialize callbacks`);
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
kind: "custom",
|
|
126
|
+
capture: declaration.capture,
|
|
127
|
+
materialize: declaration.materialize,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=snapshot_types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot_types.js","sourceRoot":"","sources":["../../src/modules/snapshot_types.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,uBAAuB;AACvB,EAAE;AACF,iFAAiF;AACjF,4EAA4E;AAC5E,iFAAiF;AACjF,0EAA0E;AAC1E,4BAA4B;AAG5B,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAoBpD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,OAAO,UAAW,SAAQ,YAAY;IAA5C;;QACE;;;WAGG;QACI,YAAO,GAAgC,SAAS,CAAC;QAExD;;;WAGG;QACI,gBAAW,GAAoC,SAAS,CAAC;IAClE,CAAC;CAAA;AAED;;;;;;;;GAQG;AACH,MAAM,OAAO,WAAW;CAAG;AAE3B;;;;;;;;GAQG;AACH,MAAM,OAAO,YAAY;CAAG;AAE5B;;;;;;GAMG;AACH,MAAM,OAAO,cAAc;CAAG;AAkB9B,+EAA+E;AAC/E,MAAM,CAAC,MAAM,YAAY,GAA2B,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAEtE,6EAA6E;AAC7E,MAAM,CAAC,MAAM,WAAW,GAA2B,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAEpE;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CACpC,SAAiB,EACjB,MAA0B,EAC1B,OAAyB,EACzB,WAAiC;IAEjC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;IAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACvC,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAClC,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE;QACxB,OAAO,EAAE,MAAM,KAAK,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;QACxD,WAAW,EAAE,MAAM,KAAK,cAAc,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;KACjE,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAY,EAAE,IAAmB;IACtE,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAC/C,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,GAAG,CAA2B,CAAC;IAC7F,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC;IACrC,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,KAAK,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,GAAG,EAAE,CAAC;QAC5E,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,IAAI,MAAM,CAAC,GAAG,KAAK,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,GAAG,EAAE,CAAC;QACvD,OAAO,WAAW,CAAC;IACrB,CAAC;IACD,IAAI,WAAW,CAAC,OAAO,KAAK,SAAS,IAAI,WAAW,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QAC/E,MAAM,IAAI,KAAK,CACb,yBAAyB,IAAI,CAAC,KAAK,CAAC,IAAI,mEAAmE,CAC5G,CAAC;IACJ,CAAC;IACD,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,WAAW,CAAC,OAAO;QAC5B,WAAW,EAAE,WAAW,CAAC,WAAW;KACrC,CAAC;AACJ,CAAC"}
|
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vworlds/vecs",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.46",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"type": "module",
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"prepack": "npm run build",
|
|
16
16
|
"build": "npm run clean && npm run compile",
|
|
17
17
|
"compile": "tsc -p tsconfig.build.json && cp \"./package.json\" ./dist/",
|
|
18
|
-
"bench:ecs": "NODE_OPTIONS=--max-old-space-size=32768 RUN_VECS_ECS_BENCH=1 vitest run tests/ecs.bench.test.ts --pool=forks --
|
|
18
|
+
"bench:ecs": "NODE_OPTIONS=--max-old-space-size=32768 RUN_VECS_ECS_BENCH=1 vitest run tests/ecs.bench.test.ts --pool=forks --maxWorkers=1 --reporter=default",
|
|
19
19
|
"test": "vitest run",
|
|
20
20
|
"test:watch": "vitest",
|
|
21
21
|
"lint": "eslint \"src/**/*.ts\" \"tests/**/*.ts\" --no-error-on-unmatched-pattern",
|
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
import { type ComponentInstance, type ComponentType } from "../component.js";
|
|
2
2
|
import { Entity, type EID } from "../entity/index.js";
|
|
3
|
-
import { type InjectElement, type InjectSnapshot, type
|
|
3
|
+
import { type InjectElement, type InjectSnapshot, type InjectTuple } from "../inject.js";
|
|
4
4
|
import type { InjectCallbackOptions, OrderByOptions, UpdateCallbackOptions } from "./options.js";
|
|
5
5
|
import { OrderedSet } from "../util/ordered_set.js";
|
|
6
6
|
import { type World } from "../world/index.js";
|
|
7
7
|
export type EntityCallback = (e: Entity, snapshot?: InjectSnapshot) => void;
|
|
8
|
+
export type InjectSnapshotter = (e: Entity) => InjectSnapshot;
|
|
8
9
|
export type ComponentCallback = (e: Entity, c: ComponentInstance) => void;
|
|
9
|
-
|
|
10
|
+
/**
|
|
11
|
+
* Build the shared enter/exit callback wrapper: resolve the injected tuple live
|
|
12
|
+
* when no snapshot is provided, or replay a snapshot captured when the event
|
|
13
|
+
* was routed (a System's inbox-queued enter/exit).
|
|
14
|
+
*/
|
|
15
|
+
export declare function makeEnterExitCallback(world: World, arg0: InjectTuple | InjectCallbackOptions<InjectTuple> | ((e: Entity) => void), arg1?: Function): {
|
|
10
16
|
callback: EntityCallback;
|
|
11
|
-
|
|
12
|
-
};
|
|
13
|
-
export declare function makeExitCallback(world: World, arg0: InjectTuple | InjectCallbackOptions<InjectTuple> | ((e: Entity) => void), arg1?: (...args: any[]) => void): {
|
|
14
|
-
callback: EntityCallback;
|
|
15
|
-
snapshotTypes: InjectSnapshotTypes | undefined;
|
|
17
|
+
snapshotter: InjectSnapshotter | undefined;
|
|
16
18
|
};
|
|
17
19
|
export declare function makeSortedEntitySet(world: World, arg0: readonly InjectElement[] | OrderByOptions<InjectTuple>, arg1?: Function): {
|
|
18
20
|
set: OrderedSet<Entity>;
|
package/dist/query/callbacks.js
CHANGED
|
@@ -1,69 +1,55 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getInjected, getInjectedWithSrc, injectArity, injectWatchEids, Iter, mapInject, replayInjectedSnapshot, replayInjectedSnapshotWithSrc, snapshotInjected, wantsIter, } from "../inject.js";
|
|
2
2
|
import { OrderedSet } from "../util/ordered_set.js";
|
|
3
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Build the shared enter/exit callback wrapper: resolve the injected tuple live
|
|
5
|
+
* when no snapshot is provided, or replay a snapshot captured when the event
|
|
6
|
+
* was routed (a System's inbox-queued enter/exit).
|
|
7
|
+
*/
|
|
8
|
+
export function makeEnterExitCallback(world, arg0, arg1) {
|
|
4
9
|
if (typeof arg0 === "function") {
|
|
5
10
|
// Wrap so the drain's extra snapshot argument never leaks to a plain
|
|
6
|
-
// (non-injecting)
|
|
11
|
+
// (non-injecting) callback — it observes only the entity.
|
|
7
12
|
const fn = arg0;
|
|
8
|
-
return { callback: (e) => fn(e),
|
|
13
|
+
return { callback: (e) => fn(e), snapshotter: undefined };
|
|
9
14
|
}
|
|
10
15
|
const { components, useIter } = normalizeInjectCallbackArgs(arg0);
|
|
11
16
|
const cb = arg1;
|
|
12
17
|
const inject = mapInject(world, components);
|
|
13
|
-
// Mirror exit: capture the injected components so a System's inbox-queued enter
|
|
14
|
-
// still resolves them even if the entity is destroyed before the inbox drains.
|
|
15
|
-
// Snapshots store component references, so live entities see current values.
|
|
16
|
-
const snapshotTypes = directInjectSnapshotTypes(inject);
|
|
17
18
|
const arity = injectArity(inject);
|
|
19
|
+
const snapshotter = (e) => snapshotInjected(e, inject, arity);
|
|
18
20
|
if (useIter) {
|
|
19
|
-
const callback = (e,
|
|
21
|
+
const callback = (e, snapshot) => {
|
|
20
22
|
const injected = new Array(arity);
|
|
21
23
|
const it = new Iter(arity);
|
|
22
24
|
it.entity = e;
|
|
23
|
-
|
|
25
|
+
if (snapshot === undefined) {
|
|
26
|
+
getInjectedWithSrc(e, inject, injected, it.src, true);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
replayInjectedSnapshotWithSrc(inject, snapshot, true, injected, it.src);
|
|
30
|
+
}
|
|
24
31
|
cb(it, injected);
|
|
25
32
|
};
|
|
26
|
-
return { callback,
|
|
33
|
+
return { callback, snapshotter };
|
|
27
34
|
}
|
|
28
|
-
const callback = (e,
|
|
35
|
+
const callback = (e, snapshot) => {
|
|
29
36
|
const injected = new Array(arity);
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
if (typeof arg0 === "function") {
|
|
37
|
-
return { callback: arg0, snapshotTypes: undefined };
|
|
38
|
-
}
|
|
39
|
-
const { components, useIter } = normalizeInjectCallbackArgs(arg0);
|
|
40
|
-
const cb = arg1;
|
|
41
|
-
const inject = mapInject(world, components);
|
|
42
|
-
const snapshotTypes = directInjectSnapshotTypes(inject);
|
|
43
|
-
const arity = injectArity(inject);
|
|
44
|
-
if (useIter) {
|
|
45
|
-
const callback = (e, exitSnapshot) => {
|
|
46
|
-
const injected = new Array(arity);
|
|
47
|
-
const it = new Iter(arity);
|
|
48
|
-
it.entity = e;
|
|
49
|
-
getInjectedWithSrc(e, inject, injected, it.src, true, exitSnapshot);
|
|
50
|
-
cb(it, injected);
|
|
51
|
-
};
|
|
52
|
-
return { callback, snapshotTypes };
|
|
53
|
-
}
|
|
54
|
-
const callback = (e, exitSnapshot) => {
|
|
55
|
-
const injected = new Array(arity);
|
|
56
|
-
getInjected(e, inject, true, injected, exitSnapshot);
|
|
37
|
+
if (snapshot === undefined) {
|
|
38
|
+
getInjected(e, inject, true, injected);
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
replayInjectedSnapshot(inject, snapshot, true, injected);
|
|
42
|
+
}
|
|
57
43
|
cb(e, injected);
|
|
58
44
|
};
|
|
59
|
-
return { callback,
|
|
45
|
+
return { callback, snapshotter };
|
|
60
46
|
}
|
|
61
47
|
export function makeSortedEntitySet(world, arg0, arg1) {
|
|
62
48
|
const { components, useIter } = normalizeInjectCallbackArgs(arg0);
|
|
63
49
|
const cb = arg1;
|
|
64
50
|
const inject = mapInject(world, components);
|
|
65
51
|
const arity = injectArity(inject);
|
|
66
|
-
const watchEids =
|
|
52
|
+
const watchEids = injectWatchEids(inject);
|
|
67
53
|
if (useIter) {
|
|
68
54
|
const itA = new Iter(arity);
|
|
69
55
|
const itB = new Iter(arity);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"callbacks.js","sourceRoot":"","sources":["../../src/query/callbacks.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"callbacks.js","sourceRoot":"","sources":["../../src/query/callbacks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { _resolveRelationship } from "../dsl.js";
|
|
2
2
|
import { Entity } from "../entity/index.js";
|
|
3
|
-
import {
|
|
3
|
+
import { getInjected, injectArity, injectWatchEids, mapInject, } from "../inject.js";
|
|
4
4
|
import { Grouping } from "./grouping.js";
|
|
5
5
|
import { registerGroupedQueryPrototype } from "./grouped_query_registry.js";
|
|
6
6
|
import { Query } from "./query.js";
|
|
@@ -36,23 +36,23 @@ export class GroupedQuery extends Query {
|
|
|
36
36
|
if (this._grouping !== undefined) {
|
|
37
37
|
throw new Error(`query '${this.name}' is already grouped`);
|
|
38
38
|
}
|
|
39
|
-
let
|
|
39
|
+
let keysOf;
|
|
40
40
|
let watchEids;
|
|
41
41
|
if (typeof arg1 === "function") {
|
|
42
42
|
const components = arg0;
|
|
43
43
|
const inject = mapInject(this.world, components);
|
|
44
44
|
const arity = injectArity(inject);
|
|
45
45
|
const resolved = new Array(arity);
|
|
46
|
-
|
|
46
|
+
keysOf = (e) => {
|
|
47
47
|
getInjected(e, inject, false, resolved);
|
|
48
|
-
return arg1(e, resolved);
|
|
48
|
+
return [arg1(e, resolved)];
|
|
49
49
|
};
|
|
50
|
-
watchEids =
|
|
50
|
+
watchEids = injectWatchEids(inject);
|
|
51
51
|
this._composeGroupMembership(components);
|
|
52
52
|
}
|
|
53
53
|
else {
|
|
54
54
|
const relEid = _resolveRelationship(arg0, this.world);
|
|
55
|
-
|
|
55
|
+
keysOf = (e) => e.targets(relEid);
|
|
56
56
|
watchEids = [relEid];
|
|
57
57
|
this._composeGroupMembership([arg0]);
|
|
58
58
|
}
|
|
@@ -60,7 +60,7 @@ export class GroupedQuery extends Query {
|
|
|
60
60
|
this._watchlistBitmask.add(ceid);
|
|
61
61
|
}
|
|
62
62
|
this.track();
|
|
63
|
-
this._grouping = new Grouping(this.world,
|
|
63
|
+
this._grouping = new Grouping(this.world, keysOf, watchEids);
|
|
64
64
|
return this;
|
|
65
65
|
}
|
|
66
66
|
/** @internal */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grouped_query.js","sourceRoot":"","sources":["../../src/query/grouped_query.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,MAAM,EAAY,MAAM,oBAAoB,CAAC;AACtD,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"grouped_query.js","sourceRoot":"","sources":["../../src/query/grouped_query.ts"],"names":[],"mappings":"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"}
|
package/dist/query/grouping.d.ts
CHANGED
|
@@ -4,12 +4,12 @@ import { Group } from "./group.js";
|
|
|
4
4
|
export declare class Grouping {
|
|
5
5
|
readonly groups: Map<unknown, Group<unknown, []>>;
|
|
6
6
|
private readonly _entityKeys;
|
|
7
|
-
private readonly
|
|
7
|
+
private readonly _keysOf;
|
|
8
8
|
private readonly _watchEids;
|
|
9
9
|
private readonly _world;
|
|
10
10
|
private _onGroupEnter;
|
|
11
11
|
private _onGroupExit;
|
|
12
|
-
constructor(world: World,
|
|
12
|
+
constructor(world: World, keysOf: (e: Entity) => Iterable<unknown>, watchEids: Iterable<EID>);
|
|
13
13
|
clear(): void;
|
|
14
14
|
enter(e: Entity): void;
|
|
15
15
|
exit(e: Entity): void;
|
|
@@ -20,5 +20,9 @@ export declare class Grouping {
|
|
|
20
20
|
setOnGroupExit(callback: (key: unknown, group: Group) => void): void;
|
|
21
21
|
private _addToBucket;
|
|
22
22
|
private _assign;
|
|
23
|
+
private _assignOne;
|
|
24
|
+
private _diffKeys;
|
|
25
|
+
private _forEachKey;
|
|
26
|
+
private _hasKey;
|
|
23
27
|
private _removeFromBucket;
|
|
24
28
|
}
|
package/dist/query/grouping.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Group } from "./group.js";
|
|
2
2
|
export class Grouping {
|
|
3
|
-
constructor(world,
|
|
3
|
+
constructor(world, keysOf, watchEids) {
|
|
4
4
|
this.groups = new Map();
|
|
5
5
|
this._entityKeys = new Map();
|
|
6
6
|
this._world = world;
|
|
7
|
-
this.
|
|
7
|
+
this._keysOf = keysOf;
|
|
8
8
|
this._watchEids = new Set(watchEids);
|
|
9
9
|
}
|
|
10
10
|
clear() {
|
|
@@ -12,12 +12,12 @@ export class Grouping {
|
|
|
12
12
|
this._entityKeys.clear();
|
|
13
13
|
}
|
|
14
14
|
enter(e) {
|
|
15
|
-
this._assign(e, this.
|
|
15
|
+
this._assign(e, this._keysOf(e));
|
|
16
16
|
}
|
|
17
17
|
exit(e) {
|
|
18
|
-
const
|
|
19
|
-
if (
|
|
20
|
-
this._removeFromBucket(e, key);
|
|
18
|
+
const keys = this._entityKeys.get(e);
|
|
19
|
+
if (keys !== undefined) {
|
|
20
|
+
this._forEachKey(keys, (key) => this._removeFromBucket(e, key));
|
|
21
21
|
}
|
|
22
22
|
this._entityKeys.delete(e);
|
|
23
23
|
}
|
|
@@ -31,7 +31,7 @@ export class Grouping {
|
|
|
31
31
|
if (!this._watchEids.has(ceid)) {
|
|
32
32
|
return;
|
|
33
33
|
}
|
|
34
|
-
this._assign(e, this.
|
|
34
|
+
this._assign(e, this._keysOf(e));
|
|
35
35
|
}
|
|
36
36
|
setOnGroupEnter(callback) {
|
|
37
37
|
this._onGroupEnter = callback;
|
|
@@ -50,21 +50,90 @@ export class Grouping {
|
|
|
50
50
|
}
|
|
51
51
|
group._add(e);
|
|
52
52
|
}
|
|
53
|
-
_assign(e,
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
|
|
53
|
+
_assign(e, keys) {
|
|
54
|
+
const oldKeys = this._entityKeys.get(e);
|
|
55
|
+
let first = undefined;
|
|
56
|
+
let newKeys = undefined;
|
|
57
|
+
let count = 0;
|
|
58
|
+
for (const key of keys) {
|
|
59
|
+
if (key === undefined) {
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
count++;
|
|
63
|
+
if (count === 1) {
|
|
64
|
+
first = key;
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
(newKeys ?? (newKeys = new Set([first]))).add(key);
|
|
68
|
+
}
|
|
57
69
|
}
|
|
58
|
-
if (
|
|
59
|
-
this.
|
|
70
|
+
if (newKeys !== undefined) {
|
|
71
|
+
this._diffKeys(e, oldKeys, newKeys);
|
|
72
|
+
this._entityKeys.set(e, newKeys);
|
|
73
|
+
return;
|
|
60
74
|
}
|
|
61
|
-
if (
|
|
75
|
+
if (count === 0) {
|
|
76
|
+
if (oldKeys !== undefined) {
|
|
77
|
+
this._forEachKey(oldKeys, (key) => this._removeFromBucket(e, key));
|
|
78
|
+
}
|
|
62
79
|
this._entityKeys.delete(e);
|
|
63
80
|
return;
|
|
64
81
|
}
|
|
65
|
-
this.
|
|
82
|
+
this._assignOne(e, oldKeys, first);
|
|
83
|
+
}
|
|
84
|
+
_assignOne(e, oldKeys, newKey) {
|
|
85
|
+
if (oldKeys === undefined) {
|
|
86
|
+
this._addToBucket(e, newKey);
|
|
87
|
+
this._entityKeys.set(e, newKey);
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
if (oldKeys instanceof Set) {
|
|
91
|
+
oldKeys.forEach((key) => {
|
|
92
|
+
if (key !== newKey) {
|
|
93
|
+
this._removeFromBucket(e, key);
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
if (!oldKeys.has(newKey)) {
|
|
97
|
+
this._addToBucket(e, newKey);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
else if (oldKeys !== newKey) {
|
|
101
|
+
this._removeFromBucket(e, oldKeys);
|
|
102
|
+
this._addToBucket(e, newKey);
|
|
103
|
+
}
|
|
66
104
|
this._entityKeys.set(e, newKey);
|
|
67
105
|
}
|
|
106
|
+
_diffKeys(e, oldKeys, newKeys) {
|
|
107
|
+
this._forEachKey(oldKeys, (key) => {
|
|
108
|
+
if (!newKeys.has(key)) {
|
|
109
|
+
this._removeFromBucket(e, key);
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
newKeys.forEach((key) => {
|
|
113
|
+
if (!this._hasKey(oldKeys, key)) {
|
|
114
|
+
this._addToBucket(e, key);
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
_forEachKey(keys, fn) {
|
|
119
|
+
if (keys === undefined) {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
if (keys instanceof Set) {
|
|
123
|
+
keys.forEach(fn);
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
fn(keys);
|
|
127
|
+
}
|
|
128
|
+
_hasKey(keys, key) {
|
|
129
|
+
if (keys === undefined) {
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
if (keys instanceof Set) {
|
|
133
|
+
return keys.has(key);
|
|
134
|
+
}
|
|
135
|
+
return keys === key;
|
|
136
|
+
}
|
|
68
137
|
_removeFromBucket(e, key) {
|
|
69
138
|
const group = this.groups.get(key);
|
|
70
139
|
if (group === undefined) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grouping.js","sourceRoot":"","sources":["../../src/query/grouping.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"grouping.js","sourceRoot":"","sources":["../../src/query/grouping.ts"],"names":[],"mappings":"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"}
|
package/dist/query/query.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type ComponentClass, type ComponentInstance, type ComponentRef, type ComponentType } from "../component.js";
|
|
1
|
+
import { type ComponentClass, type ComponentInstance, type ComponentRef, type ComponentType, type Relationship } from "../component.js";
|
|
2
2
|
import { type ExtractSpecsRequired, type QueryDSL, type QuerySpec } from "../dsl.js";
|
|
3
3
|
import { Entity, type EID } from "../entity/index.js";
|
|
4
4
|
import { Iter, type FanInjectTuple, type InjectTuple, type MaybeResolvedInjectTuple, type RequiredResolvedInjectTuple } from "../inject.js";
|
|
@@ -69,9 +69,9 @@ export declare class Query<R extends ComponentType[] = []> implements TermConsum
|
|
|
69
69
|
relationship: ComponentRef;
|
|
70
70
|
}): GroupedQuery<Entity, R>;
|
|
71
71
|
ignoreSource(source: QueryDSL | Query): this;
|
|
72
|
-
add<C extends ComponentClass>(Class: C): this;
|
|
73
|
-
add(ceid: EID): this;
|
|
74
|
-
add(entity: Entity): this;
|
|
72
|
+
add<C extends ComponentClass>(Class: C, ...target: InstanceType<C> extends Relationship ? [target: ComponentRef] : []): this;
|
|
73
|
+
add(ceid: EID, target?: ComponentRef): this;
|
|
74
|
+
add(entity: Entity, target?: ComponentRef): this;
|
|
75
75
|
remove<C extends ComponentType>(Class: C): this;
|
|
76
76
|
remove(ceid: EID): this;
|
|
77
77
|
remove(entity: Entity): this;
|