@woosh/meep-engine 2.85.18 → 2.85.19

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": "Fully featured ECS game engine written in JavaScript",
6
6
  "type": "module",
7
7
  "author": "Alexander Goldring",
8
- "version": "2.85.18",
8
+ "version": "2.85.19",
9
9
  "main": "build/meep.module.js",
10
10
  "module": "build/meep.module.js",
11
11
  "exports": {
@@ -16,6 +16,16 @@ export class ThemeEngine {
16
16
  */
17
17
  private __assetManager;
18
18
  set assetManager(arg: any);
19
+ /**
20
+ *
21
+ * @param {number} v
22
+ */
23
+ set seed(arg: number);
24
+ /**
25
+ *
26
+ * @returns {number}
27
+ */
28
+ get seed(): number;
19
29
  /**
20
30
  *
21
31
  * @param {AreaTheme} theme
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeEngine.d.ts","sourceRoot":"","sources":["../../../../src/generation/theme/ThemeEngine.js"],"names":[],"mappings":"AAsDA;IAEI;;;OAGG;IACH,OAFU,uBAAuB,CAEN;IAE3B;;;OAGG;IACH,cAFqB,MAAM,CAEF;IAEzB;;;;OAIG;IACH,uBAAsB;IAEtB,2BAEC;IAED;;;OAGG;IACH,4BAUC;IAED;;;;;;OAMG;IACH,4BALW,WAAW,KACX,MAAM,KACN,MAAM,GACJ,MAAM,CA8BlB;IAED;;;;;;OAMG;IACH,uBALW,MAAM,gDAGJ,IAAI,CAmChB;IAED;;;;;OAKG;IACH,sDAFa,SAAS,CAiLrB;IAED;;;;;;OAMG;IACH,+DAHW,MAAM,GACJ,IAAI,GAAC,SAAS,CAoG1B;IAED;;;;OAIG;IACH,kEAqCC;IAED;;;;OAIG;IACH,iCAFa,IAAI,CAIhB;IAED;;;;OAIG;IACH,uCAHa,SAAS,CAYrB;IAED;;;;;OAKG;IACH,oDAFa,SAAS,CAsErB;CACJ;6BA7lB0B,8CAA8C;iBAKxD,iCAAiC;sBAC5B,sCAAsC"}
1
+ {"version":3,"file":"ThemeEngine.d.ts","sourceRoot":"","sources":["../../../../src/generation/theme/ThemeEngine.js"],"names":[],"mappings":"AAiFA;IAEI;;;OAGG;IACH,OAFU,uBAAuB,CAEN;IAE3B;;;OAGG;IACH,cAFqB,MAAM,CAEF;IAEzB;;;;OAIG;IACH,uBAAsB;IAEtB,2BAEC;IAED;;;OAGG;IACH,sBAEC;IAED;;;OAGG;IACH,mBAEC;IAED;;;OAGG;IACH,4BAUC;IAED;;;;;;OAMG;IACH,4BALW,WAAW,KACX,MAAM,KACN,MAAM,GACJ,MAAM,CA8BlB;IAED;;;;;;OAMG;IACH,uBALW,MAAM,gDAGJ,IAAI,CAmChB;IAED;;;;;OAKG;IACH,sDAFa,SAAS,CAiLrB;IAED;;;;;;OAMG;IACH,+DAHW,MAAM,GACJ,IAAI,GAAC,SAAS,CAoG1B;IAED;;;;OAIG;IACH,kEAqCC;IAED;;;;OAIG;IACH,iCAFa,IAAI,CAIhB;IAED;;;;OAIG;IACH,uCAHa,SAAS,CAYrB;IAED;;;;;OAKG;IACH,oDAFa,SAAS,CA2DrB;CACJ;6BA7nB4B,8CAA8C;iBAK1D,iCAAiC;sBAC5B,sCAAsC"}
@@ -1,23 +1,23 @@
1
- import {assert} from "../../core/assert.js";
2
- import {binarySearchLowIndex} from "../../core/collection/array/binarySearchLowIndex.js";
3
- import {HashMap} from "../../core/collection/map/HashMap.js";
4
- import {QuadTreeNode} from "../../core/geom/2d/quad-tree/QuadTreeNode.js";
5
- import {randomFloatBetween} from "../../core/math/random/randomFloatBetween.js";
6
- import {seededRandom} from "../../core/math/random/seededRandom.js";
7
- import {number_compare_ascending} from "../../core/primitives/numbers/number_compare_ascending.js";
1
+ import { assert } from "../../core/assert.js";
2
+ import { binarySearchLowIndex } from "../../core/collection/array/binarySearchLowIndex.js";
3
+ import { HashMap } from "../../core/collection/map/HashMap.js";
4
+ import { QuadTreeNode } from "../../core/geom/2d/quad-tree/QuadTreeNode.js";
5
+ import { randomFloatBetween } from "../../core/math/random/randomFloatBetween.js";
6
+ import { seededRandom } from "../../core/math/random/seededRandom.js";
7
+ import { number_compare_ascending } from "../../core/primitives/numbers/number_compare_ascending.js";
8
8
  import Future from "../../core/process/Future.js";
9
9
  import Task from "../../core/process/task/Task.js";
10
10
  import TaskGroup from "../../core/process/task/TaskGroup.js";
11
- import {TaskSignal} from "../../core/process/task/TaskSignal.js";
12
- import {actionTask} from "../../core/process/task/util/actionTask.js";
13
- import {countTask} from "../../core/process/task/util/countTask.js";
14
- import {emptyTask} from "../../core/process/task/util/emptyTask.js";
15
- import {futureTask} from "../../core/process/task/util/futureTask.js";
16
- import {TerrainLayer} from "../../engine/ecs/terrain/ecs/layers/TerrainLayer.js";
17
- import {TerrainFlags} from "../../engine/ecs/terrain/ecs/TerrainFlags.js";
18
- import {obtainTerrain} from "../../engine/ecs/terrain/util/obtainTerrain.js";
19
- import {Sampler2D} from "../../engine/graphics/texture/sampler/Sampler2D.js";
20
- import {TerrainLayerRuleAggregator} from "./TerrainLayerRuleAggregator.js";
11
+ import { TaskSignal } from "../../core/process/task/TaskSignal.js";
12
+ import { actionTask } from "../../core/process/task/util/actionTask.js";
13
+ import { countTask } from "../../core/process/task/util/countTask.js";
14
+ import { emptyTask } from "../../core/process/task/util/emptyTask.js";
15
+ import { futureTask } from "../../core/process/task/util/futureTask.js";
16
+ import { TerrainLayer } from "../../engine/ecs/terrain/ecs/layers/TerrainLayer.js";
17
+ import { TerrainFlags } from "../../engine/ecs/terrain/ecs/TerrainFlags.js";
18
+ import { obtainTerrain } from "../../engine/ecs/terrain/util/obtainTerrain.js";
19
+ import { Sampler2D } from "../../engine/graphics/texture/sampler/Sampler2D.js";
20
+ import { TerrainLayerRuleAggregator } from "./TerrainLayerRuleAggregator.js";
21
21
 
22
22
  /**
23
23
  *
@@ -52,6 +52,33 @@ function prepare_terrain_for_themes(layer_mapping, themes) {
52
52
  return max;
53
53
  }
54
54
 
55
+ function makeTaskEnsureAllTiles(terrain) {
56
+ return futureTask(new Future((resolve, reject) => {
57
+
58
+ const is_linked = terrain.getFlag(TerrainFlags.Linked);
59
+
60
+ if (!is_linked) {
61
+ terrain.startBuildService();
62
+ }
63
+
64
+ if (!terrain.getFlag(TerrainFlags.Built)) {
65
+ terrain.buildNonVisual();
66
+ }
67
+
68
+ terrain.__tiles.rebuild();
69
+
70
+ terrain.promiseAllTiles()
71
+ .then(resolve, reject)
72
+ .finally(() => {
73
+ if (!is_linked && !terrain.getFlag(TerrainFlags.Linked)) {
74
+ // cleanup after ourselves
75
+ terrain.stopBuildService();
76
+ }
77
+ });
78
+
79
+ }), 'Wait for terrain tiles');
80
+ }
81
+
55
82
  export class ThemeEngine {
56
83
 
57
84
  /**
@@ -77,6 +104,22 @@ export class ThemeEngine {
77
104
  this.__assetManager = v;
78
105
  }
79
106
 
107
+ /**
108
+ *
109
+ * @param {number} v
110
+ */
111
+ set seed(v) {
112
+ this.random.setCurrentSeed(v);
113
+ }
114
+
115
+ /**
116
+ *
117
+ * @returns {number}
118
+ */
119
+ get seed() {
120
+ return this.random.getCurrentSeed();
121
+ }
122
+
80
123
  /**
81
124
  *
82
125
  * @param {AreaTheme} theme
@@ -540,70 +583,59 @@ export class ThemeEngine {
540
583
  apply(grid, ecd) {
541
584
  const terrain = obtainTerrain(ecd);
542
585
 
543
- // build terrain tiles
544
- const tTerrainGeometry = futureTask(new Future((resolve, reject) => {
545
-
546
- const is_linked = terrain.getFlag(TerrainFlags.Linked);
547
-
548
- if (!is_linked) {
549
- terrain.startBuildService();
550
- }
551
-
552
- if (!terrain.getFlag(TerrainFlags.Built)) {
553
- terrain.buildNonVisual();
554
- }
555
-
556
- terrain.__tiles.rebuild();
557
-
558
- terrain.promiseAllTiles()
559
- .then(resolve, reject)
560
- .finally(() => {
561
- if (!is_linked && !terrain.getFlag(TerrainFlags.Linked)) {
562
- // cleanup after ourselves
563
- terrain.stopBuildService();
564
- }
565
- });
566
-
567
- }), 'Wait for terrain tiles');
568
-
569
586
  const tInitializeThemes = this.initializeThemes(this.random(), ecd, grid);
570
587
 
571
- const tTerrain = this.applyTerrainThemes(grid, terrain);
572
-
573
588
  const tNodes = this.applyNodes(grid, ecd);
574
589
 
575
590
  const tCells = this.applyCellRules(grid, ecd);
576
591
 
577
- tTerrain.addDependency(tInitializeThemes);
578
-
579
592
  tNodes.addDependencies([
580
593
  tInitializeThemes,
581
- tTerrainGeometry,
582
- tTerrain
583
594
  ]);
584
595
 
585
596
  tCells.addDependency(tInitializeThemes);
586
- tTerrainGeometry.addDependency(tCells);
587
597
 
588
598
  const tOptimize = this.optimize(ecd);
589
599
 
590
- const tUpdateTerrain = this.updateTerrain(terrain);
591
-
592
- tUpdateTerrain.addDependencies([
593
- tTerrain,
594
- tNodes,
595
- tCells,
596
- tTerrainGeometry
597
- ]);
598
-
599
600
  tOptimize.addDependencies([
600
- tUpdateTerrain,
601
- tTerrain,
602
601
  tNodes,
603
602
  tCells,
604
603
  tInitializeThemes
605
604
  ]);
606
605
 
607
- return new TaskGroup([tTerrainGeometry, tInitializeThemes, tTerrain, tNodes, tCells, tUpdateTerrain, tOptimize]);
606
+ const subtasks = [tInitializeThemes, tNodes, tCells, tOptimize];
607
+
608
+ if (terrain !== null) {
609
+ // build terrain tiles
610
+ const tTerrainGeometry = makeTaskEnsureAllTiles(terrain);
611
+ const tTerrain = this.applyTerrainThemes(grid, terrain);
612
+ tTerrain.addDependency(tInitializeThemes);
613
+
614
+ const tUpdateTerrain = this.updateTerrain(terrain);
615
+
616
+ tUpdateTerrain.addDependencies([
617
+ tTerrain,
618
+ tNodes,
619
+ tCells,
620
+ tTerrainGeometry
621
+ ]);
622
+
623
+ tNodes.addDependencies([
624
+ tTerrain,
625
+ tTerrainGeometry,
626
+ ]);
627
+ tTerrainGeometry.addDependency(tCells);
628
+
629
+ tOptimize.addDependencies([
630
+ tUpdateTerrain,
631
+ tTerrain,
632
+ ]);
633
+
634
+ subtasks.push(tTerrainGeometry, tTerrain, tUpdateTerrain);
635
+ } else {
636
+ console.warn(`No terrain present, skipping terrain theming`);
637
+ }
638
+
639
+ return new TaskGroup(subtasks);
608
640
  }
609
641
  }