@vworlds/vecs 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.
- package/README.md +29 -778
- package/dist/component.d.ts +1 -1
- package/dist/component.js +1 -1
- package/dist/component.js.map +1 -1
- package/dist/component_meta.d.ts +5 -1
- package/dist/component_meta.js +10 -0
- package/dist/component_meta.js.map +1 -1
- package/dist/dsl.d.ts +23 -2
- package/dist/dsl.js +21 -18
- package/dist/dsl.js.map +1 -1
- package/dist/entity/entity.base.d.ts +2 -18
- package/dist/entity/entity.base.js +2 -20
- package/dist/entity/entity.base.js.map +1 -1
- package/dist/entity/entity.components.d.ts +1 -0
- package/dist/entity/entity.components.js +50 -0
- package/dist/entity/entity.components.js.map +1 -1
- package/dist/entity/entity.d.ts +8 -0
- package/dist/entity/entity.js +21 -0
- package/dist/entity/entity.js.map +1 -1
- package/dist/entity/entity.lifecycle.d.ts +3 -3
- package/dist/entity/entity.lifecycle.js +6 -9
- package/dist/entity/entity.lifecycle.js.map +1 -1
- package/dist/entity/entity.relationships.d.ts +1 -1
- package/dist/entity/entity.relationships.js +3 -3
- package/dist/entity/entity.relationships.js.map +1 -1
- package/dist/filter.d.ts +1 -0
- package/dist/filter.js +3 -2
- package/dist/filter.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/inject.d.ts +3 -2
- package/dist/inject.js.map +1 -1
- package/dist/modules/implements.d.ts +14 -0
- package/dist/modules/implements.js +98 -0
- package/dist/modules/implements.js.map +1 -0
- package/dist/modules/relationships.d.ts +1 -1
- package/dist/modules/relationships.js +2 -2
- package/dist/package.json +1 -4
- package/dist/query/callbacks.d.ts +6 -2
- package/dist/query/callbacks.js +5 -2
- package/dist/query/callbacks.js.map +1 -1
- package/dist/query/grouped_query.js +1 -1
- package/dist/query/query.d.ts +14 -1
- package/dist/query/query.js +26 -15
- package/dist/query/query.js.map +1 -1
- package/dist/system.d.ts +5 -4
- package/dist/system.js +17 -6
- package/dist/system.js.map +1 -1
- package/dist/terms/build.js +7 -5
- package/dist/terms/build.js.map +1 -1
- package/dist/util/array_map.d.ts +70 -12
- package/dist/util/array_map.js +113 -26
- package/dist/util/array_map.js.map +1 -1
- package/dist/util/bitset.js +0 -17
- package/dist/util/bitset.js.map +1 -1
- package/dist/util/events.d.ts +42 -12
- package/dist/util/events.js +94 -43
- package/dist/util/events.js.map +1 -1
- package/dist/util/ordered_set.js +43 -19
- package/dist/util/ordered_set.js.map +1 -1
- package/dist/world/world.deferred.js +2 -0
- package/dist/world/world.deferred.js.map +1 -1
- package/dist/world/world.entities.d.ts +8 -1
- package/dist/world/world.entities.js +25 -6
- package/dist/world/world.entities.js.map +1 -1
- package/dist/world/world.js +8 -1
- package/dist/world/world.js.map +1 -1
- package/dist/world/world.queries.js +6 -1
- package/dist/world/world.queries.js.map +1 -1
- package/dist/world/world.storage.d.ts +2 -2
- package/dist/world/world.storage.js +6 -3
- package/dist/world/world.storage.js.map +1 -1
- package/docs/README.md +50 -0
- package/docs/components.md +267 -0
- package/docs/concepts.md +86 -0
- package/docs/design-guide.md +506 -0
- package/docs/entities.md +177 -0
- package/docs/execution-model.md +173 -0
- package/docs/getting-started.md +215 -0
- package/docs/glossary.md +113 -0
- package/docs/modules.md +108 -0
- package/docs/queries-and-filters.md +187 -0
- package/docs/relationships.md +149 -0
- package/docs/systems.md +311 -0
- package/docs/utilities.md +139 -0
- package/package.json +1 -4
|
@@ -3,8 +3,8 @@ import { Components } from "./entity.components.js";
|
|
|
3
3
|
export class Lifecycle extends Components {
|
|
4
4
|
/**
|
|
5
5
|
* @internal Apply a `Destroy` command: fire `_exit` on every query, then
|
|
6
|
-
* `onRemove` on every component,
|
|
7
|
-
*
|
|
6
|
+
* `onRemove` on every component, unregister from the world, and apply
|
|
7
|
+
* incoming relationship cleanup policies.
|
|
8
8
|
*/
|
|
9
9
|
_destroy() {
|
|
10
10
|
if (this._destroyed) {
|
|
@@ -47,10 +47,7 @@ export class Lifecycle extends Components {
|
|
|
47
47
|
});
|
|
48
48
|
this._dirtyComponentBitmask.clear();
|
|
49
49
|
this._queries.clear();
|
|
50
|
-
|
|
51
|
-
this._events.emit("destroy");
|
|
52
|
-
this._events.removeAllListeners("destroy");
|
|
53
|
-
}
|
|
50
|
+
this._components.clear();
|
|
54
51
|
if (entityMeta && entityMeta.usageCount === 0 && entityMeta.Class !== Object) {
|
|
55
52
|
this.world._classRegistry.delete(entityMeta.Class);
|
|
56
53
|
}
|
|
@@ -60,9 +57,9 @@ export class Lifecycle extends Components {
|
|
|
60
57
|
/**
|
|
61
58
|
* Destroy this entity.
|
|
62
59
|
*
|
|
63
|
-
* Each component fires its `onRemove` hook, the
|
|
64
|
-
*
|
|
65
|
-
*
|
|
60
|
+
* Each component fires its `onRemove` hook, the entity is unregistered from
|
|
61
|
+
* the world, and incoming relationship cleanup policies are applied. After
|
|
62
|
+
* destruction the entity must not be used.
|
|
66
63
|
*/
|
|
67
64
|
destroy() {
|
|
68
65
|
const entityMeta = this._meta;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity.lifecycle.js","sourceRoot":"","sources":["../../src/entity/entity.lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAIrD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGpD,MAAM,OAAO,SAAU,SAAQ,UAAU;IACvC;;;;OAIG;IACI,QAAQ;QACb,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;QAC9B,4EAA4E;QAC5E,yEAAyE;QACzE,sDAAsD;QACtD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/D,IAAI,UAAU,CAAC,UAAU,GAAG,SAAS,EAAE,CAAC;gBACtC,IAAI,UAAU,CAAC,QAAQ,KAAK,aAAa,CAAC,KAAK,EAAE,CAAC;oBAChD,oEAAoE;oBACpE,mEAAmE;oBACnE,gEAAgE;oBAChE,kEAAkE;oBAClE,+CAA+C;oBAC/C,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;oBACxB,OAAO;gBACT,CAAC;gBACD,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,IAAyB,CAAC;QACzC,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAE1C,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE;YACnC,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;YACnD,IAAI,aAAa,CAAC,cAAc,EAAE,CAAC;gBACjC,IAAI,CAAC,eAAe,CAAE,CAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACzD,CAAC;YACD,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YACtD,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACjD,aAAa,CAAC,eAAe,EAAE,CAAC;YAChC,MAAM,cAAc,GAAG,aAAa,CAAC,iBAAiB,CAAC;YACvD,IAAI,cAAc,EAAE,CAAC;gBACnB,cAAc,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QAEtB,IAAI,
|
|
1
|
+
{"version":3,"file":"entity.lifecycle.js","sourceRoot":"","sources":["../../src/entity/entity.lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import type { Entity } from "./entity.js";
|
|
|
3
3
|
import { Queries } from "./entity.queries.js";
|
|
4
4
|
export declare class Relationships extends Queries {
|
|
5
5
|
/** Return this entity's target through relationship `ref`, if present. */
|
|
6
|
-
|
|
6
|
+
target(rel: ComponentRef): Entity | undefined;
|
|
7
7
|
/** Return entities targeting this one through relationship `ref`. */
|
|
8
8
|
children(ref: ComponentRef): ReadonlySet<Entity>;
|
|
9
9
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { CleanupPolicy, } from "../component_meta.js";
|
|
2
|
-
import {
|
|
2
|
+
import { IterableArrayMap } from "../util/array_map.js";
|
|
3
3
|
import { DenseSet } from "../util/dense_set.js";
|
|
4
4
|
import { Queries } from "./entity.queries.js";
|
|
5
5
|
export class Relationships extends Queries {
|
|
6
6
|
/** Return this entity's target through relationship `ref`, if present. */
|
|
7
|
-
|
|
7
|
+
target(rel) {
|
|
8
8
|
const relEid = typeof rel === "number" ? rel : this.world.entity(rel).eid;
|
|
9
9
|
return this._components.get(relEid)?.target;
|
|
10
10
|
}
|
|
@@ -28,7 +28,7 @@ export class Relationships extends Queries {
|
|
|
28
28
|
let sources = target._incoming?.get(relEid);
|
|
29
29
|
if (!sources) {
|
|
30
30
|
sources = new DenseSet();
|
|
31
|
-
(target._incoming ?? (target._incoming = new
|
|
31
|
+
(target._incoming ?? (target._incoming = new IterableArrayMap())).set(relEid, sources);
|
|
32
32
|
}
|
|
33
33
|
sources.add(this);
|
|
34
34
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity.relationships.js","sourceRoot":"","sources":["../../src/entity/entity.relationships.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,GAId,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"entity.relationships.js","sourceRoot":"","sources":["../../src/entity/entity.relationships.ts"],"names":[],"mappings":"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"}
|
package/dist/filter.d.ts
CHANGED
|
@@ -42,6 +42,7 @@ export declare class Filter<R extends ComponentType[] = []> {
|
|
|
42
42
|
readonly world: World;
|
|
43
43
|
private readonly _belongs;
|
|
44
44
|
private readonly _dsl;
|
|
45
|
+
private readonly _termKey;
|
|
45
46
|
constructor(
|
|
46
47
|
/** World this filter reads entities from. */
|
|
47
48
|
world: World, dsl: QueryDSL);
|
package/dist/filter.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { _compile } from "./dsl.js";
|
|
1
|
+
import { _compile, getDSLCacheKey } from "./dsl.js";
|
|
2
2
|
import { isCursorMarker, makeInjectedInvoker, wantsIter, } from "./inject.js";
|
|
3
3
|
/**
|
|
4
4
|
* A non-reactive, one-shot entity filter.
|
|
@@ -40,9 +40,10 @@ export class Filter {
|
|
|
40
40
|
this.world = world;
|
|
41
41
|
this._dsl = dsl;
|
|
42
42
|
this._belongs = _compile(world, dsl);
|
|
43
|
+
this._termKey = getDSLCacheKey(dsl, world);
|
|
43
44
|
}
|
|
44
45
|
get rootTerm() {
|
|
45
|
-
return this.world.
|
|
46
|
+
return this.world._getCachedTermByKey(this._termKey);
|
|
46
47
|
}
|
|
47
48
|
forEach(arg0, arg1, arg2) {
|
|
48
49
|
// Bare `forEach(callback)`: a function that is not a cursor marker.
|
package/dist/filter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter.js","sourceRoot":"","sources":["../src/filter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAsC,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"filter.js","sourceRoot":"","sources":["../src/filter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAsC,MAAM,UAAU,CAAC;AAExF,OAAO,EACL,cAAc,EAEd,mBAAmB,EACnB,SAAS,GAIV,MAAM,aAAa,CAAC;AAErB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,OAAO,MAAM;IAKjB;IACE,6CAA6C;IAC7B,KAAY,EAC5B,GAAa;QADG,UAAK,GAAL,KAAK,CAAO;QAG5B,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvD,CAAC;IAqDM,OAAO,CAAC,IAAa,EAAE,IAAc,EAAE,IAAc;QAC1D,oEAAoE;QACpE,IAAI,OAAO,IAAI,KAAK,UAAU,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;YACxD,MAAM,QAAQ,GAAG,IAA2B,CAAC;YAC7C,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE;gBACpB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC/B,CAAC,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,UAAU,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAgC,CAAC;QACvF,MAAM,QAAQ,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAG3C,CAAC;QACV,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE;YACpB,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC9E,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,aAAa,CAAC,QAA6B;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,IAAI,QAAQ,EAAE,CAAC;YACb,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;gBAC9B,QAAQ,CAAC,MAAM,CAAC,CAAC;YACnB,CAAC;YACD,OAAO;QACT,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YAChC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrB,QAAQ,CAAC,CAAC,CAAC,CAAC;YACd,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
|
package/dist/index.d.ts
CHANGED
|
@@ -6,16 +6,18 @@ export type { DownInject, FanInjectElement, FanInjectTuple, InjectElement, Injec
|
|
|
6
6
|
export { DEFAULT_POOLS, World, type WorldOptions } from "./world/index.js";
|
|
7
7
|
export { Filter } from "./filter.js";
|
|
8
8
|
export { ChildOf, DependsOn, SilenceSource } from "./modules/relationships.js";
|
|
9
|
-
export { CleanupPolicy, Component, Relationship, type ComponentInstance, type ComponentClass, type ComponentMeta, type ComponentRef, } from "./component.js";
|
|
9
|
+
export { CleanupPolicy, Component, Implements, Relationship, type ComponentInstance, type ComponentClass, type ComponentMeta, type ComponentRef, } from "./component.js";
|
|
10
10
|
export { Entity, type EID, type EntityClass, Identity } from "./entity/index.js";
|
|
11
11
|
export { Module, type ModuleConfig } from "./module.js";
|
|
12
12
|
export { IdentityModule } from "./modules/identity.js";
|
|
13
|
+
export { ImplementsModule } from "./modules/implements.js";
|
|
13
14
|
export { Singleton, SingletonModule } from "./modules/singleton.js";
|
|
14
15
|
export { Traversable, RelationshipsModule } from "./modules/relationships.js";
|
|
15
16
|
export { BUILTIN_PIPELINE_PHASES, insertPhaseAfter, ON_LOAD, ON_STORE, ON_UPDATE, ON_VALIDATE, POST_LOAD, POST_UPDATE, PRE_STORE, PRE_UPDATE, Phase, PipelineModule, } from "./modules/pipeline.js";
|
|
16
17
|
export { getDSLKey } from "./dsl.js";
|
|
17
18
|
export { Term, TermEventKind, type TermConsumer } from "./terms/term.js";
|
|
18
19
|
export { IntervalTickSource, RateTickSource, type ITickSource } from "./timer.js";
|
|
19
|
-
export { ArrayMap } from "./util/array_map.js";
|
|
20
|
+
export { ArrayMap, IterableArrayMap } from "./util/array_map.js";
|
|
20
21
|
export { Bitset } from "./util/bitset.js";
|
|
22
|
+
export { Events, type EventListener, type EventNames } from "./util/events.js";
|
|
21
23
|
export { DEFAULT_ID_REUSE_WAIT_FRAMES, type IdPoolConfig } from "./util/id_pool.js";
|
package/dist/index.js
CHANGED
|
@@ -4,17 +4,19 @@ export { Iter } from "./inject.js";
|
|
|
4
4
|
export { DEFAULT_POOLS, World } from "./world/index.js";
|
|
5
5
|
export { Filter } from "./filter.js";
|
|
6
6
|
export { ChildOf, DependsOn, SilenceSource } from "./modules/relationships.js";
|
|
7
|
-
export { CleanupPolicy, Component, Relationship, } from "./component.js";
|
|
7
|
+
export { CleanupPolicy, Component, Implements, Relationship, } from "./component.js";
|
|
8
8
|
export { Entity, Identity } from "./entity/index.js";
|
|
9
9
|
export { Module } from "./module.js";
|
|
10
10
|
export { IdentityModule } from "./modules/identity.js";
|
|
11
|
+
export { ImplementsModule } from "./modules/implements.js";
|
|
11
12
|
export { Singleton, SingletonModule } from "./modules/singleton.js";
|
|
12
13
|
export { Traversable, RelationshipsModule } from "./modules/relationships.js";
|
|
13
14
|
export { BUILTIN_PIPELINE_PHASES, insertPhaseAfter, ON_LOAD, ON_STORE, ON_UPDATE, ON_VALIDATE, POST_LOAD, POST_UPDATE, PRE_STORE, PRE_UPDATE, Phase, PipelineModule, } from "./modules/pipeline.js";
|
|
14
15
|
export { getDSLKey } from "./dsl.js";
|
|
15
16
|
export { Term } from "./terms/term.js";
|
|
16
17
|
export { IntervalTickSource, RateTickSource } from "./timer.js";
|
|
17
|
-
export { ArrayMap } from "./util/array_map.js";
|
|
18
|
+
export { ArrayMap, IterableArrayMap } from "./util/array_map.js";
|
|
18
19
|
export { Bitset } from "./util/bitset.js";
|
|
20
|
+
export { Events } from "./util/events.js";
|
|
19
21
|
export { DEFAULT_ID_REUSE_WAIT_FRAMES } from "./util/id_pool.js";
|
|
20
22
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAoB,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9D,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAWnC,OAAO,EAAE,aAAa,EAAE,KAAK,EAAqB,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EACL,aAAa,EACb,SAAS,EACT,YAAY,GAKb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,MAAM,EAA8B,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACjF,OAAO,EAAE,MAAM,EAAqB,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,OAAO,EACP,QAAQ,EACR,SAAS,EACT,WAAW,EACX,SAAS,EACT,WAAW,EACX,SAAS,EACT,UAAU,EACV,KAAK,EACL,cAAc,GACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,IAAI,EAAoC,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAoB,MAAM,YAAY,CAAC;AAClF,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAoB,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9D,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAWnC,OAAO,EAAE,aAAa,EAAE,KAAK,EAAqB,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EACL,aAAa,EACb,SAAS,EACT,UAAU,EACV,YAAY,GAKb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,MAAM,EAA8B,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACjF,OAAO,EAAE,MAAM,EAAqB,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,OAAO,EACP,QAAQ,EACR,SAAS,EACT,WAAW,EACX,SAAS,EACT,WAAW,EACX,SAAS,EACT,UAAU,EACV,KAAK,EACL,cAAc,GACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,IAAI,EAAoC,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAoB,MAAM,YAAY,CAAC;AAClF,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAuC,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EAAE,4BAA4B,EAAqB,MAAM,mBAAmB,CAAC"}
|
package/dist/inject.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { type ComponentInstance, type ComponentRef, type ComponentType } from ".
|
|
|
2
2
|
import { Entity, type EID } from "./entity/index.js";
|
|
3
3
|
import { type World } from "./world/index.js";
|
|
4
4
|
import { type MaybeRequired } from "./dsl.js";
|
|
5
|
+
import { type ArrayMap } from "./util/array_map.js";
|
|
5
6
|
export type TargetInject<J extends readonly ComponentType[] = readonly ComponentType[]> = {
|
|
6
7
|
target: readonly [ComponentRef, readonly [...J]];
|
|
7
8
|
};
|
|
@@ -31,8 +32,8 @@ export type RequiredResolvedInjectTuple<J extends InjectTuple> = J extends reado
|
|
|
31
32
|
] ? [...RequiredResolvedInjectElement<First>, ...RequiredResolvedInjectTuple<Rest>] : [];
|
|
32
33
|
export declare function mapInject(world: World, inject: readonly FanInjectElement[]): ResolvedInjectTerm[];
|
|
33
34
|
export declare function injectArity(inject: readonly ResolvedInjectTerm[]): number;
|
|
34
|
-
export declare function getInjected(e: Entity, inject: readonly ResolvedInjectTerm[], requireDirectComponents: boolean, out: (ComponentInstance | undefined)[], exitSnapshot?:
|
|
35
|
-
export declare function getInjectedWithSrc(e: Entity, inject: readonly ResolvedInjectTerm[], out: (ComponentInstance | undefined)[], src: (Entity | undefined)[], requireDirectComponents?: boolean, exitSnapshot?:
|
|
35
|
+
export declare function getInjected(e: Entity, inject: readonly ResolvedInjectTerm[], requireDirectComponents: boolean, out: (ComponentInstance | undefined)[], exitSnapshot?: ArrayMap<ComponentInstance>): void;
|
|
36
|
+
export declare function getInjectedWithSrc(e: Entity, inject: readonly ResolvedInjectTerm[], out: (ComponentInstance | undefined)[], src: (Entity | undefined)[], requireDirectComponents?: boolean, exitSnapshot?: ArrayMap<ComponentInstance>): void;
|
|
36
37
|
export declare function directInjectEids(inject: readonly ResolvedInjectTerm[]): EID[];
|
|
37
38
|
/**
|
|
38
39
|
* Per-iteration cursor passed to `each` / `forEach` / `enter` / `exit` /
|
package/dist/inject.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inject.js","sourceRoot":"","sources":["../src/inject.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAY,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAE,oBAAoB,EAAsB,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"inject.js","sourceRoot":"","sources":["../src/inject.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Module } from "../module.js";
|
|
2
|
+
export { Implements } from "../component_meta.js";
|
|
3
|
+
/** Built-in world module that maintains abstract/interface component aliases. */
|
|
4
|
+
export declare class ImplementsModule extends Module {
|
|
5
|
+
private readonly _declaring;
|
|
6
|
+
private readonly _knownComponentClasses;
|
|
7
|
+
private _touched;
|
|
8
|
+
init(): void;
|
|
9
|
+
private _closureOf;
|
|
10
|
+
private _recompute;
|
|
11
|
+
private _resolveInterfaces;
|
|
12
|
+
private _resetPrevious;
|
|
13
|
+
private _validateDeclaration;
|
|
14
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { Implements } from "../component_meta.js";
|
|
2
|
+
import { Module } from "../module.js";
|
|
3
|
+
export { Implements } from "../component_meta.js";
|
|
4
|
+
/** Built-in world module that maintains abstract/interface component aliases. */
|
|
5
|
+
export class ImplementsModule extends Module {
|
|
6
|
+
constructor() {
|
|
7
|
+
super(...arguments);
|
|
8
|
+
this._declaring = new Set();
|
|
9
|
+
this._knownComponentClasses = new Set();
|
|
10
|
+
this._touched = new Set();
|
|
11
|
+
}
|
|
12
|
+
init() {
|
|
13
|
+
const component = this.world.component(Implements);
|
|
14
|
+
component.onSet((entity) => {
|
|
15
|
+
this._declaring.add(entity);
|
|
16
|
+
this._recompute();
|
|
17
|
+
});
|
|
18
|
+
component.onRemove((entity) => {
|
|
19
|
+
this._declaring.delete(entity);
|
|
20
|
+
this._recompute();
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
_closureOf(meta, direct, path, out) {
|
|
24
|
+
for (const ifaceMeta of direct.get(meta) ?? []) {
|
|
25
|
+
const cycleStart = path.indexOf(ifaceMeta);
|
|
26
|
+
if (cycleStart !== -1) {
|
|
27
|
+
const cycle = [...path.slice(cycleStart), ifaceMeta]
|
|
28
|
+
.map((cycleMeta) => cycleMeta.Class.name)
|
|
29
|
+
.join(" -> ");
|
|
30
|
+
throw new Error(`Cyclic Implements declaration: ${cycle}`);
|
|
31
|
+
}
|
|
32
|
+
if (!out.includes(ifaceMeta)) {
|
|
33
|
+
out.push(ifaceMeta);
|
|
34
|
+
}
|
|
35
|
+
this._closureOf(ifaceMeta, direct, [...path, ifaceMeta], out);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
_recompute() {
|
|
39
|
+
this._resetPrevious();
|
|
40
|
+
const direct = new Map();
|
|
41
|
+
const touched = new Set();
|
|
42
|
+
for (const entity of this._declaring) {
|
|
43
|
+
const meta = entity.meta;
|
|
44
|
+
const implementsComponent = entity.get(Implements);
|
|
45
|
+
const interfaces = this._resolveInterfaces(implementsComponent.interfaces);
|
|
46
|
+
if (!interfaces) {
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
this._validateDeclaration(meta, interfaces);
|
|
50
|
+
direct.set(meta, interfaces);
|
|
51
|
+
touched.add(meta);
|
|
52
|
+
interfaces.forEach((ifaceMeta) => touched.add(ifaceMeta));
|
|
53
|
+
}
|
|
54
|
+
for (const [meta] of direct) {
|
|
55
|
+
const closure = [];
|
|
56
|
+
this._closureOf(meta, direct, [meta], closure);
|
|
57
|
+
meta._implementsClosure = closure;
|
|
58
|
+
closure.forEach((ifaceMeta) => {
|
|
59
|
+
ifaceMeta._isInterface = true;
|
|
60
|
+
touched.add(ifaceMeta);
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
this._touched = touched;
|
|
64
|
+
touched.forEach((meta) => this._knownComponentClasses.add(meta.Class));
|
|
65
|
+
}
|
|
66
|
+
_resolveInterfaces(classes) {
|
|
67
|
+
const interfaces = [];
|
|
68
|
+
for (const InterfaceClass of classes) {
|
|
69
|
+
let entity = this.world.getEntity(InterfaceClass);
|
|
70
|
+
if (!entity) {
|
|
71
|
+
if (this._knownComponentClasses.has(InterfaceClass)) {
|
|
72
|
+
return undefined;
|
|
73
|
+
}
|
|
74
|
+
entity = this.world.entity(InterfaceClass);
|
|
75
|
+
}
|
|
76
|
+
interfaces.push(entity.meta);
|
|
77
|
+
}
|
|
78
|
+
return interfaces;
|
|
79
|
+
}
|
|
80
|
+
_resetPrevious() {
|
|
81
|
+
for (const meta of this._touched) {
|
|
82
|
+
meta._implementsClosure = undefined;
|
|
83
|
+
meta._isInterface = false;
|
|
84
|
+
}
|
|
85
|
+
this._touched.clear();
|
|
86
|
+
}
|
|
87
|
+
_validateDeclaration(meta, interfaces) {
|
|
88
|
+
if (meta.isRelationship) {
|
|
89
|
+
throw new Error(`Relationship ${meta.Class.name} cannot implement interfaces`);
|
|
90
|
+
}
|
|
91
|
+
for (const ifaceMeta of interfaces) {
|
|
92
|
+
if (ifaceMeta.isRelationship) {
|
|
93
|
+
throw new Error(`Relationship ${ifaceMeta.Class.name} cannot be an interface`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=implements.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"implements.js","sourceRoot":"","sources":["../../src/modules/implements.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,7 +14,7 @@ export { ChildOf, DependsOn, SilenceSource, Traversable } from "./relationship_t
|
|
|
14
14
|
* every entity's depth is updated when the relationship is added, retargeted,
|
|
15
15
|
* or removed.
|
|
16
16
|
*
|
|
17
|
-
* Depth is computed by walking `entity.
|
|
17
|
+
* Depth is computed by walking `entity.target(relEid)` to the root. When an
|
|
18
18
|
* entity's depth changes, every descendant is recursively recomputed.
|
|
19
19
|
*/
|
|
20
20
|
export declare class RelationshipsModule extends Module {
|
|
@@ -16,7 +16,7 @@ export { ChildOf, DependsOn, SilenceSource, Traversable } from "./relationship_t
|
|
|
16
16
|
* every entity's depth is updated when the relationship is added, retargeted,
|
|
17
17
|
* or removed.
|
|
18
18
|
*
|
|
19
|
-
* Depth is computed by walking `entity.
|
|
19
|
+
* Depth is computed by walking `entity.target(relEid)` to the root. When an
|
|
20
20
|
* entity's depth changes, every descendant is recursively recomputed.
|
|
21
21
|
*/
|
|
22
22
|
export class RelationshipsModule extends Module {
|
|
@@ -68,7 +68,7 @@ export class RelationshipsModule extends Module {
|
|
|
68
68
|
return 0;
|
|
69
69
|
}
|
|
70
70
|
visited.add(entity);
|
|
71
|
-
const parent = entity.
|
|
71
|
+
const parent = entity.target(relEid);
|
|
72
72
|
if (!parent) {
|
|
73
73
|
return 0;
|
|
74
74
|
}
|
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vworlds/vecs",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.27",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"type": "module",
|
|
@@ -22,9 +22,6 @@
|
|
|
22
22
|
"typecheck": "tsc --noEmit",
|
|
23
23
|
"format:check": "prettier --check \"**/*.{ts,md}\" --ignore-path ../../.prettierignore"
|
|
24
24
|
},
|
|
25
|
-
"dependencies": {
|
|
26
|
-
"eventemitter3": "^4.0.7"
|
|
27
|
-
},
|
|
28
25
|
"license": "UNLICENSED",
|
|
29
26
|
"repository": {
|
|
30
27
|
"type": "git",
|
|
@@ -2,15 +2,19 @@ import { type ComponentInstance, type ComponentType } from "../component.js";
|
|
|
2
2
|
import { Entity, type EID } from "../entity/index.js";
|
|
3
3
|
import { Iter, type InjectElement, type InjectTuple } from "../inject.js";
|
|
4
4
|
import { OrderedSet } from "../util/ordered_set.js";
|
|
5
|
+
import { type ArrayMap } from "../util/array_map.js";
|
|
5
6
|
import { type World } from "../world/index.js";
|
|
6
|
-
export type EntityCallback = (e: Entity, snapshot?:
|
|
7
|
+
export type EntityCallback = (e: Entity, snapshot?: ArrayMap<ComponentInstance>) => void;
|
|
7
8
|
export type ComponentCallback = (e: Entity, c: ComponentInstance) => void;
|
|
8
9
|
export declare function makeEnterCallback(world: World, arg0: InjectTuple | ((e: Entity) => void) | typeof Entity | typeof Iter, arg1?: InjectTuple | Function, arg2?: Function): EntityCallback;
|
|
9
10
|
export declare function makeExitCallback(world: World, arg0: readonly unknown[] | ((e: Entity) => void) | typeof Entity | typeof Iter, arg1?: readonly unknown[] | ((...args: any[]) => void), arg2?: (...args: any[]) => void): {
|
|
10
11
|
callback: EntityCallback;
|
|
11
12
|
snapshotTypes: EID[] | undefined;
|
|
12
13
|
};
|
|
13
|
-
export declare function makeSortedEntitySet(world: World, arg0: readonly InjectElement[] | typeof Entity | typeof Iter, arg1?: readonly InjectElement[] | Function, arg2?: Function):
|
|
14
|
+
export declare function makeSortedEntitySet(world: World, arg0: readonly InjectElement[] | typeof Entity | typeof Iter, arg1?: readonly InjectElement[] | Function, arg2?: Function): {
|
|
15
|
+
set: OrderedSet<Entity>;
|
|
16
|
+
watchEids: EID[];
|
|
17
|
+
};
|
|
14
18
|
export declare function makeUpdateRegistration<C extends ComponentType>(world: World, arg0: C | typeof Entity | typeof Iter, arg1: C | readonly InjectElement[] | ((...args: any[]) => void), arg2?: readonly InjectElement[] | ((...args: any[]) => void), arg3?: (...args: any[]) => void): {
|
|
15
19
|
componentEid: EID;
|
|
16
20
|
callback: ComponentCallback;
|
package/dist/query/callbacks.js
CHANGED
|
@@ -57,26 +57,29 @@ export function makeSortedEntitySet(world, arg0, arg1, arg2) {
|
|
|
57
57
|
const cb = (isCursorMarker(arg0) ? arg2 : arg1);
|
|
58
58
|
const inject = mapInject(world, components);
|
|
59
59
|
const arity = injectArity(inject);
|
|
60
|
+
const watchEids = directInjectEids(inject);
|
|
60
61
|
if (useIter) {
|
|
61
62
|
const itA = new Iter(arity);
|
|
62
63
|
const itB = new Iter(arity);
|
|
63
64
|
const resolvedA = new Array(arity);
|
|
64
65
|
const resolvedB = new Array(arity);
|
|
65
|
-
|
|
66
|
+
const set = new OrderedSet((a, b) => {
|
|
66
67
|
itA.entity = a;
|
|
67
68
|
itB.entity = b;
|
|
68
69
|
getInjectedWithSrc(a, inject, resolvedA, itA.src);
|
|
69
70
|
getInjectedWithSrc(b, inject, resolvedB, itB.src);
|
|
70
71
|
return cb(itA, resolvedA, itB, resolvedB) || a.eid - b.eid;
|
|
71
72
|
});
|
|
73
|
+
return { set, watchEids };
|
|
72
74
|
}
|
|
73
75
|
const resolvedA = new Array(arity);
|
|
74
76
|
const resolvedB = new Array(arity);
|
|
75
|
-
|
|
77
|
+
const set = new OrderedSet((a, b) => {
|
|
76
78
|
getInjected(a, inject, false, resolvedA);
|
|
77
79
|
getInjected(b, inject, false, resolvedB);
|
|
78
80
|
return cb(a, resolvedA, b, resolvedB) || a.eid - b.eid;
|
|
79
81
|
});
|
|
82
|
+
return { set, watchEids };
|
|
80
83
|
}
|
|
81
84
|
export function makeUpdateRegistration(world, arg0, arg1, arg2, arg3) {
|
|
82
85
|
const useIter = wantsIter(arg0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"callbacks.js","sourceRoot":"","sources":["../../src/query/callbacks.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,cAAc,EACd,IAAI,EACJ,SAAS,EACT,SAAS,GAGV,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"callbacks.js","sourceRoot":"","sources":["../../src/query/callbacks.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,cAAc,EACd,IAAI,EACJ,SAAS,EACT,SAAS,GAGV,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAOpD,MAAM,UAAU,iBAAiB,CAC/B,KAAY,EACZ,IAAuE,EACvE,IAA6B,EAC7B,IAAe;IAEf,IAAI,OAAO,IAAI,KAAK,UAAU,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QACxD,OAAO,IAA2B,CAAC;IACrC,CAAC;IACD,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,UAAU,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAA6B,CAAC;IACpF,MAAM,EAAE,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAgD,CAAC;IAC/F,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,CAAS,EAAE,EAAE;YACnB,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;YAClC,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3B,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;YACd,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACtD,EAAE,CAAC,EAAE,EAAE,QAAe,CAAC,CAAC;QAC1B,CAAC,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,CAAS,EAAE,EAAE;QACnB,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;QAClC,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QACvC,EAAE,CAAC,CAAC,EAAE,QAAe,CAAC,CAAC;IACzB,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,KAAY,EACZ,IAA8E,EAC9E,IAAsD,EACtD,IAA+B;IAE/B,IAAI,OAAO,IAAI,KAAK,UAAU,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QACxD,OAAO,EAAE,QAAQ,EAAE,IAA2B,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC;IAC7E,CAAC;IACD,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,UAAU,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAA6B,CAAC;IACpF,MAAM,EAAE,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAgD,CAAC;IAC/F,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC5C,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAE,YAA0C,EAAE,EAAE;YACzE,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;YAClC,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3B,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;YACd,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;YACpE,EAAE,CAAC,EAAE,EAAE,QAAe,CAAC,CAAC;QAC1B,CAAC,CAAC;QACF,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;IACrC,CAAC;IACD,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAE,YAA0C,EAAE,EAAE;QACzE,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;QAClC,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;QACrD,EAAE,CAAC,CAAC,EAAE,QAAe,CAAC,CAAC;IACzB,CAAC,CAAC;IACF,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,KAAY,EACZ,IAA4D,EAC5D,IAA0C,EAC1C,IAAe;IAEf,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,UAAU,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAA6B,CAAC;IACpF,MAAM,EAAE,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAmC,CAAC;IAClF,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,GAAG,GAAG,IAAI,UAAU,CAAS,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC1C,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;YACf,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;YACf,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;YAClD,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;YAClD,OAAO,EAAE,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;QAC7D,CAAC,CAAC,CAAC;QACH,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;IAC5B,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,GAAG,GAAG,IAAI,UAAU,CAAS,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC1C,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QACzC,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QACzC,OAAO,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;IACzD,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,KAAY,EACZ,IAAqC,EACrC,IAA+D,EAC/D,IAA4D,EAC5D,IAA+B;IAE/B,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,IAAI,GAAG,IAAS,CAAC;QACjB,IAAI,GAAG,IAAgC,CAAC;QACxC,IAAI,GAAG,IAAgC,CAAC;IAC1C,CAAC;IACD,MAAM,cAAc,GAAG,IAAS,CAAC;IACjC,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC;IACtD,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/B,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAyB,EAAE,CAAC;IAC/D,CAAC;IACD,MAAM,UAAU,GAAG,IAAgC,CAAC;IACpD,MAAM,QAAQ,GAAG,IAAgC,CAAC;IAClD,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3B,MAAM,EAAE,GAAG,CAAC,CAAS,EAAE,CAAoB,EAAE,EAAE;YAC7C,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;YACd,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;YAChD,QAAQ,CAAC,EAAE,EAAE,CAAoB,EAAE,QAAe,CAAC,CAAC;QACtD,CAAC,CAAC;QACF,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IACxC,CAAC;IACD,MAAM,EAAE,GAAG,CAAC,CAAS,EAAE,CAAoB,EAAE,EAAE;QAC7C,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QACxC,QAAQ,CAAC,CAAC,EAAE,CAAoB,EAAE,QAAe,CAAC,CAAC;IACrD,CAAC,CAAC;IACF,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;AACxC,CAAC"}
|
package/dist/query/query.d.ts
CHANGED
|
@@ -70,6 +70,20 @@ export declare class Query<R extends ComponentType[] = []> implements TermConsum
|
|
|
70
70
|
exit<J extends InjectTuple>(cursor: typeof Entity, inject: readonly [...J], callback: (e: Entity, injected: RequiredResolvedInjectTuple<J>) => void): this;
|
|
71
71
|
exit<J extends InjectTuple>(cursor: typeof Iter, inject: readonly [...J], callback: (it: Iter, injected: RequiredResolvedInjectTuple<J>) => void): this;
|
|
72
72
|
exit(callback: (e: Entity) => void): this;
|
|
73
|
+
/**
|
|
74
|
+
* Register one update callback for a watched component.
|
|
75
|
+
*
|
|
76
|
+
* `update(ComponentClass, ...)` also adds `ComponentClass` to the query
|
|
77
|
+
* predicate, so the callback only observes entities that carry the watched
|
|
78
|
+
* component. The callback fires when `ComponentClass` is set or marked
|
|
79
|
+
* modified on a matched entity, and when a matched entity enters with the
|
|
80
|
+
* watched component already present. Calling `update` more than once for the
|
|
81
|
+
* same component on one query or system is rejected instead of replacing the
|
|
82
|
+
* previous callback.
|
|
83
|
+
*
|
|
84
|
+
* @throws When this query has already been built, when `ComponentClass`
|
|
85
|
+
* already has an update callback on this query.
|
|
86
|
+
*/
|
|
73
87
|
update<C extends ComponentType>(ComponentClass: C, callback: (e: Entity, c: InstanceType<C>) => void): this;
|
|
74
88
|
update<C extends ComponentType, J extends InjectTuple>(ComponentClass: C, inject: readonly [...J], callback: (e: Entity, c: InstanceType<C>, injected: MaybeResolvedInjectTuple<J, R>) => void): this;
|
|
75
89
|
update<C extends ComponentType, J extends InjectTuple>(cursor: typeof Entity, ComponentClass: C, inject: readonly [...J], callback: (e: Entity, c: InstanceType<C>, injected: MaybeResolvedInjectTuple<J, R>) => void): this;
|
|
@@ -83,5 +97,4 @@ export declare class Query<R extends ComponentType[] = []> implements TermConsum
|
|
|
83
97
|
protected _exit(e: Entity): void;
|
|
84
98
|
onTermEvent(kind: TermEventKind, entity: Entity): void;
|
|
85
99
|
private _buildSilenceQuery;
|
|
86
|
-
private _reSortCascade;
|
|
87
100
|
}
|