@vworlds/vecs 1.0.4 → 1.0.6
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/.husky/pre-commit +1 -0
- package/.prettierrc +7 -0
- package/README.md +98 -73
- package/dist/component.d.ts +13 -4
- package/dist/component.js +10 -4
- package/dist/component.js.map +1 -1
- package/dist/dsl.d.ts +4 -1
- package/dist/dsl.js +1 -2
- package/dist/dsl.js.map +1 -1
- package/dist/entity.d.ts +5 -2
- package/dist/entity.js +28 -6
- package/dist/entity.js.map +1 -1
- package/dist/filter.js +5 -3
- package/dist/filter.js.map +1 -1
- package/dist/package.json +16 -2
- package/dist/query.js +11 -6
- package/dist/query.js.map +1 -1
- package/dist/system.js +14 -7
- package/dist/system.js.map +1 -1
- package/dist/util/bitset.d.ts +2 -1
- package/dist/util/bitset.js +18 -17
- package/dist/util/bitset.js.map +1 -1
- package/dist/util/events.js.map +1 -1
- package/dist/world.d.ts +18 -3
- package/dist/world.js +76 -45
- package/dist/world.js.map +1 -1
- package/eslint.config.js +17 -0
- package/package.json +16 -2
package/dist/query.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { OrderedSet } from "./util/ordered_set.js";
|
|
2
|
-
import { buildEntityTest
|
|
2
|
+
import { buildEntityTest } from "./dsl.js";
|
|
3
3
|
const EMPTY_ENTITIES = new Set();
|
|
4
4
|
/**
|
|
5
5
|
* A reactive, always-updated list of entities that match a given query
|
|
@@ -32,8 +32,9 @@ export class Query {
|
|
|
32
32
|
this._belongs = (_e) => false;
|
|
33
33
|
this.hasQuery = false;
|
|
34
34
|
world._addQuery(this);
|
|
35
|
-
if (track)
|
|
35
|
+
if (track) {
|
|
36
36
|
this.track();
|
|
37
|
+
}
|
|
37
38
|
}
|
|
38
39
|
/** Returns the query name. */
|
|
39
40
|
toString() {
|
|
@@ -54,8 +55,9 @@ export class Query {
|
|
|
54
55
|
return this;
|
|
55
56
|
}
|
|
56
57
|
backfill() {
|
|
57
|
-
if (this._entities === undefined)
|
|
58
|
+
if (this._entities === undefined) {
|
|
58
59
|
return;
|
|
60
|
+
}
|
|
59
61
|
this.world._forEachEntity((e) => {
|
|
60
62
|
if (this.belongs(e) && !this._entities.has(e)) {
|
|
61
63
|
e._addQuery(this);
|
|
@@ -78,8 +80,9 @@ export class Query {
|
|
|
78
80
|
this._entities?.forEach(componentsOrCallback);
|
|
79
81
|
}
|
|
80
82
|
else {
|
|
81
|
-
if (!this._entities || !this.world)
|
|
83
|
+
if (!this._entities || !this.world) {
|
|
82
84
|
return;
|
|
85
|
+
}
|
|
83
86
|
const types = componentsOrCallback.map((C) => this.world.getComponentType(C));
|
|
84
87
|
this._entities.forEach((e) => {
|
|
85
88
|
const resolved = types.map((t) => e.get(t));
|
|
@@ -221,16 +224,18 @@ export class Query {
|
|
|
221
224
|
const injected = [];
|
|
222
225
|
inject.forEach((C) => {
|
|
223
226
|
const c = this.getComponent(e, C, considerDeleted);
|
|
224
|
-
if (!c)
|
|
227
|
+
if (!c) {
|
|
225
228
|
throw "query does not contain component";
|
|
229
|
+
}
|
|
226
230
|
injected.push(c);
|
|
227
231
|
});
|
|
228
232
|
return injected;
|
|
229
233
|
}
|
|
230
234
|
mapInjectedClassToTypes(inject) {
|
|
231
235
|
return inject.map((C) => {
|
|
232
|
-
if (typeof C === "function")
|
|
236
|
+
if (typeof C === "function") {
|
|
233
237
|
return this.world.getComponentType(C);
|
|
238
|
+
}
|
|
234
239
|
return { parent: this.world.getComponentType(C.parent) };
|
|
235
240
|
});
|
|
236
241
|
}
|
package/dist/query.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAInD,OAAO,
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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"}
|
package/dist/system.js
CHANGED
|
@@ -53,18 +53,21 @@ export class System extends Query {
|
|
|
53
53
|
*/
|
|
54
54
|
phase(p) {
|
|
55
55
|
if (typeof p !== "string") {
|
|
56
|
-
if (!(p instanceof Phase))
|
|
56
|
+
if (!(p instanceof Phase)) {
|
|
57
57
|
throw "Invalid Phase object";
|
|
58
|
-
|
|
58
|
+
}
|
|
59
|
+
if (p.world !== this.world) {
|
|
59
60
|
throw "Phase does not belong to this system's world";
|
|
61
|
+
}
|
|
60
62
|
}
|
|
61
63
|
this._phase = p;
|
|
62
64
|
return this;
|
|
63
65
|
}
|
|
64
66
|
/** @internal Delivers a component-modified notification to this system. */
|
|
65
67
|
notifyModified(c) {
|
|
66
|
-
if (!this.watchlistBitmask.hasBit(c.bitPtr))
|
|
68
|
+
if (!this.watchlistBitmask.hasBit(c.bitPtr)) {
|
|
67
69
|
return;
|
|
70
|
+
}
|
|
68
71
|
this.updateQueue.push(c);
|
|
69
72
|
}
|
|
70
73
|
/** @internal Fires enter callbacks, adds entity to tracked set, queues component updates. */
|
|
@@ -76,23 +79,27 @@ export class System extends Query {
|
|
|
76
79
|
_exit(e) {
|
|
77
80
|
super._exit(e);
|
|
78
81
|
this.updateQueue.forEach((c, i) => {
|
|
79
|
-
if (!c)
|
|
82
|
+
if (!c) {
|
|
80
83
|
return;
|
|
81
|
-
|
|
84
|
+
}
|
|
85
|
+
if (c.entity === e) {
|
|
82
86
|
this.updateQueue[i] = undefined;
|
|
87
|
+
}
|
|
83
88
|
});
|
|
84
89
|
}
|
|
85
90
|
/** @internal Execute one tick: run `run`, fire `each`, then drain the update queue. */
|
|
86
91
|
_run(now, delta) {
|
|
87
|
-
if (this._runCallback)
|
|
92
|
+
if (this._runCallback) {
|
|
88
93
|
this._runCallback(now, delta);
|
|
94
|
+
}
|
|
89
95
|
if (this.eachCallback) {
|
|
90
96
|
const cb = this.eachCallback;
|
|
91
97
|
this.forEach((e) => cb(e));
|
|
92
98
|
}
|
|
93
99
|
this.updateQueue.forEach((c) => {
|
|
94
|
-
if (!c)
|
|
100
|
+
if (!c) {
|
|
95
101
|
return;
|
|
102
|
+
}
|
|
96
103
|
const callback = this.componentUpdateCallbacks.get(c.type);
|
|
97
104
|
if (callback) {
|
|
98
105
|
callback(c);
|
package/dist/system.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system.js","sourceRoot":"","sources":["../src/system.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,GAAG,EAAqC,MAAM,UAAU,CAAC;AAElE,OAAO,EAAE,KAAK,EAAe,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"system.js","sourceRoot":"","sources":["../src/system.ts"],"names":[],"mappings":"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"}
|
package/dist/util/bitset.d.ts
CHANGED
package/dist/util/bitset.js
CHANGED
|
@@ -18,14 +18,13 @@
|
|
|
18
18
|
*/
|
|
19
19
|
export class Bitset {
|
|
20
20
|
constructor() {
|
|
21
|
-
this.
|
|
21
|
+
this._bits = [];
|
|
22
22
|
}
|
|
23
23
|
/**
|
|
24
24
|
* Return `true` if this bitset and `other` have exactly the same bits set.
|
|
25
25
|
*/
|
|
26
26
|
equal(other) {
|
|
27
|
-
return (this.
|
|
28
|
-
this.bits.every((v, i) => other.bits[i] === v));
|
|
27
|
+
return (this._bits.length === other._bits.length && this._bits.every((v, i) => other._bits[i] === v));
|
|
29
28
|
}
|
|
30
29
|
/**
|
|
31
30
|
* OR the given `bitmask` word into the word at position `arrayIndex`.
|
|
@@ -33,7 +32,7 @@ export class Bitset {
|
|
|
33
32
|
* @internal Low-level bulk operation; prefer {@link add} for single bits.
|
|
34
33
|
*/
|
|
35
34
|
addIndexBitmask(arrayIndex, bitmask) {
|
|
36
|
-
this.
|
|
35
|
+
this._bits[arrayIndex] |= bitmask;
|
|
37
36
|
}
|
|
38
37
|
/**
|
|
39
38
|
* Replace the word at position `arrayIndex` with `bitmask`.
|
|
@@ -41,7 +40,7 @@ export class Bitset {
|
|
|
41
40
|
* @internal Used by network deserialization to set a whole word at once.
|
|
42
41
|
*/
|
|
43
42
|
setIndexBitmask(arrayIndex, bitmask) {
|
|
44
|
-
this.
|
|
43
|
+
this._bits[arrayIndex] = bitmask;
|
|
45
44
|
}
|
|
46
45
|
/**
|
|
47
46
|
* Set the bit described by `bptr` (fast path using a pre-computed
|
|
@@ -57,7 +56,7 @@ export class Bitset {
|
|
|
57
56
|
*/
|
|
58
57
|
add(n) {
|
|
59
58
|
const arrayIndex = Math.floor(n / 32);
|
|
60
|
-
const bitmask = 1 << n % 32;
|
|
59
|
+
const bitmask = 1 << (n % 32);
|
|
61
60
|
this.addIndexBitmask(arrayIndex, bitmask);
|
|
62
61
|
}
|
|
63
62
|
/**
|
|
@@ -69,15 +68,16 @@ export class Bitset {
|
|
|
69
68
|
*/
|
|
70
69
|
delete(n) {
|
|
71
70
|
const arrayIndex = Math.floor(n / 32);
|
|
72
|
-
const current = this.
|
|
71
|
+
const current = this._bits[arrayIndex];
|
|
73
72
|
if (current === undefined) {
|
|
74
73
|
return;
|
|
75
74
|
}
|
|
76
75
|
else {
|
|
77
|
-
this.
|
|
76
|
+
this._bits[arrayIndex] = current & ~(1 << (n % 32));
|
|
77
|
+
}
|
|
78
|
+
while (this._bits.length && this._bits[this._bits.length - 1] === 0) {
|
|
79
|
+
this._bits.pop();
|
|
78
80
|
}
|
|
79
|
-
while (this.bits.length && this.bits[this.bits.length - 1] === 0)
|
|
80
|
-
this.bits.pop();
|
|
81
81
|
}
|
|
82
82
|
/**
|
|
83
83
|
* Return `true` if the bit described by `bptr` is set (fast path).
|
|
@@ -92,8 +92,9 @@ export class Bitset {
|
|
|
92
92
|
*/
|
|
93
93
|
has(n) {
|
|
94
94
|
const arrayIndex = Math.floor(n / 32);
|
|
95
|
-
if (arrayIndex >= this.
|
|
95
|
+
if (arrayIndex >= this._bits.length) {
|
|
96
96
|
return false;
|
|
97
|
+
}
|
|
97
98
|
const bitIndex = n % 32;
|
|
98
99
|
const bitmask = 1 << bitIndex;
|
|
99
100
|
return this.hasIndexBitmask(arrayIndex, bitmask);
|
|
@@ -104,7 +105,7 @@ export class Bitset {
|
|
|
104
105
|
* @internal
|
|
105
106
|
*/
|
|
106
107
|
hasIndexBitmask(arrayIndex, bitmask) {
|
|
107
|
-
return (this.
|
|
108
|
+
return (this._bits[arrayIndex] & bitmask) !== 0;
|
|
108
109
|
}
|
|
109
110
|
/**
|
|
110
111
|
* Return `true` if every bit set in `other` is also set in `this` (i.e.
|
|
@@ -114,11 +115,11 @@ export class Bitset {
|
|
|
114
115
|
* system's `HAS` query.
|
|
115
116
|
*/
|
|
116
117
|
hasBitset(other) {
|
|
117
|
-
if (this.
|
|
118
|
+
if (this._bits.length < other._bits.length) {
|
|
118
119
|
return false;
|
|
119
120
|
}
|
|
120
|
-
for (let i = 0; i < other.
|
|
121
|
-
if ((this.
|
|
121
|
+
for (let i = 0; i < other._bits.length; i++) {
|
|
122
|
+
if ((this._bits[i] & other._bits[i]) !== (other._bits[i] || 0)) {
|
|
122
123
|
return false;
|
|
123
124
|
}
|
|
124
125
|
}
|
|
@@ -130,7 +131,7 @@ export class Bitset {
|
|
|
130
131
|
* @param callback - Called with each set bit index.
|
|
131
132
|
*/
|
|
132
133
|
forEach(callback) {
|
|
133
|
-
this.
|
|
134
|
+
this._bits.forEach((b, j) => {
|
|
134
135
|
for (let i = 0; i < 32; i++) {
|
|
135
136
|
if ((b & 1) !== 0) {
|
|
136
137
|
callback(i + j * 32);
|
|
@@ -167,7 +168,7 @@ export class BitPtr {
|
|
|
167
168
|
value) {
|
|
168
169
|
this.value = value;
|
|
169
170
|
this.arrayIndex = Math.floor(value / 32);
|
|
170
|
-
this.bitmask = 1 << value % 32;
|
|
171
|
+
this.bitmask = 1 << (value % 32);
|
|
171
172
|
}
|
|
172
173
|
/** Return `true` if both pointers refer to the same bit position. */
|
|
173
174
|
equals(other) {
|
package/dist/util/bitset.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bitset.js","sourceRoot":"","sources":["../../src/util/bitset.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,OAAO,MAAM;
|
|
1
|
+
{"version":3,"file":"bitset.js","sourceRoot":"","sources":["../../src/util/bitset.ts"],"names":[],"mappings":"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"}
|
package/dist/util/events.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/util/events.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,aAAa,MAAM,eAAe,CAAC;AAC1C,MAAM,EAAE,YAAY,EAAE,GAAG,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/util/events.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,aAAa,MAAM,eAAe,CAAC;AAC1C,MAAM,EAAE,YAAY,EAAE,GAAG,aAAa,CAAC;AAmBvC,MAAM,MAAM;IACH,EAAE,CACP,KAAQ,EACR,EAA8B,EAC9B,OAAa;QAEb,OAAO,CAAQ,CAAC;IAClB,CAAC;IACM,IAAI,CAAiC,KAAQ,EAAE,GAAG,IAA4B;QACnF,OAAO,CAAQ,CAAC;IAClB,CAAC;IACM,IAAI,CACT,KAAQ,EACR,EAA8B,EAC9B,OAAa;QAEb,OAAO,CAAQ,CAAC;IAClB,CAAC;IACM,UAAU;QACf,OAAO,CAAQ,CAAC;IAClB,CAAC;IACM,SAAS,CAAC,KAA2B;QAC1C,OAAO,CAAQ,CAAC;IAClB,CAAC;IACM,aAAa,CAAC,KAA2B;QAC9C,OAAO,CAAQ,CAAC;IAClB,CAAC;IACM,cAAc,CACnB,KAAQ,EACR,EAA+B,EAC/B,OAAa,EACb,IAAc;QAEd,OAAO,CAAQ,CAAC;IAClB,CAAC;IACD,kBAAkB,CAAC,KAA4B;QAC7C,OAAO,CAAQ,CAAC;IAClB,CAAC;IACM,GAAG,CACR,KAAQ,EACR,EAA2C,EAC3C,OAAa,EACb,IAA0B;QAE1B,OAAO,CAAQ,CAAC;IAClB,CAAC;IACM,WAAW,CAChB,KAAQ,EACR,EAA8B,EAC9B,OAAa;QAEb,OAAO,CAAQ,CAAC;IAClB,CAAC;CACF;AAEA,MAAc,GAAG,YAAY,CAAC;AAE/B,MAAM,OAAO,MAA6C,SAAQ,MAAgB;CAAG"}
|
package/dist/world.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import { Query } from "./query.js";
|
|
|
4
4
|
import { System } from "./system.js";
|
|
5
5
|
import { Filter } from "./filter.js";
|
|
6
6
|
import { type QueryDSL, type ExtractRequired } from "./dsl.js";
|
|
7
|
-
import { IPhase } from "./phase.js";
|
|
7
|
+
import { IPhase, Phase } from "./phase.js";
|
|
8
8
|
/**
|
|
9
9
|
* The central ECS container.
|
|
10
10
|
*
|
|
@@ -46,7 +46,8 @@ export declare class World {
|
|
|
46
46
|
private updatedComponents;
|
|
47
47
|
private localComponentCounter;
|
|
48
48
|
private componentRegistrationDisabled;
|
|
49
|
-
|
|
49
|
+
/** @internal */
|
|
50
|
+
_pipeline: Map<string, Phase>;
|
|
50
51
|
private eidCounter;
|
|
51
52
|
constructor();
|
|
52
53
|
/**
|
|
@@ -97,7 +98,6 @@ export declare class World {
|
|
|
97
98
|
* @throws If called after registration has been disabled.
|
|
98
99
|
*/
|
|
99
100
|
setEntityIdRange(min: number): void;
|
|
100
|
-
private getComponentInstance;
|
|
101
101
|
/**
|
|
102
102
|
* Retrieve the {@link ComponentMeta} record for a registered component.
|
|
103
103
|
*
|
|
@@ -314,6 +314,21 @@ export declare class World {
|
|
|
314
314
|
* @param delta - Milliseconds elapsed since the previous tick.
|
|
315
315
|
*/
|
|
316
316
|
progress(now: number, delta: number): void;
|
|
317
|
+
/**
|
|
318
|
+
* Declare a group of mutually exclusive components.
|
|
319
|
+
*
|
|
320
|
+
* After this call, adding any component in the group to an entity that
|
|
321
|
+
* already has another component from the same group will remove the other component
|
|
322
|
+
*
|
|
323
|
+
* ```ts
|
|
324
|
+
* world.setExclusiveComponents(Walking, Running, Idle);
|
|
325
|
+
* // entity.add(Running) throws if entity already has Walking or Idle
|
|
326
|
+
* ```
|
|
327
|
+
*
|
|
328
|
+
* @param components - Two or more component classes that cannot coexist.
|
|
329
|
+
* @throws If any class has not been registered.
|
|
330
|
+
*/
|
|
331
|
+
setExclusiveComponents(...components: (typeof Component)[]): void;
|
|
317
332
|
/**
|
|
318
333
|
* Destroy every entity currently tracked by the world.
|
|
319
334
|
*
|
package/dist/world.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ComponentMeta
|
|
1
|
+
import { ComponentMeta } from "./component.js";
|
|
2
2
|
import { Entity } from "./entity.js";
|
|
3
3
|
import { Query } from "./query.js";
|
|
4
4
|
import { System } from "./system.js";
|
|
@@ -48,7 +48,8 @@ export class World {
|
|
|
48
48
|
this.updatedComponents = [];
|
|
49
49
|
this.localComponentCounter = LOCAL_COMPONENT_MIN;
|
|
50
50
|
this.componentRegistrationDisabled = false;
|
|
51
|
-
|
|
51
|
+
/** @internal */
|
|
52
|
+
this._pipeline = new Map();
|
|
52
53
|
this.eidCounter = 0;
|
|
53
54
|
}
|
|
54
55
|
/**
|
|
@@ -74,8 +75,9 @@ export class World {
|
|
|
74
75
|
if (!e) {
|
|
75
76
|
e = new Entity(this, eid);
|
|
76
77
|
this.entities.set(eid, e);
|
|
77
|
-
if (onCreateCallback)
|
|
78
|
+
if (onCreateCallback) {
|
|
78
79
|
onCreateCallback(e);
|
|
80
|
+
}
|
|
79
81
|
}
|
|
80
82
|
return e;
|
|
81
83
|
}
|
|
@@ -115,18 +117,11 @@ export class World {
|
|
|
115
117
|
* @throws If called after registration has been disabled.
|
|
116
118
|
*/
|
|
117
119
|
setEntityIdRange(min) {
|
|
118
|
-
if (this.componentRegistrationDisabled)
|
|
120
|
+
if (this.componentRegistrationDisabled) {
|
|
119
121
|
throw "setEntityIdRange must be called before component registration is disabled";
|
|
122
|
+
}
|
|
120
123
|
this.eidCounter = min;
|
|
121
124
|
}
|
|
122
|
-
getComponentInstance(typeOrClass, entity) {
|
|
123
|
-
const meta = this.getComponentMeta(typeOrClass);
|
|
124
|
-
const c = new meta.Class(entity, meta);
|
|
125
|
-
const hook = meta["onAddHandler"];
|
|
126
|
-
if (hook)
|
|
127
|
-
hook(c);
|
|
128
|
-
return c;
|
|
129
|
-
}
|
|
130
125
|
/**
|
|
131
126
|
* Retrieve the {@link ComponentMeta} record for a registered component.
|
|
132
127
|
*
|
|
@@ -142,8 +137,9 @@ export class World {
|
|
|
142
137
|
else {
|
|
143
138
|
meta = this.Type2Meta.get(typeOrClass);
|
|
144
139
|
}
|
|
145
|
-
if (!meta)
|
|
140
|
+
if (!meta) {
|
|
146
141
|
throw `unregistered component meta for component type or class '${typeOrClass}'`;
|
|
142
|
+
}
|
|
147
143
|
return meta;
|
|
148
144
|
}
|
|
149
145
|
/**
|
|
@@ -169,8 +165,9 @@ export class World {
|
|
|
169
165
|
* {@link Entity.remove}.
|
|
170
166
|
*/
|
|
171
167
|
archetypeChanged(e) {
|
|
172
|
-
if (e._archetypeChanged)
|
|
168
|
+
if (e._archetypeChanged) {
|
|
173
169
|
return;
|
|
170
|
+
}
|
|
174
171
|
e._archetypeChanged = true;
|
|
175
172
|
this.archChangeQueue.push(e);
|
|
176
173
|
e.children.forEach((child) => this.archetypeChanged(child));
|
|
@@ -181,15 +178,17 @@ export class World {
|
|
|
181
178
|
}
|
|
182
179
|
/** @internal */
|
|
183
180
|
_notifyComponentRemoved(e, c) {
|
|
184
|
-
const hook = c.meta
|
|
185
|
-
if (hook)
|
|
181
|
+
const hook = c.meta._onRemoveHandler;
|
|
182
|
+
if (hook) {
|
|
186
183
|
hook(c);
|
|
184
|
+
}
|
|
187
185
|
this.archetypeChanged(e);
|
|
188
186
|
}
|
|
189
187
|
/** @internal */
|
|
190
188
|
_notifyEntityDestroyed(e) {
|
|
191
|
-
if (!this.entities.delete(e.eid))
|
|
189
|
+
if (!this.entities.delete(e.eid)) {
|
|
192
190
|
return;
|
|
191
|
+
}
|
|
193
192
|
e.forEachComponent((c) => {
|
|
194
193
|
e.remove(c.type);
|
|
195
194
|
});
|
|
@@ -211,29 +210,37 @@ export class World {
|
|
|
211
210
|
e.clearDeletedComponents();
|
|
212
211
|
});
|
|
213
212
|
}
|
|
214
|
-
this.destroyedEntities.
|
|
215
|
-
e
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
213
|
+
if (this.destroyedEntities.length > 0) {
|
|
214
|
+
this.destroyedEntities.forEach((e) => {
|
|
215
|
+
e._destroy();
|
|
216
|
+
});
|
|
217
|
+
this.destroyedEntities.length = 0;
|
|
218
|
+
}
|
|
219
|
+
if (this.updatedComponents.length > 0) {
|
|
220
|
+
this.updatedComponents.forEach((c) => {
|
|
221
|
+
const hook = c.meta._onSetHandler;
|
|
222
|
+
if (hook) {
|
|
223
|
+
hook(c);
|
|
224
|
+
}
|
|
225
|
+
c.entity._notifyModified(c);
|
|
226
|
+
c._dirty = false;
|
|
227
|
+
});
|
|
228
|
+
this.updatedComponents.length = 0;
|
|
229
|
+
}
|
|
230
|
+
if (this.archChangeQueue.length > 0) {
|
|
231
|
+
this.archChangeQueue.forEach((e) => {
|
|
232
|
+
e._updateQueries();
|
|
233
|
+
e._archetypeChanged = false;
|
|
234
|
+
});
|
|
235
|
+
this.archChangeQueue.length = 0;
|
|
236
|
+
}
|
|
231
237
|
}
|
|
232
238
|
/** @internal Queues a component for onSet / update delivery. */
|
|
233
239
|
_queueUpdatedComponent(c) {
|
|
234
|
-
if (c
|
|
240
|
+
if (c._dirty) {
|
|
235
241
|
return;
|
|
236
|
-
|
|
242
|
+
}
|
|
243
|
+
c._dirty = true;
|
|
237
244
|
this.updatedComponents.push(c);
|
|
238
245
|
}
|
|
239
246
|
registerComponent(ComponentClass, typeOrComponentName, componentName) {
|
|
@@ -260,8 +267,9 @@ export class World {
|
|
|
260
267
|
}
|
|
261
268
|
let meta = this.Class2Meta.get(ComponentClass);
|
|
262
269
|
if (meta) {
|
|
263
|
-
if (local)
|
|
270
|
+
if (local) {
|
|
264
271
|
this.localComponentCounter--;
|
|
272
|
+
}
|
|
265
273
|
throw `Trying to register ${componentName} with type=${type} which is already registered to ${meta.componentName}`;
|
|
266
274
|
}
|
|
267
275
|
this.registerComponentType(componentName, type);
|
|
@@ -292,8 +300,9 @@ export class World {
|
|
|
292
300
|
/** @internal Called by {@link Query.destroy} to unregister a query and remove it from all entities. */
|
|
293
301
|
_removeQuery(q) {
|
|
294
302
|
const idx = this.allQueries.indexOf(q);
|
|
295
|
-
if (idx !== -1)
|
|
303
|
+
if (idx !== -1) {
|
|
296
304
|
this.allQueries.splice(idx, 1);
|
|
305
|
+
}
|
|
297
306
|
this.entities.forEach((e) => e._purgeQuery(q));
|
|
298
307
|
}
|
|
299
308
|
/** @internal Iterate over all entities currently in the world. */
|
|
@@ -368,23 +377,24 @@ export class World {
|
|
|
368
377
|
this.reindexSystems();
|
|
369
378
|
}
|
|
370
379
|
reindexSystems() {
|
|
371
|
-
let _defaultPhase = this.
|
|
380
|
+
let _defaultPhase = this._pipeline.get("update");
|
|
372
381
|
if (!_defaultPhase) {
|
|
373
382
|
_defaultPhase = new Phase("update", this);
|
|
374
|
-
this.
|
|
383
|
+
this._pipeline.set(_defaultPhase.name, _defaultPhase);
|
|
375
384
|
}
|
|
376
385
|
const defaultPhase = _defaultPhase;
|
|
377
386
|
this.allQueries.forEach((q) => {
|
|
378
|
-
if (!(q instanceof System))
|
|
387
|
+
if (!(q instanceof System)) {
|
|
379
388
|
return;
|
|
389
|
+
}
|
|
380
390
|
let phase = q._phase;
|
|
381
391
|
if (typeof phase === "string") {
|
|
382
|
-
phase = this.
|
|
392
|
+
phase = this._pipeline.get(phase);
|
|
383
393
|
}
|
|
384
394
|
phase = phase || defaultPhase;
|
|
385
395
|
phase.systems.push(q);
|
|
386
396
|
});
|
|
387
|
-
this.
|
|
397
|
+
this._pipeline.forEach((phase) => {
|
|
388
398
|
console.log("Phase %s : %s", phase.name, phase.systems.map((s) => s.name).join(" -> "));
|
|
389
399
|
});
|
|
390
400
|
}
|
|
@@ -425,7 +435,7 @@ export class World {
|
|
|
425
435
|
*/
|
|
426
436
|
addPhase(name) {
|
|
427
437
|
const phase = new Phase(name, this);
|
|
428
|
-
this.
|
|
438
|
+
this._pipeline.set(name, phase);
|
|
429
439
|
return phase;
|
|
430
440
|
}
|
|
431
441
|
/**
|
|
@@ -454,10 +464,31 @@ export class World {
|
|
|
454
464
|
* @param delta - Milliseconds elapsed since the previous tick.
|
|
455
465
|
*/
|
|
456
466
|
progress(now, delta) {
|
|
457
|
-
this.
|
|
467
|
+
this.updateArchetypes();
|
|
468
|
+
this._pipeline.forEach((phase) => {
|
|
458
469
|
this.runPhase(phase, now, delta);
|
|
459
470
|
});
|
|
460
471
|
}
|
|
472
|
+
/**
|
|
473
|
+
* Declare a group of mutually exclusive components.
|
|
474
|
+
*
|
|
475
|
+
* After this call, adding any component in the group to an entity that
|
|
476
|
+
* already has another component from the same group will remove the other component
|
|
477
|
+
*
|
|
478
|
+
* ```ts
|
|
479
|
+
* world.setExclusiveComponents(Walking, Running, Idle);
|
|
480
|
+
* // entity.add(Running) throws if entity already has Walking or Idle
|
|
481
|
+
* ```
|
|
482
|
+
*
|
|
483
|
+
* @param components - Two or more component classes that cannot coexist.
|
|
484
|
+
* @throws If any class has not been registered.
|
|
485
|
+
*/
|
|
486
|
+
setExclusiveComponents(...components) {
|
|
487
|
+
const types = components.map((C) => this.getComponentType(C));
|
|
488
|
+
for (let i = 0; i < components.length; i++) {
|
|
489
|
+
this.getComponentMeta(components[i]).exclusive = types.filter((_, j) => j !== i);
|
|
490
|
+
}
|
|
491
|
+
}
|
|
461
492
|
/**
|
|
462
493
|
* Destroy every entity currently tracked by the world.
|
|
463
494
|
*
|
package/dist/world.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"world.js","sourceRoot":"","sources":["../src/world.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"world.js","sourceRoot":"","sources":["../src/world.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmC,aAAa,EAAQ,MAAM,gBAAgB,CAAC;AACtF,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAU,KAAK,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEhC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,OAAO,KAAK;IAehB;QAdQ,aAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC,CAAC,2BAA2B;QACjE,yBAAoB,GAAG,IAAI,GAAG,EAAkB,CAAC;QACjD,oBAAe,GAAa,EAAE,CAAC;QAC/B,sBAAiB,GAAa,EAAE,CAAC;QACjC,eAAU,GAAY,EAAE,CAAC;QAEzB,eAAU,GAAG,IAAI,GAAG,EAAmC,CAAC;QACxD,cAAS,GAAG,IAAI,QAAQ,EAAiB,CAAC;QAC1C,sBAAiB,GAAgB,EAAE,CAAC;QACpC,0BAAqB,GAAG,mBAAmB,CAAC;QAC5C,kCAA6B,GAAG,KAAK,CAAC;QAC9C,gBAAgB;QACT,cAAS,GAAG,IAAI,GAAG,EAAiB,CAAC;QACpC,eAAU,GAAG,CAAC,CAAC;IACR,CAAC;IAEhB;;;;;;;;;;;;;;;;;OAiBG;IACI,iBAAiB,CAAC,GAAW,EAAE,gBAAsC;QAC1E,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,CAAC,EAAE;YACN,CAAC,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAC1B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC1B,IAAI,gBAAgB,EAAE;gBACpB,gBAAgB,CAAC,CAAC,CAAC,CAAC;aACrB;SACF;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,EAAU;QACtB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;IAED;;;;;;;OAOG;IACI,YAAY;QACjB,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC1B,OAAO,CAAC,CAAC;IACX,CAAC;IAED;;;;;;;;;;;OAWG;IACI,gBAAgB,CAAC,GAAW;QACjC,IAAI,IAAI,CAAC,6BAA6B,EAAE;YACtC,MAAM,2EAA2E,CAAC;SACnF;QACD,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;IACxB,CAAC;IAED;;;;;;OAMG;IACI,gBAAgB,CAAC,WAAiC;QACvD,IAAI,IAA+B,CAAC;QACpC,IAAI,OAAO,WAAW,KAAK,UAAU,EAAE;YACrC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;SACzC;aAAM;YACL,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;SACxC;QACD,IAAI,CAAC,IAAI,EAAE;YACT,MAAM,4DAA4D,WAAW,GAAG,CAAC;SAClF;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACI,gBAAgB,CAAC,WAAiC;QACvD,IAAI,OAAO,WAAW,KAAK,UAAU,EAAE;YACrC,OAAO,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC;SAChD;QACD,OAAO,WAAW,CAAC;IACrB,CAAC;IAED;;;;;;;;;OASG;IACI,gBAAgB,CAAC,CAAS;QAC/B,IAAI,CAAC,CAAC,iBAAiB,EAAE;YACvB,OAAO;SACR;QACD,CAAC,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,gBAAgB;IACT,qBAAqB,CAAC,CAAS,EAAE,CAAY;QAClD,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED,gBAAgB;IACT,uBAAuB,CAAC,CAAS,EAAE,CAAY;QACpD,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC;QACrC,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,CAAC,CAAC,CAAC;SACT;QAED,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC;IAED,gBAAgB;IACT,sBAAsB,CAAC,CAAS;QACrC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;YAChC,OAAO;SACR;QACD,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,EAAE;YACvB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC;IAEO,gBAAgB;QACtB,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;YACnC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC5B,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;oBACjC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;wBAChB,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;qBAChB;yBAAM;wBACL,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;qBACnB;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBACjC,CAAC,CAAC,sBAAsB,EAAE,CAAC;YAC7B,CAAC,CAAC,CAAC;SACJ;QAED,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;YACrC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBACnC,CAAC,CAAC,QAAQ,EAAE,CAAC;YACf,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC;SACnC;QAED,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;YACrC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBACnC,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC;gBAClC,IAAI,IAAI,EAAE;oBACR,IAAI,CAAC,CAAC,CAAC,CAAC;iBACT;gBACD,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;gBAC5B,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC;YACnB,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC;SACnC;QAED,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;YACnC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBACjC,CAAC,CAAC,cAAc,EAAE,CAAC;gBACnB,CAAC,CAAC,iBAAiB,GAAG,KAAK,CAAC;YAC9B,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;SACjC;IACH,CAAC;IAED,gEAAgE;IACzD,sBAAsB,CAAC,CAAY;QACxC,IAAI,CAAC,CAAC,MAAM,EAAE;YACZ,OAAO;SACR;QACD,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;QAChB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC;IA4BM,iBAAiB,CACtB,cAAgC,EAChC,mBAAqC,EACrC,aAAsB;QAEtB,IAAI,IAAI,CAAC,6BAA6B,EAAE;YACtC,MAAM,0CAA0C,CAAC;SAClD;QACD,IAAI,IAAI,GAAuB,SAAS,CAAC;QAEzC,8EAA8E;QAC9E,IAAI,OAAO,mBAAmB,KAAK,QAAQ,EAAE;YAC3C,IAAI,GAAG,mBAAmB,CAAC;SAC5B;aAAM,IAAI,OAAO,mBAAmB,KAAK,QAAQ,EAAE;YAClD,aAAa,GAAG,mBAAmB,CAAC;SACrC;QAED,aAAa,GAAG,aAAa,IAAI,cAAc,CAAC,IAAI,CAAC;QACrD,IAAI,KAAK,GAAG,KAAK,CAAC;QAClB,IAAI,IAAI,KAAK,SAAS,EAAE;YACtB,6CAA6C;YAC7C,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YACpD,IAAI,IAAI,KAAK,SAAS,EAAE;gBACtB,IAAI,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBACpC,KAAK,GAAG,IAAI,CAAC;aACd;SACF;QAED,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC/C,IAAI,IAAI,EAAE;YACR,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,qBAAqB,EAAE,CAAC;aAC9B;YACD,MAAM,sBAAsB,aAAa,cAAc,IAAI,mCAAmC,IAAI,CAAC,aAAa,EAAE,CAAC;SACpH;QACD,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QAChD,IAAI,GAAG,IAAI,aAAa,CAAC,cAAc,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;QAC9D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC/B,OAAO,CAAC,GAAG,CACT,sDAAsD,EACtD,aAAa,EACb,IAAI,EACJ,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAC9B,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;OAWG;IACI,qBAAqB,CAAC,aAAqB,EAAE,IAAY;QAC9D,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IACrD,CAAC;IAED,4EAA4E;IACrE,SAAS,CAAC,CAAQ;QACvB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IAED,uGAAuG;IAChG,YAAY,CAAC,CAAQ;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACvC,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE;YACd,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;SAChC;QACD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,kEAAkE;IAC3D,cAAc,CAAC,QAA6B;QACjD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IAED;;;;;;;;;;;;;OAaG;IACI,MAAM,CAAC,IAAY;QACxB,OAAO,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAChC,CAAC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACI,KAAK,CAAC,IAAY;QACvB,OAAO,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC/B,CAAC;IAkCM,MAAM,CAAC,CAAW,EAAE,WAA2C;QACpE,OAAO,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7B,CAAC;IAED;;;;;OAKG;IACI,4BAA4B;QACjC,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC;IAC5C,CAAC;IAED;;;;;;;;;OASG;IACI,KAAK;QACV,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC;QAC1C,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAEO,cAAc;QACpB,IAAI,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACjD,IAAI,CAAC,aAAa,EAAE;YAClB,aAAa,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAC1C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;SACvD;QAED,MAAM,YAAY,GAAG,aAAa,CAAC;QAEnC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YAC5B,IAAI,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,EAAE;gBAC1B,OAAO;aACR;YACD,IAAI,KAAK,GAAG,CAAC,CAAC,MAA2B,CAAC;YAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;gBAC7B,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;aACnC;YACD,KAAK,GAAG,KAAK,IAAI,YAAY,CAAC;YAC9B,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC/B,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1F,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACI,IAAI,CAA6B,CAAI;QAC1C,OAAO,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAQ,CAAC;IACzC,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACI,QAAQ,CAAC,IAAY;QAC1B,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAChC,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;;;;;OAUG;IACI,QAAQ,CAAC,KAAa,EAAE,GAAW,EAAE,KAAa;QACtD,KAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACrC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACnB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;OAOG;IACI,QAAQ,CAAC,GAAW,EAAE,KAAa;QACxC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC/B,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;;;OAaG;IACI,sBAAsB,CAAC,GAAG,UAAgC;QAC/D,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC1C,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;SAClF;IACH,CAAC;IAED;;;;;OAKG;IACI,gBAAgB;QACrB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YAC1B,CAAC,CAAC,OAAO,EAAE,CAAC;QACd,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;CACF"}
|