@woosh/meep-engine 2.125.1 → 2.126.1

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/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "description": "Pure JavaScript game engine. Fully featured and production ready.",
6
6
  "type": "module",
7
7
  "author": "Alexander Goldring",
8
- "version": "2.125.1",
8
+ "version": "2.126.1",
9
9
  "main": "build/meep.module.js",
10
10
  "module": "build/meep.module.js",
11
11
  "exports": {
@@ -1 +1 @@
1
- {"version":3,"file":"EntityComponentDataset.d.ts","sourceRoot":"","sources":["../../../../src/engine/ecs/EntityComponentDataset.js"],"names":[],"mappings":"AAyHA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,+CAfgB,QAAQ,CAAC,MAAM;IAiB3B;;;;OAIG;IACH,wBAA+B;IAE/B;;;;;OAKG;IACH,yBAAsC;IAEtC;;;;;;;;;OASG;IACH,2BAAkC;IAElC;;;;;OAKG;IACH,yBAAsB;IAEtB;;;;OAIG;IACH,4BAAgC;IAEhC;;;;OAIG;IACH,2BAAuB;IAEvB;;;OAGG;IACH,mBAAgB;IAEhB;;;;OAIG;IACH,oBAAgB;IAEhB;;;;;;;OAOG;IACH,mBAAe;IAEf;;;OAGG;IACH,0BAFU,MAAM,CAAC,MAAM,CAAC,CAEO;IAE/B;;;OAGG;IACH,0BAFU,MAAM,CAEe;IAG/B;;;;OAIG;IACH,+BAA4B;IAE5B;;;;OAIG;IACH,kCAA+B;IAE/B;;;OAGG;IACH,kBAAe;IAGf;;;;;;OAMG;IACH,iBALa,CAAC,EAAE,CAAC,UACN,GAAG,kBACH,CAAC,GACC,OAAO,CAAC,CAAC,CAAC,CAoCtB;IAED;;;;;OAKG;IACH,sBAJW,cAAc,cACd,OAAO,GACL,OAAO,CAqDnB;IAED;;;;;OAKG;IACH,yBAJW,cAAc,cACd,OAAO,GACL,OAAO,CA4DnB;IAED;;;OAGG;IACH,kBAFa,MAAM,CAIlB;IAED;;;OAGG;IACH,yBAFa,MAAM,CAIlB;IAED;;;;;OAKG;IACH,sBAJW,MAAM,qBACN,EAAE,SAmCZ;IAED;;;;OAIG;IACH,4BAHW,MAAM,GACJ,EAAE,CAyBd;IAED;;;;;OAKG;IACH,yBAJW,KAAK,EAAE,GACL,IAAI,CA0LhB;IAED;;;;OAIG;IACH,mCAHW,KAAK,EAAE,GACL,OAAO,CAenB;IAED;;;;;OAKG;IACH,gCAHW,KAAK,WAAS,GACb,OAAO,CASlB;IAED;;;OAGG;IACH,uBAFa,KAAK,EAAE,CAInB;IAED;;;;OAIG;IACH,kCAHW,KAAK,EAAE,GACL,OAAO,CAgBnB;IAED;;;;OAIG;IACH,4BAHW,KAAK,WAAS,GACZ,OAAO,CAanB;IAED;;;;OAIG;IACH,8BAHW,KAAK,GACH,OAAO,CAkBnB;IAED;;;;OAIG;IACH,iCAHW,MAAM,GACJ,IAAI,CAmBhB;IAED;;;;OAIG;IACH,+BAHW,MAAM,GACJ,MAAM,CAOlB;IAED;;;;OAIG;IACH,2BAiBC;IAED;;;OAGG;IACH,gBAFa,MAAM,CAQlB;IAED;;;;;OAKG;IACH,gCAJW,MAAM,GAEJ,IAAI,CAQhB;IAED;;;;OAIG;IACH,0BAHW,MAAM,GACJ,OAAO,CAMnB;IAED;;;;OAIG;IACH,qCAHW,MAAM,GACJ,OAAO,CAMnB;IAED;;;;OAIG;IACH,wBAHW,MAAM,GACJ,OAAO,CAwCnB;IAED;;;;;OAKG;IACH,2BAHW,MAAM,EAAE,GACN,IAAI,CAQhB;IAED;;;;;OAKG;IACH,qCAJW,MAAM,SACN,KAAK,GACH,IAAI,CAUhB;IAED;;;;;OAKG;IACH,4CAJW,MAAM,mBACN,MAAM,GACJ,IAAI,CAiBhB;IAED;;;;;;;OAOG;IACH,mDAgBC;IAED;;;;OAIG;IACH,iCAHW,WAAS,KAAK,GACZ,MAAM,CAalB;IAED;;;;OAIG;IACH,sBAJa,CAAC,SACH,CAAC,GACC,MAAM,CAUlB;IAED;;;;;;;OAOG;IACH,gBAJa,CAAC,kBACH,KAAK,CAAC,CAAC,CAAC,GACN;QAAC,MAAM,EAAC,MAAM,CAAC;QAAC,SAAS,EAAC,CAAC,CAAA;KAAC,CA2BxC;IAED;;;;;;;OAOG;IACH,qBALa,CAAC,aACH,MAAM,sBACN,CAAC,GACC,IAAI,CAqBhB;IAED;;;;;;OAMG;IACH,4BANa,CAAC,aACH,MAAM,mBACN,MAAM,sBACN,CAAC,GACC,IAAI,CA4BhB;IAED;;;;;OAKG;IACH,oBALa,CAAC,aACH,MAAM,mBACN,MAAM,GACJ,CAAC,GAAC,SAAS,CASvB;IAED;;;;;;OAMG;IACH,aALa,CAAC,aACH,MAAM,SACN,KAAK,CAAC,CAAC,CAAC,GACN,OAAO,CAInB;IAED;;;;;OAKG;IACH,aALa,CAAC,aACH,MAAM,SACN,KAAK,CAAC,CAAC,CAAC,GACN,CAAC,GAAC,SAAS,CAevB;IAED;;;;;;;OAOG;IACH,iBANa,CAAC,aACH,MAAM,SACN,KAAK,CAAC,CAAC,CAAC,GACN,CAAC,CAWb;IAED;;;;;;;OAOG;IACH,sDALW,KAAK,gCAEL,GAAC,GACC,IAAI,CAiBhB;IAED;;;;;;;;;;;;;OAaG;IACH,0CAJW,IAAS,IAAO,EAAP,OAAO,KAAE,OAAO,YACzB,MAAM,GACJ,IAAI,CAyEhB;IAED;;;;;;;OAOG;IACH,uEAFa,IAAI,CA0DhB;IAkBD;;;;;;OAMG;IACH,mBANa,CAAC,SACH,KAAK,CAAC,CAAC,CAAC,0BAER,GAAC,GACC,IAAI,CAahB;IAED;;;;;;OAMG;IACH,2CALW,MAAM,+BAEN,GAAC,GACC,IAAI,CAShB;IAED;;;;;;;OAOG;IACH,+CAyBC;IAED;;;;;;OAMG;IACH,iDAsBC;IAED;;;;;OAKG;IACH,wCAgCC;IAED;;;;;OAKG;IACH,0CA2BC;IAED;;;;;;;;;OASG;IACH,kCARW,MAAM,gCAEN,GAAC,GACC,IAAI,CAuBhB;IAED;;;;;;;;;OASG;IACH,qCARW,MAAM,gCAEN,GAAC,GACC,OAAO,CAkCnB;IAED;;;;;;;;;;OAUG;IACH,+BATW,MAAM,cACN,MAAM,YACN,SAAU,YACV,GAAC,GACC,IAAI,CAiChB;IAED;;;;;;;;;;OAUG;IACH,kCATW,MAAM,cACN,MAAM,gCAEN,GAAC,GACC,OAAO,CA2CnB;IAED;;;;;;;OAOG;IACH,sDAHa,IAAI,CAkBhB;IAED;;;;OAIG;IACH,+BAHW,MAAM,GACJ,OAAO,CAenB;IAED;;;;OAIG;IACH,SAHa,IAAI,CAShB;IAED;;;;;OAKG;IACH,YAHa,IAAI,CAehB;IAED;;;;OAIG;IACH,wBAJa,CAAC,cACH,MAAM,GACJ,IAAI,cAAU,KAAK,CAAC,CAAC,CAAC,CAiBlC;IAED;;;;;OAKG;IACH,mBAHW,sBAAsB,6BACpB,IAAI,CA6DhB;IAED;;;;;OAKG;IACH,2EAFa,IAAI,CAgDhB;IAED;;;OAGG;IACH,WAFa,OAAO,CAInB;IAED;;;;;OAKG;IACH,8CAHW,GAAC,GACC,IAAI,CAgBhB;IAGL;;;OAGG;IACH,mCAFU,OAAO,CAEwC;IAIzD;;OAEG;IACH,4BAzmBgB,SAAS,CAAC,MAAM,CAAC,CAymBoB;IAErD;;OAEG;IACH,iCA/Ye,MAAM,gCAEN,GAAC,KACC,OAAO,CA4Y+B;IAhnBnD;;;OAGG;IACH,qBAFY,SAAS,CAAC,MAAM,CAAC,CAY5B;CAglBJ;mBAv9DkB,oCAAoC"}
1
+ {"version":3,"file":"EntityComponentDataset.d.ts","sourceRoot":"","sources":["../../../../src/engine/ecs/EntityComponentDataset.js"],"names":[],"mappings":"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"}
@@ -413,6 +413,7 @@ export class EntityComponentDataset {
413
413
  }
414
414
  }
415
415
 
416
+ // clear out observer's state
416
417
  observer.dataset = null;
417
418
 
418
419
  return foundFlag;
@@ -90,7 +90,6 @@ export class EntityManager {
90
90
  * @private
91
91
  */
92
92
  private updateExecutionOrder;
93
- detachDataSet(): void;
94
93
  /**
95
94
  * Get list of all components referenced by active systems
96
95
  * @returns {Class[]}
@@ -103,6 +102,7 @@ export class EntityManager {
103
102
  * @throws {Error} if dataset is incompatible with current system set
104
103
  */
105
104
  attachDataSet(dataset: EntityComponentDataset): void;
105
+ detachDataSet(): void;
106
106
  /**
107
107
  * @template T
108
108
  * @param {Class<T>} systemClass
@@ -1 +1 @@
1
- {"version":3,"file":"EntityManager.d.ts","sourceRoot":"","sources":["../../../../src/engine/ecs/EntityManager.js"],"names":[],"mappings":"iCAeU,MAAM;;;;;;;;;AAWhB;;;GAGG;AACH;IAEI;;;OAGG;IACH,kBAFU,iCAAQ,CAEL;IAEb;;;;OAIG;IACH,uCAA2B;IAE3B;;;;OAIG;IACH,iCAA4B;IAE5B;;OAEG;IACH;;;QAGI;;WAEG;qBADO,MAAM,iCAAQ;;MAI1B;IAEF;;;OAGG;IACH,OAFU,kBAAkB,CAEO;IAEnC;;;;;;OAMG;IACH,gDAA2C;IAE3C;;;;;;;;;OASG;IACH,qBAFU,MAAM,CAEqB;IAErC;;;;;OAKG;IACH,wCAFU,MAAM,CAE4B;IAE5C;;;;OAIG;IACH,SAFU,sBAAsB,CAEjB;IAEf;;;;;OAKG;IACH,uCAAsC;IAEtC;;;OAGG;IACH,6BAmFC;IAED,sBAkBC;IAED;;;OAGG;IACH,uBAFa,KAAK,EAAE,CAuBnB;IAED;;;;;OAKG;IACH,uBAJW,sBAAsB,QA+BhC;IAED;;;;OAIG;IACH,UAJa,CAAC,eACH,KAAK,CAAC,CAAC,CAAC,GACN,OAAO,CAInB;IAED;;;;OAIG;IACH,UAJa,CAAC,eACH,KAAK,CAAC,CAAC,CAAC,GACN,CAAC,GAAC,IAAI,CAkBlB;IAED;;;;;OAKG;IACH,wBAJa,CAAC,aACH,MAAM,GACJ,IAAI,GAAC,KAAK,CAAC,CAAC,CAAC,CAiBzB;IAGD;;;OAGG;IACH,oBAFW,MAAM,QAoEhB;IAED;;;;;OAKG;IACH,iEAoEC;IAED;;;;OAIG;IACH,uDAFa,OAAO,CAAC,OAAO,CAAC,CAyC5B;IAED;;;;;OAKG;IACH,mBA6BC;IAED;;;;;OAKG;IACH,oBAsDC;IAED;;;;;OAKG;IACH,kEAwEC;IAED;;;;OAIG;IACH,2BAHW,KAAK,GACH,OAAO,iCAAS,CA0B5B;IAED;;;;;OAKG;IACH,kCAJW,KAAK,SACL,WAAW,GACT,OAAO,iCAAS,CAsB5B;IAED;;;;;OAKG;IACH,mEAsEC;CACJ;uBA10BmC,aAAa;mBAP9B,oCAAoC"}
1
+ {"version":3,"file":"EntityManager.d.ts","sourceRoot":"","sources":["../../../../src/engine/ecs/EntityManager.js"],"names":[],"mappings":"iCAeU,MAAM;;;;;;;;;AAWhB;;;GAGG;AACH;IAEI;;;OAGG;IACH,kBAFU,iCAAQ,CAEL;IAEb;;;;OAIG;IACH,uCAA2B;IAE3B;;;;OAIG;IACH,iCAA4B;IAE5B;;OAEG;IACH;;;QAGI;;WAEG;qBADO,MAAM,iCAAQ;;MAI1B;IAEF;;;OAGG;IACH,OAFU,kBAAkB,CAEO;IAEnC;;;;;;OAMG;IACH,gDAA2C;IAE3C;;;;;;;;;OASG;IACH,qBAFU,MAAM,CAEqB;IAErC;;;;;OAKG;IACH,wCAFU,MAAM,CAE4B;IAE5C;;;;OAIG;IACH,SAFU,sBAAsB,CAEjB;IAEf;;;;;OAKG;IACH,uCAAsC;IAEtC;;;OAGG;IACH,6BAmFC;IAED;;;OAGG;IACH,uBAFa,KAAK,EAAE,CAuBnB;IAED;;;;;OAKG;IACH,uBAJW,sBAAsB,QAwChC;IAGD,sBA2BC;IAED;;;;OAIG;IACH,UAJa,CAAC,eACH,KAAK,CAAC,CAAC,CAAC,GACN,OAAO,CAInB;IAED;;;;OAIG;IACH,UAJa,CAAC,eACH,KAAK,CAAC,CAAC,CAAC,GACN,CAAC,GAAC,IAAI,CAkBlB;IAED;;;;;OAKG;IACH,wBAJa,CAAC,aACH,MAAM,GACJ,IAAI,GAAC,KAAK,CAAC,CAAC,CAAC,CAiBzB;IAGD;;;OAGG;IACH,oBAFW,MAAM,QAoEhB;IAED;;;;;OAKG;IACH,iEAoEC;IAED;;;;OAIG;IACH,uDAFa,OAAO,CAAC,OAAO,CAAC,CA2C5B;IAED;;;;;OAKG;IACH,mBA6BC;IAED;;;;;OAKG;IACH,oBA0DC;IAED;;;;;OAKG;IACH,kEAwEC;IAED;;;;OAIG;IACH,2BAHW,KAAK,GACH,OAAO,iCAAS,CA0B5B;IAED;;;;;OAKG;IACH,kCAJW,KAAK,SACL,WAAW,GACT,OAAO,iCAAS,CAsB5B;IAED;;;;;OAKG;IACH,mEAsEC;CACJ;uBAn2BmC,aAAa;mBAP9B,oCAAoC"}
@@ -202,26 +202,6 @@ export class EntityManager {
202
202
  // console.timeEnd('updateExecutionOrder')
203
203
  }
204
204
 
205
- detachDataSet() {
206
- const dataset = this.dataset;
207
-
208
- if (dataset === null) {
209
- //no dataset attached
210
- return;
211
- }
212
-
213
- //remove system observers
214
- for (const [_, observer] of this.systemObservers) {
215
- if (!observer.isConnected) {
216
- continue;
217
- }
218
-
219
- dataset.removeObserver(observer, true);
220
- }
221
-
222
- this.dataset = null;
223
- }
224
-
225
205
  /**
226
206
  * Get list of all components referenced by active systems
227
207
  * @returns {Class[]}
@@ -274,6 +254,15 @@ export class EntityManager {
274
254
 
275
255
  this.dataset = dataset;
276
256
 
257
+ for (const system of this.systems) {
258
+ if (system.state.get() !== SystemState.RUNNING) {
259
+ // not ready
260
+ continue;
261
+ }
262
+
263
+ system.handleDatasetAttached(dataset);
264
+ }
265
+
277
266
  for (const [s, observer] of this.systemObservers) {
278
267
  if (s.state.get() !== SystemState.RUNNING) {
279
268
  continue;
@@ -284,6 +273,36 @@ export class EntityManager {
284
273
 
285
274
  }
286
275
 
276
+
277
+ detachDataSet() {
278
+ const dataset = this.dataset;
279
+
280
+ if (dataset === null) {
281
+ //no dataset attached
282
+ return;
283
+ }
284
+
285
+ //remove system observers
286
+ for (const [_, observer] of this.systemObservers) {
287
+ if (!observer.isConnected) {
288
+ continue;
289
+ }
290
+
291
+ dataset.removeObserver(observer, true);
292
+ }
293
+
294
+ for (const system of this.systems) {
295
+ if (system.state.get() !== SystemState.RUNNING) {
296
+ // not running
297
+ continue;
298
+ }
299
+
300
+ system.handleDatasetAttached(dataset);
301
+ }
302
+
303
+ this.dataset = null;
304
+ }
305
+
287
306
  /**
288
307
  * @template T
289
308
  * @param {Class<T>} systemClass
@@ -517,7 +536,9 @@ export class EntityManager {
517
536
  this.__execution_order_needs_update = true;
518
537
 
519
538
  if (this.dataset !== null) {
520
- this.dataset.removeObserver(systemObserver);
539
+ // remove observed and unlink entities
540
+ this.dataset.removeObserver(systemObserver, true);
541
+ system.handleDatasetDetached(this.dataset);
521
542
  }
522
543
 
523
544
  await new Promise((resolve, reject) => {
@@ -608,6 +629,10 @@ export class EntityManager {
608
629
 
609
630
  assert.notEqual(i, -1, "System was not found in the system list");
610
631
 
632
+ if (self.dataset !== null) {
633
+ system.handleDatasetAttached(self.dataset);
634
+ }
635
+
611
636
  const observer = self.systemObservers.get(system);
612
637
 
613
638
  if (observer !== undefined) {
@@ -1 +1 @@
1
- {"version":3,"file":"EntityObserver.d.ts","sourceRoot":"","sources":["../../../../src/engine/ecs/EntityObserver.js"],"names":[],"mappings":"AAGA;IAoBI;;;;;;;OAOG;IACH,0FAHW,GAAC,EA+CX;IAvED;;;OAGG;IACH,eAFU,MAAM,CAEa;IAE7B;;;;OAIG;IACH,uBAFU,MAAM,EAAE,CAES;IAE3B;;;OAGG;IACH,SAFU,sBAAsB,GAAC,IAAI,CAEtB;IA0BX;;OAEG;IACH,oBAFU,MAAM,CAE2B;IAE3C;;;OAGG;IACH,kBAFU,CAAS,IAAK,eAAC,CAEgB;IAEzC;;;OAGG;IACH,gBAFU,CAAS,IAAK,eAAC,CAEW;IAEpC;;;OAGG;IACH,sBAAoC;IAEpC;;;OAGG;IACH,SAFU,GAAC,CAEW;IAG1B;;;OAGG;IACH,qCAqBC;IAED;;;OAGG;IACH,iBAFW,sBAAsB,QAIhC;IAED;;;OAGG;IACH,mBAFY,OAAO,CAIlB;IAED,mBAIC;CACJ;uBA5HsB,6BAA6B"}
1
+ {"version":3,"file":"EntityObserver.d.ts","sourceRoot":"","sources":["../../../../src/engine/ecs/EntityObserver.js"],"names":[],"mappings":"AAGA;;;;GAIG;AACH;IAoBI;;;;;;;OAOG;IACH,0FAHW,GAAC,EA+CX;IAvED;;;OAGG;IACH,eAFU,MAAM,CAEa;IAE7B;;;;OAIG;IACH,uBAFU,MAAM,EAAE,CAES;IAE3B;;;OAGG;IACH,SAFU,sBAAsB,GAAC,IAAI,CAEtB;IA0BX;;OAEG;IACH,oBAFU,MAAM,CAE2B;IAE3C;;;OAGG;IACH,kBAFU,CAAS,IAAK,eAAC,CAEgB;IAEzC;;;OAGG;IACH,gBAFU,CAAS,IAAK,eAAC,CAEW;IAEpC;;;OAGG;IACH,sBAAoC;IAEpC;;;OAGG;IACH,SAFU,GAAC,CAEW;IAG1B;;;OAGG;IACH,qCAqBC;IAED;;;OAGG;IACH,iBAFW,sBAAsB,QAQhC;IAED;;;OAGG;IACH,mBAFY,OAAO,CAIlB;IAED;;OAEG;IACH,mBAQC;CACJ;uBA5IsB,6BAA6B"}
@@ -1,6 +1,11 @@
1
1
  import { assert } from "../../core/assert.js";
2
2
  import { BitSet } from "../../core/binary/BitSet.js";
3
3
 
4
+ /**
5
+ * Signaling component query.
6
+ * Enables definition of a component class tuple, which will then be observed; for any entity that completes the tuple - a notification will be dispatched, same for any broken tuples.
7
+ * see {@link EntityComponentDataset.addObserver}/{@link EntityComponentDataset.removeObserver}.
8
+ */
4
9
  export class EntityObserver {
5
10
  /**
6
11
  *
@@ -16,7 +21,7 @@ export class EntityObserver {
16
21
  componentIndexMapping = [];
17
22
 
18
23
  /**
19
- *
24
+ * Currently attached dataset. `null` when not attached.
20
25
  * @type {EntityComponentDataset|null}
21
26
  */
22
27
  dataset = null;
@@ -103,10 +108,14 @@ export class EntityObserver {
103
108
  }
104
109
 
105
110
  /**
106
- *
111
+ * A shortcut for {@link EntityComponentDataset.addObserver}
107
112
  * @param {EntityComponentDataset} dataset
108
113
  */
109
114
  connect(dataset) {
115
+ if (this.dataset !== null) {
116
+ throw new Error("Already attached to a dataset, disconnect first");
117
+ }
118
+
110
119
  dataset.addObserver(this, true);
111
120
  }
112
121
 
@@ -118,7 +127,14 @@ export class EntityObserver {
118
127
  return this.dataset === null;
119
128
  }
120
129
 
130
+ /**
131
+ * A shortcut for {@link EntityComponentDataset.removeObserver}
132
+ */
121
133
  disconnect() {
134
+ if (this.dataset === null) {
135
+ // not attached
136
+ return;
137
+ }
122
138
  //de-register updates
123
139
  this.dataset.removeObserver(this);
124
140
  this.dataset = null;
@@ -1 +1 @@
1
- {"version":3,"file":"System.d.ts","sourceRoot":"","sources":["../../../../src/engine/ecs/System.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,oBArBa,CAAC;IAuBV;;;;;OAKG;IACH,yBAFU,aAAa,CAEF;IAErB;;;;OAIG;IACH,gBAFU,aAAa,CAAE,WAAW,CAAC,CAEU;IAE/C;;;;OAIG;IACH,oBAAkB;IAElB;;;;;;;;;OASG;IACH,iBAFU,2BAA2B,EAAE,CAElB;IAGrB;;OAEG;IACH,mCAcC;IAED;;;;OAIG;IACH,sBAJa,CAAC,SACH,CAAC,GACA,MAAM,CA8BjB;IAED;;;;;OAKG;IACH,uBAJW,aAAa,0DAOvB;IAED;;;;;OAKG;IACH,wBAJW,aAAa,0DAMvB;IAED,wCAEC;IAED,0CAEC;IAIL;;;OAGG;IACH,mBAFU,OAAO,CAEQ;IAEzB;;;;OAIG;IACH,yBAA4B;IAG5B;;;OAGG;IACH,oBAAuB;CApBtB;;;;0BA2CS,MAAM;;;;;;;;0BAjMU,mCAAmC;qBADxC,6BAA6B"}
1
+ {"version":3,"file":"System.d.ts","sourceRoot":"","sources":["../../../../src/engine/ecs/System.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,oBArBa,CAAC;IAuBV;;;;;OAKG;IACH,yBAFU,aAAa,CAEF;IAErB;;;;OAIG;IACH,gBAFU,aAAa,CAAE,WAAW,CAAC,CAEU;IAE/C;;;;;OAKG;IACH,oBAAkB;IAElB;;;;;;;;;OASG;IACH,iBAFU,2BAA2B,EAAE,CAElB;IAGrB;;OAEG;IACH,mCAcC;IAED;;;;OAIG;IACH,sBAJa,CAAC,SACH,CAAC,GACA,MAAM,CA8BjB;IAED;;;;;;OAMG;IACH,uBAJW,aAAa,0DAOvB;IAED;;;;;;;OAOG;IACH,wBAJW,aAAa,0DAMvB;IAGD;;;;OAIG;IACH,wCAEC;IAED;;;;OAIG;IACH,0CAEC;IAED;;;;;;;;OAQG;IACH,+BAFW,sBAAsB,QAIhC;IAED;;;;;;;;OAQG;IACH,+BAFW,sBAAsB,QAIhC;IAIL;;;OAGG;IACH,mBAFU,OAAO,CAEQ;IAEzB;;;;OAIG;IACH,yBAA4B;IAG5B;;;OAGG;IACH,oBAAuB;CApBtB;;;;0BA2CS,MAAM;;;;;;;;0BA1OU,mCAAmC;qBADxC,6BAA6B"}
@@ -49,8 +49,9 @@ export class System {
49
49
  state = new ObservedValue(SystemState.INITIAL);
50
50
 
51
51
  /**
52
- * Components which have to be present before the system links an entity
53
- * NOTE: do not modify this while the system is running
52
+ * Component classes which have to be present before the system links an entity.
53
+ * NOTE: do not modify this while the system is running.
54
+ * see {@link link} and {@link unlink} methods.
54
55
  * @type {Array}
55
56
  */
56
57
  dependencies = [];
@@ -123,10 +124,11 @@ export class System {
123
124
  }
124
125
 
125
126
  /**
126
- *
127
+ * Invoked before system is used
128
+ * Managed by {@EntityManager}'s lifecycle. Do not call this manually.
127
129
  * @param {EntityManager} entityManager
128
- * @param {function} readyCallback
129
- * @param {function} errorCallback
130
+ * @param {function} readyCallback must be called by the system when the startup process is finished
131
+ * @param {function} errorCallback must be called by the system if any issues occur during startup process that prevent completion
130
132
  */
131
133
  startup(entityManager, readyCallback, errorCallback) {
132
134
  this.entityManager = entityManager;
@@ -134,7 +136,9 @@ export class System {
134
136
  }
135
137
 
136
138
  /**
137
- *
139
+ * Invoked when system is no longer needed.
140
+ * Good place to clean up any held resourced and terminate owned processes.
141
+ * Managed by {@EntityManager}'s lifecycle. Do not call this manually.
138
142
  * @param {EntityManager} entityManager
139
143
  * @param {function} readyCallback
140
144
  * @param {function} errorCallback
@@ -143,12 +147,49 @@ export class System {
143
147
  readyCallback();
144
148
  }
145
149
 
146
- link(component, entity) {
147
150
 
151
+ /**
152
+ * Called automatically when an entity gets a complete component tuple {@link this.dependencies}.
153
+ * Inputs are the same as dependencies, only instances instead of classes, plus there is an extra argument at the end, which is the entity ID.
154
+ * see {@link EntityObserver} for more implementation detail
155
+ */
156
+ link(component, entity) {
157
+ // override as necessary
148
158
  }
149
159
 
160
+ /**
161
+ * Called automatically when an entity breaks component tuple {@link this.dependencies}.
162
+ * Inputs are the same as dependencies, only instances instead of classes, plus there is an extra argument at the end, which is the entity ID.
163
+ * see {@link EntityObserver} for more implementation detail
164
+ */
150
165
  unlink(component, entity) {
166
+ // override as necessary
167
+ }
151
168
 
169
+ /**
170
+ * Invoked when a dataset is attached to the system, this happens before any entities are linked.
171
+ * Happens as a result of {@link EntityManager.attachDataSet}.
172
+ * It is generally advised *NOT* to modify the dataset here.
173
+ * Managed by {@EntityManager}'s lifecycle. Do not call this manually.
174
+ * Entirely optional, provides advanced functionality for situations where datasets are being switched on the fly.
175
+ * see {@link handleDatasetDetached} for the reverse.
176
+ * @param {EntityComponentDataset} dataset
177
+ */
178
+ handleDatasetAttached(dataset) {
179
+ // override as necessary
180
+ }
181
+
182
+ /**
183
+ * Invoked when dataset is about to be detached from the system, this happens after all entities have been unlinked.
184
+ * Happens as a result of {@link EntityManager.detachDataSet}.
185
+ * It is generally advised *NOT* to modify the dataset here.
186
+ * Managed by {@EntityManager}'s lifecycle. Do not call this manually.
187
+ * Entirely optional, provides advanced functionality for situations where datasets are being switched on the fly.
188
+ * see {@link handleDatasetAttached} for the reverse.
189
+ * @param {EntityComponentDataset} dataset
190
+ */
191
+ handleDatasetDetached(dataset) {
192
+ // override as necessary
152
193
  }
153
194
 
154
195
  }
@@ -5,6 +5,7 @@ import {Transform} from "../transform/Transform";
5
5
  export class EntityNode {
6
6
  constructor(entity?: Entity)
7
7
 
8
+ readonly root: EntityNode
8
9
  readonly parent: EntityNode | null
9
10
  readonly entity: Entity
10
11
 
@@ -1 +1 @@
1
- {"version":3,"file":"EntityNode.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/parent/EntityNode.js"],"names":[],"mappings":"AAYA;;GAEG;AACH;IAiJI;;;;OAIG;IACH,qCAHW,GAAC,GACA,UAAU,CAYrB;IA/HD;;;OAGG;IACH,qBAFW,MAAM,EAWhB;IA7CD;;;;OAIG;IACH,iBAAgB;IAEhB;;;;OAIG;IACH,mBAAgB;IAEhB;;;;OAIG;IACH,oBAA8B;IAE9B;;;MAGE;IAEF;;;OAGG;IACH,OAFU,MAAM,CAEM;IAQlB;;;;OAIG;IACH,iBAAsB;IAI1B;;;;OAIG;IACH,cAHW,MAAM,GAAC,eAAe,GACpB,IAAI,CAIhB;IAED;;;;OAIG;IACH,gBAHW,MAAM,GAAC,eAAe,GACpB,IAAI,CAIhB;IAED;;;;OAIG;IACH,gBAHW,MAAM,GAAC,eAAe,SACtB,OAAO,QAQjB;IAED;;;;OAIG;IACH,cAHW,MAAM,GAAC,eAAe,GACpB,OAAO,CAInB;IAED;;;;OAIG;IACH,iCAFW,GAAC,QAaX;IAED;;;;OAIG;IACH,yCAFW,GAAC,QAIX;IAED;;;OAGG;IACH,gBAFY,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAItC;IAED;;;OAGG;IACH,8BAgBC;IAmBD;;;;OAIG;IACH,8BAaC;IAED;;OAEG;IACH,iBAFa,SAAS,CAIrB;IAUD;;;OAGG;IACH,iBAFW,UAAU,GAAC,IAAI,EA2CzB;IArDD;;;OAGG;IACH,cAFY,UAAU,GAAC,IAAI,CAI1B;IAiDD;;;OAGG;IACH,cAFY,MAAM,CAIjB;IAED;;;;OAIG;IACH,eAHW,UAAU,GACR,OAAO,CAuBnB;IAED;;;;OAIG;IACH,kBAHW,UAAU,GACR,OAAO,CAenB;IAED,uBAEC;IAED,wBAWC;IAED,wBAOC;IAED;;;OAGG;IACH,WAFW,sBAAsB,QAsDhC;IAGD,gBA4BC;IAGL;;;OAGG;IACH,uBAFU,OAAO,CAEgB;CANhC;mBA1akB,uCAAuC;gCAI1B,sBAAsB;0BAD5B,2BAA2B;mBAFlC,cAAc"}
1
+ {"version":3,"file":"EntityNode.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/parent/EntityNode.js"],"names":[],"mappings":"AAYA;;GAEG;AACH;IAiJI;;;;OAIG;IACH,qCAHW,GAAC,GACA,UAAU,CAYrB;IA/HD;;;OAGG;IACH,qBAFW,MAAM,EAWhB;IA7CD;;;;OAIG;IACH,iBAAgB;IAEhB;;;;OAIG;IACH,mBAAgB;IAEhB;;;;OAIG;IACH,oBAA8B;IAE9B;;;MAGE;IAEF;;;OAGG;IACH,OAFU,MAAM,CAEM;IAQlB;;;;OAIG;IACH,iBAAsB;IAI1B;;;;OAIG;IACH,cAHW,MAAM,GAAC,eAAe,GACpB,IAAI,CAIhB;IAED;;;;OAIG;IACH,gBAHW,MAAM,GAAC,eAAe,GACpB,IAAI,CAIhB;IAED;;;;OAIG;IACH,gBAHW,MAAM,GAAC,eAAe,SACtB,OAAO,QAQjB;IAED;;;;OAIG;IACH,cAHW,MAAM,GAAC,eAAe,GACpB,OAAO,CAInB;IAED;;;;OAIG;IACH,iCAFW,GAAC,QAaX;IAED;;;;OAIG;IACH,yCAFW,GAAC,QAIX;IAED;;;OAGG;IACH,gBAFY,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAItC;IAED;;;OAGG;IACH,8BAgBC;IAmBD;;;;OAIG;IACH,8BAaC;IAED;;OAEG;IACH,iBAFa,SAAS,CAIrB;IAED;;;OAGG;IACH,YAFY,UAAU,CAQrB;IAUD;;;OAGG;IACH,iBAFW,UAAU,GAAC,IAAI,EA2CzB;IArDD;;;OAGG;IACH,cAFY,UAAU,GAAC,IAAI,CAI1B;IAiDD;;;OAGG;IACH,cAFY,MAAM,CAIjB;IAED;;;;OAIG;IACH,eAHW,UAAU,GACR,OAAO,CAuBnB;IAED;;;;OAIG;IACH,kBAHW,UAAU,GACR,OAAO,CAenB;IAED,uBAEC;IAED,wBAWC;IAED,wBAOC;IAED;;;OAGG;IACH,WAFW,sBAAsB,QAsDhC;IAGD,gBA4BC;IAGL;;;OAGG;IACH,uBAFU,OAAO,CAEgB;CANhC;mBAtbkB,uCAAuC;gCAI1B,sBAAsB;0BAD5B,2BAA2B;mBAFlC,cAAc"}
@@ -202,6 +202,18 @@ export class EntityNode {
202
202
  return this.__transform;
203
203
  }
204
204
 
205
+ /**
206
+ * Root of the hierarchy, will be `this` if node is already a root
207
+ * @return {EntityNode}
208
+ */
209
+ get root(){
210
+ let node = this;
211
+ while(node.__parent !== null){
212
+ node = node.__parent;
213
+ }
214
+ return node;
215
+ }
216
+
205
217
  /**
206
218
  *
207
219
  * @return {EntityNode|null}