@woosh/meep-engine 2.88.3 → 2.88.4

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.
@@ -57549,6 +57549,12 @@ class TerrainTile {
57549
57549
  */
57550
57550
  __initial_height_range = new NumericInterval(Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY);
57551
57551
 
57552
+ /**
57553
+ * Used to track number of times tile was built
57554
+ * @type {number}
57555
+ */
57556
+ version = 0;
57557
+
57552
57558
  constructor() {
57553
57559
 
57554
57560
  this.mesh.name = "TerrainTile";
@@ -58036,6 +58042,8 @@ class TerrainTile {
58036
58042
  // console.timeEnd('total');
58037
58043
  // console.groupEnd();
58038
58044
 
58045
+ this.version++;
58046
+
58039
58047
  return mesh;
58040
58048
  }
58041
58049
  }
@@ -58179,7 +58187,10 @@ class TerrainTileManager {
58179
58187
  for (let i = 0; i < n; i++) {
58180
58188
  const terrainTile = tiles[i];
58181
58189
 
58182
- if (!terrainTile.isBuilt && !terrainTile.isBuildInProgress) {
58190
+ if (
58191
+ !terrainTile.isBuilt
58192
+ && !terrainTile.isBuildInProgress
58193
+ ) {
58183
58194
 
58184
58195
  const bb = terrainTile.external_bvh;
58185
58196
 
@@ -58336,7 +58347,6 @@ class TerrainTileManager {
58336
58347
  }
58337
58348
 
58338
58349
  initializeTiles() {
58339
-
58340
58350
  const total_size = this.totalSize;
58341
58351
 
58342
58352
  const gridSize = total_size.clone();
@@ -58348,6 +58358,10 @@ class TerrainTileManager {
58348
58358
 
58349
58359
  const tiles = this.tiles;
58350
58360
 
58361
+ if (tiles.length > 0) {
58362
+ throw new Error(`There are already ${tiles.length} initialized tiles, those must be destroyed before initialization can happen`);
58363
+ }
58364
+
58351
58365
  //populate tiles
58352
58366
  const tile_resolution_y = gridSize.y;
58353
58367
  const tile_resolution_x = gridSize.x;
@@ -58651,13 +58665,20 @@ class TerrainTileManager {
58651
58665
  *
58652
58666
  * @param {number} x
58653
58667
  * @param {number} y
58654
- * @param {function} resolve
58655
- * @param {function} reject
58668
+ * @param {function(tile:TerrainTile)} resolve
58669
+ * @param {function(reason:*)} reject
58656
58670
  */
58657
58671
  build(x, y, resolve, reject) {
58658
58672
 
58659
- const tileIndex = this.computeTileIndex(x, y);
58660
- const tile = this.tiles[tileIndex];
58673
+ const tile_index = this.computeTileIndex(x, y);
58674
+
58675
+ const tile = this.tiles[tile_index];
58676
+
58677
+ if (tile.isBuildInProgress) {
58678
+ throw new Error('Tile is already in process of being built');
58679
+ }
58680
+
58681
+ const start_version = tile.version;
58661
58682
 
58662
58683
  tile.isBuilt = false;
58663
58684
  tile.isBuildInProgress = true;
@@ -58673,17 +58694,29 @@ class TerrainTileManager {
58673
58694
  ).then((tileData) => {
58674
58695
 
58675
58696
  //check that the tile under index is still the same tile
58676
- if (this.tiles[tileIndex] !== tile) {
58697
+ if (this.tiles[tile_index] !== tile) {
58677
58698
  //the original tile was destroyed
58678
58699
  reject('Original tile was destroyed during build process');
58679
58700
  return;
58680
58701
  }
58681
58702
 
58682
- if (!tile.isBuildInProgress) {
58683
- reject('Build request has been cancelled');
58703
+ if (tile.version !== start_version) {
58704
+ reject(`Tile version changed, likely due to concurrent build request. Expected version ${start_version}, actual version ${tile.version}`);
58684
58705
  return;
58685
58706
  }
58686
58707
 
58708
+ if (!tile.isBuildInProgress) {
58709
+ if (tile.isBuilt) {
58710
+ // tile already built
58711
+ resolve(tile);
58712
+ return;
58713
+ } else {
58714
+
58715
+ reject('Build request has been cancelled');
58716
+ return;
58717
+ }
58718
+ }
58719
+
58687
58720
  // const processName = 'building tile x = ' + x + ", y = " + y;
58688
58721
  // console.time(processName);
58689
58722
 
@@ -58705,7 +58738,14 @@ class TerrainTileManager {
58705
58738
  this.on.tileBuilt.send1(tile);
58706
58739
 
58707
58740
  resolve(tile);
58708
- }, reject);
58741
+ }, (reason) => {
58742
+
58743
+ tile.isBuilt = false;
58744
+ tile.isBuildInProgress = false;
58745
+
58746
+ reject(reason);
58747
+
58748
+ });
58709
58749
  }
58710
58750
  }
58711
58751
 
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "description": "Fully featured ECS game engine written in JavaScript",
6
6
  "type": "module",
7
7
  "author": "Alexander Goldring",
8
- "version": "2.88.3",
8
+ "version": "2.88.4",
9
9
  "main": "build/meep.module.js",
10
10
  "module": "build/meep.module.js",
11
11
  "exports": {
@@ -64,6 +64,11 @@ declare class TerrainTile {
64
64
  * @private
65
65
  */
66
66
  private __initial_height_range;
67
+ /**
68
+ * Used to track number of times tile was built
69
+ * @type {number}
70
+ */
71
+ version: number;
67
72
  /**
68
73
  *
69
74
  * @param {number[]|Float32Array|mat4} m4
@@ -1 +1 @@
1
- {"version":3,"file":"TerrainTile.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/ecs/terrain/tiles/TerrainTile.js"],"names":[],"mappings":";AAqCA;;GAEG;AACH;IACI,sBAA6B;IAC7B,eAA0B;IAC1B,cAAqB;IACrB,kBAAyB;IACzB,4BAAoC;IAEpC;;;OAGG;IACH,mBAAgB;IAChB,uGAAiE;IAGjE;;;OAGG;IACH,UAFU,MAAM,cAAc,CAEd;IAEhB;;;OAGG;IACH,WAFU,OAAO,CAEA;IAEjB;;;OAGG;IACH,cAFU,SAAS,CAEY;IAE/B;;;OAGG;IACH,KAFU,eAAe,CAEd;IAEX;;;OAGG;IACH,SAFU,OAAO,CAED;IAChB;;;OAGG;IACH,mBAFU,OAAO,CAES;IAC1B,uBAAmB;IAEnB;;;OAGG;IACH,SAFU,OAAO,WAAW,CAAC,CAEN;IACvB,4DAA2B;IAE3B;;;;OAIG;IACH,kBAWE;IAEF;;;;;OAKG;IACH,+BAAiG;IAqBjG;;;OAGG;IACH,6BAGC;IAfD;;;OAGG;IACH,0BAEC;IAWD;;;;;;;;;;OAUG;IACH,yBATW,aAAa,WACb,MAAM,WACN,MAAM,WACN,MAAM,cACN,MAAM,cACN,MAAM,cACN,MAAM,GACL,OAAO,CAkDlB;IAED,+CAKC;IAED,8CAOC;IAED;;;;;;;;;;OAUG;IACH,mBATW,WAAW,GAAC,SAAS,UACrB,WAAW,GAAC,SAAS,QACrB,WAAW,GAAC,SAAS,SACrB,WAAW,GAAC,SAAS,WACrB,WAAW,GAAC,SAAS,YACrB,WAAW,GAAC,SAAS,cACrB,WAAW,GAAC,SAAS,eACrB,WAAW,GAAC,SAAS,QAsN/B;IAED,2BAiFC;IAED;;;;OAIG;IACH,mCAHW,MAAM,cACN,MAAM,QAIhB;IAED,gBAYC;IAED;;;;OAIG;IACH,gBAHW;QAAC,QAAQ,CAAC;QAAC,GAAG,CAAC,EAAC;YAAC,UAAU,EAAC,MAAM,CAAC;YAAC,IAAI,EAAC,WAAW,CAAA;SAAC,CAAA;KAAC,QAkDhE;CACJ;oBA/kBmB,kCAAkC;4BAG1B,2CAA2C;sDAZhE,OAAO;0BAEY,yCAAyC;gCADnC,mDAAmD;mBAGhE,0CAA0C;8BAI/B,2CAA2C"}
1
+ {"version":3,"file":"TerrainTile.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/ecs/terrain/tiles/TerrainTile.js"],"names":[],"mappings":";AAqCA;;GAEG;AACH;IACI,sBAA6B;IAC7B,eAA0B;IAC1B,cAAqB;IACrB,kBAAyB;IACzB,4BAAoC;IAEpC;;;OAGG;IACH,mBAAgB;IAChB,uGAAiE;IAGjE;;;OAGG;IACH,UAFU,MAAM,cAAc,CAEd;IAEhB;;;OAGG;IACH,WAFU,OAAO,CAEA;IAEjB;;;OAGG;IACH,cAFU,SAAS,CAEY;IAE/B;;;OAGG;IACH,KAFU,eAAe,CAEd;IAEX;;;OAGG;IACH,SAFU,OAAO,CAED;IAChB;;;OAGG;IACH,mBAFU,OAAO,CAES;IAC1B,uBAAmB;IAEnB;;;OAGG;IACH,SAFU,OAAO,WAAW,CAAC,CAEN;IACvB,4DAA2B;IAE3B;;;;OAIG;IACH,kBAWE;IAEF;;;;;OAKG;IACH,+BAAiG;IAEjG;;;OAGG;IACH,SAFU,MAAM,CAEJ;IAqBZ;;;OAGG;IACH,6BAGC;IAfD;;;OAGG;IACH,0BAEC;IAWD;;;;;;;;;;OAUG;IACH,yBATW,aAAa,WACb,MAAM,WACN,MAAM,WACN,MAAM,cACN,MAAM,cACN,MAAM,cACN,MAAM,GACL,OAAO,CAkDlB;IAED,+CAKC;IAED,8CAOC;IAED;;;;;;;;;;OAUG;IACH,mBATW,WAAW,GAAC,SAAS,UACrB,WAAW,GAAC,SAAS,QACrB,WAAW,GAAC,SAAS,SACrB,WAAW,GAAC,SAAS,WACrB,WAAW,GAAC,SAAS,YACrB,WAAW,GAAC,SAAS,cACrB,WAAW,GAAC,SAAS,eACrB,WAAW,GAAC,SAAS,QAsN/B;IAED,2BAiFC;IAED;;;;OAIG;IACH,mCAHW,MAAM,cACN,MAAM,QAIhB;IAED,gBAYC;IAED;;;;OAIG;IACH,gBAHW;QAAC,QAAQ,CAAC;QAAC,GAAG,CAAC,EAAC;YAAC,UAAU,EAAC,MAAM,CAAC;YAAC,IAAI,EAAC,WAAW,CAAA;SAAC,CAAA;KAAC,QAoDhE;CACJ;oBAvlBmB,kCAAkC;4BAG1B,2CAA2C;sDAZhE,OAAO;0BAEY,yCAAyC;gCADnC,mDAAmD;mBAGhE,0CAA0C;8BAI/B,2CAA2C"}
@@ -122,6 +122,12 @@ class TerrainTile {
122
122
  */
123
123
  __initial_height_range = new NumericInterval(Number.NEGATIVE_INFINITY, Number.POSITIVE_INFINITY);
124
124
 
125
+ /**
126
+ * Used to track number of times tile was built
127
+ * @type {number}
128
+ */
129
+ version = 0;
130
+
125
131
  constructor() {
126
132
 
127
133
  this.mesh.name = "TerrainTile";
@@ -609,6 +615,8 @@ class TerrainTile {
609
615
  // console.timeEnd('total');
610
616
  // console.groupEnd();
611
617
 
618
+ this.version++;
619
+
612
620
  return mesh;
613
621
  }
614
622
  }
@@ -187,10 +187,10 @@ declare class TerrainTileManager {
187
187
  *
188
188
  * @param {number} x
189
189
  * @param {number} y
190
- * @param {function} resolve
191
- * @param {function} reject
190
+ * @param {function(tile:TerrainTile)} resolve
191
+ * @param {function(reason:*)} reject
192
192
  */
193
- build(x: number, y: number, resolve: Function, reject: Function): void;
193
+ build(x: number, y: number, resolve: any, reject: any): void;
194
194
  }
195
195
  import TerrainTile from './TerrainTile.js';
196
196
  import Signal from '../../../../core/events/signal/Signal.js';
@@ -1 +1 @@
1
- {"version":3,"file":"TerrainTileManager.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/ecs/terrain/tiles/TerrainTileManager.js"],"names":[],"mappings":";AA+BA;IA6DI;;;;;OAKG;IACH,wCAJW,OAAO,EA8BjB;IA5FD;;;OAGG;IACH,OAFU,WAAW,EAAE,CAEZ;IAEX;;;MAGE;IAEF;;;OAGG;IACH,UAFU,OAAO,CAEc;IAE/B;;;OAGG;IACH,WAFU,OAAO,CAEa;IAC9B;;;OAGG;IACH,YAFU,eAAe,CAEW;IAEpC;;;OAGG;IACH,OAFU,OAAO,CAES;IAG1B;;;;OAIG;IACH,oBAAmC;IAEnC;;;OAGG;IACH,cAFU,GAAG,CAEG;IAEhB;;;OAGG;IACH,aAFU,eAAe,CAEe;IAExC;;;OAGG;IACH,yBAFU,OAAO,CAEe;IAqB5B,6BAA2C;IAG3C;;;OAGG;IACH,yBAA8B;IAQlC,iCAWC;IAED,8BAEC;IAED;;;;OAIG;IACH,2BAHW,MAAM,cACN,MAAM,QA8BhB;IAED,mBAIC;IAED;;;OAGG;IACH,yBAFW,WAAW,QAerB;IAED;;;;OAIG;IACH,6CASC;IAED,qBAmBC;IAED;;OAEG;IACH,gBAIC;IAED;;;;;;OAMG;IACH,qBALW,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,QAuBhB;IAGD;;;;;;;OAOG;IACH,oCANW,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,GACJ,WAAW,EAAE,CAgCzB;IAED,wBA6CC;IAED;;;;;OAKG;IACH,oBAJW,MAAM,KACN,MAAM,GACJ,MAAM,CAYlB;IAED;;;;;OAKG;IACH,UAJW,MAAM,KACN,MAAM,GACJ,WAAW,GAAC,SAAS,CAiBjC;IAED;;;;;OAKG;IACH,wBAJW,MAAM,KACN,MAAM,GACJ,WAAW,CAavB;IAED;;;;;OAKG;IACH,4BAJW,MAAM,KACN,MAAM,GACL,WAAW,GAAC,SAAS,CAahC;IAED;;;;;OAKG;IACH,+BAJW,MAAM,KACN,MAAM,GACJ,QAAQ,WAAW,CAAC,CAYhC;IAED;;;;;;OAMG;IACH,UALW,MAAM,KACN,MAAM,GACJ,QAAQ,WAAW,CAAC,CA4BhC;IAED;;;OAGG;IACH,cAFW,WAAW,QAcrB;IAED,gBASC;IAED;;;;;;OAMG;IACH,cAJW,MAAM,KACN,MAAM,QACN,WAAW,QAsCrB;IAED;;;;;;;;;;OAUG;IACH,yBATW,aAAa,WACb,MAAM,WACN,MAAM,WACN,MAAM,cACN,MAAM,cACN,MAAM,cACN,MAAM,GACJ,OAAO,CAuDnB;IAED;;;;;;OAMG;IACH,kCALW,aAAa,KACb,MAAM,KACN,MAAM,GACL,OAAO,CAOlB;IAED;;;;;;OAMG;IACH,SALW,MAAM,KACN,MAAM,6CA6DhB;CACJ;wBAvrBuB,kBAAkB;mBAVvB,0CAA0C;oBAGzC,kCAAkC;4BAG1B,2CAA2C;oBAVnD,mCAAmC;gCAQvB,mDAAmD;0BAGzD,yCAAyC;8BALrC,2CAA2C"}
1
+ {"version":3,"file":"TerrainTileManager.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/ecs/terrain/tiles/TerrainTileManager.js"],"names":[],"mappings":";AA+BA;IA6DI;;;;;OAKG;IACH,wCAJW,OAAO,EA8BjB;IA5FD;;;OAGG;IACH,OAFU,WAAW,EAAE,CAEZ;IAEX;;;MAGE;IAEF;;;OAGG;IACH,UAFU,OAAO,CAEc;IAE/B;;;OAGG;IACH,WAFU,OAAO,CAEa;IAC9B;;;OAGG;IACH,YAFU,eAAe,CAEW;IAEpC;;;OAGG;IACH,OAFU,OAAO,CAES;IAG1B;;;;OAIG;IACH,oBAAmC;IAEnC;;;OAGG;IACH,cAFU,GAAG,CAEG;IAEhB;;;OAGG;IACH,aAFU,eAAe,CAEe;IAExC;;;OAGG;IACH,yBAFU,OAAO,CAEe;IAqB5B,6BAA2C;IAG3C;;;OAGG;IACH,yBAA8B;IAQlC,iCAWC;IAED,8BAEC;IAED;;;;OAIG;IACH,2BAHW,MAAM,cACN,MAAM,QAiChB;IAED,mBAIC;IAED;;;OAGG;IACH,yBAFW,WAAW,QAerB;IAED;;;;OAIG;IACH,6CASC;IAED,qBAqBC;IAED;;OAEG;IACH,gBAIC;IAED;;;;;;OAMG;IACH,qBALW,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,QAuBhB;IAGD;;;;;;;OAOG;IACH,oCANW,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,GACJ,WAAW,EAAE,CAgCzB;IAED,wBAgDC;IAED;;;;;OAKG;IACH,oBAJW,MAAM,KACN,MAAM,GACJ,MAAM,CAYlB;IAED;;;;;OAKG;IACH,UAJW,MAAM,KACN,MAAM,GACJ,WAAW,GAAC,SAAS,CAiBjC;IAED;;;;;OAKG;IACH,wBAJW,MAAM,KACN,MAAM,GACJ,WAAW,CAavB;IAED;;;;;OAKG;IACH,4BAJW,MAAM,KACN,MAAM,GACL,WAAW,GAAC,SAAS,CAahC;IAED;;;;;OAKG;IACH,+BAJW,MAAM,KACN,MAAM,GACJ,QAAQ,WAAW,CAAC,CAYhC;IAED;;;;;;OAMG;IACH,UALW,MAAM,KACN,MAAM,GACJ,QAAQ,WAAW,CAAC,CA4BhC;IAED;;;OAGG;IACH,cAFW,WAAW,QAcrB;IAED,gBASC;IAED;;;;;;OAMG;IACH,cAJW,MAAM,KACN,MAAM,QACN,WAAW,QAsCrB;IAED;;;;;;;;;;OAUG;IACH,yBATW,aAAa,WACb,MAAM,WACN,MAAM,WACN,MAAM,cACN,MAAM,cACN,MAAM,cACN,MAAM,GACJ,OAAO,CAuDnB;IAED;;;;;;OAMG;IACH,kCALW,aAAa,KACb,MAAM,KACN,MAAM,GACL,OAAO,CAOlB;IAED;;;;;;OAMG;IACH,SALW,MAAM,KACN,MAAM,mCAuFhB;CACJ;wBAztBuB,kBAAkB;mBAVvB,0CAA0C;oBAGzC,kCAAkC;4BAG1B,2CAA2C;oBAVnD,mCAAmC;gCAQvB,mDAAmD;0BAGzD,yCAAyC;8BALrC,2CAA2C"}
@@ -162,7 +162,10 @@ class TerrainTileManager {
162
162
  for (let i = 0; i < n; i++) {
163
163
  const terrainTile = tiles[i];
164
164
 
165
- if (!terrainTile.isBuilt && !terrainTile.isBuildInProgress) {
165
+ if (
166
+ !terrainTile.isBuilt
167
+ && !terrainTile.isBuildInProgress
168
+ ) {
166
169
 
167
170
  const bb = terrainTile.external_bvh;
168
171
 
@@ -223,6 +226,8 @@ class TerrainTileManager {
223
226
  const tiles = this.tiles;
224
227
  const tile_count = tiles.length;
225
228
 
229
+ console.warn(`#destroyTiles tile_count=${tile_count}`);
230
+
226
231
  for (let i = 0; i < tile_count; i++) {
227
232
  const tile = tiles[i];
228
233
 
@@ -319,7 +324,6 @@ class TerrainTileManager {
319
324
  }
320
325
 
321
326
  initializeTiles() {
322
-
323
327
  const total_size = this.totalSize;
324
328
 
325
329
  const gridSize = total_size.clone();
@@ -331,6 +335,10 @@ class TerrainTileManager {
331
335
 
332
336
  const tiles = this.tiles;
333
337
 
338
+ if (tiles.length > 0) {
339
+ throw new Error(`There are already ${tiles.length} initialized tiles, those must be destroyed before initialization can happen`);
340
+ }
341
+
334
342
  //populate tiles
335
343
  const tile_resolution_y = gridSize.y;
336
344
  const tile_resolution_x = gridSize.x;
@@ -654,16 +662,23 @@ class TerrainTileManager {
654
662
  *
655
663
  * @param {number} x
656
664
  * @param {number} y
657
- * @param {function} resolve
658
- * @param {function} reject
665
+ * @param {function(tile:TerrainTile)} resolve
666
+ * @param {function(reason:*)} reject
659
667
  */
660
668
  build(x, y, resolve, reject) {
661
669
 
662
- assert.typeOf(resolve, 'function', 'resolve');
663
- assert.typeOf(reject, 'function', 'reject');
670
+ assert.isFunction(resolve, 'resolve');
671
+ assert.isFunction(reject, 'reject');
664
672
 
665
- const tileIndex = this.computeTileIndex(x, y);
666
- const tile = this.tiles[tileIndex];
673
+ const tile_index = this.computeTileIndex(x, y);
674
+
675
+ const tile = this.tiles[tile_index];
676
+
677
+ if (tile.isBuildInProgress) {
678
+ throw new Error('Tile is already in process of being built');
679
+ }
680
+
681
+ const start_version = tile.version;
667
682
 
668
683
  tile.isBuilt = false;
669
684
  tile.isBuildInProgress = true;
@@ -679,17 +694,29 @@ class TerrainTileManager {
679
694
  ).then((tileData) => {
680
695
 
681
696
  //check that the tile under index is still the same tile
682
- if (this.tiles[tileIndex] !== tile) {
697
+ if (this.tiles[tile_index] !== tile) {
683
698
  //the original tile was destroyed
684
699
  reject('Original tile was destroyed during build process');
685
700
  return;
686
701
  }
687
702
 
688
- if (!tile.isBuildInProgress) {
689
- reject('Build request has been cancelled');
703
+ if (tile.version !== start_version) {
704
+ reject(`Tile version changed, likely due to concurrent build request. Expected version ${start_version}, actual version ${tile.version}`);
690
705
  return;
691
706
  }
692
707
 
708
+ if (!tile.isBuildInProgress) {
709
+ if (tile.isBuilt) {
710
+ // tile already built
711
+ resolve(tile);
712
+ return;
713
+ } else {
714
+
715
+ reject('Build request has been cancelled');
716
+ return;
717
+ }
718
+ }
719
+
693
720
  // const processName = 'building tile x = ' + x + ", y = " + y;
694
721
  // console.time(processName);
695
722
 
@@ -713,7 +740,14 @@ class TerrainTileManager {
713
740
  this.on.tileBuilt.send1(tile);
714
741
 
715
742
  resolve(tile);
716
- }, reject);
743
+ }, (reason) => {
744
+
745
+ tile.isBuilt = false;
746
+ tile.isBuildInProgress = false;
747
+
748
+ reject(reason);
749
+
750
+ });
717
751
  }
718
752
  }
719
753