@woosh/meep-engine 2.61.0 → 2.62.0

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.
Files changed (36) hide show
  1. package/build/meep.cjs +234 -212
  2. package/build/meep.min.js +1 -1
  3. package/build/meep.module.js +234 -212
  4. package/package.json +1 -1
  5. package/src/core/bvh2/BinaryNode.js +16 -13
  6. package/src/core/bvh2/LeafNode.js +6 -3
  7. package/src/core/bvh2/bvh3/query/bvh_query_user_data_overlaps_sphere.js +81 -0
  8. package/src/core/geom/3d/aabb/AABB3.js +24 -36
  9. package/src/core/geom/3d/aabb/aabb3_array_compute_from_sphere.js +22 -0
  10. package/src/core/geom/3d/aabb/aabb3_array_intersects_sphere.js +22 -0
  11. package/src/core/geom/3d/aabb/aabb3_array_intersects_sphere_array.js +11 -0
  12. package/src/core/geom/3d/aabb/aabb3_signed_distance_to_aabb3.js +28 -0
  13. package/src/core/geom/3d/aabb/serializeAABB3Quantized16Uint.js +19 -10
  14. package/src/core/geom/3d/tetrahedra/delaunay/Cavity.js +3 -4
  15. package/src/engine/ecs/foliage/ecs/Foliage2System.js +3 -0
  16. package/src/engine/ecs/foliage/ecs/InstancedMeshComponent.js +4 -1
  17. package/src/engine/ecs/foliage/ecs/convertInstancedMeshComponents2Entities.js +64 -0
  18. package/src/engine/ecs/foliage/ecs/{InstancedMeshUtils.js → optimizeIndividualMeshesEntitiesToInstances.js} +11 -70
  19. package/src/engine/graphics/camera/testClippingPlaneComputation.js +25 -27
  20. package/src/engine/graphics/ecs/path/testPathDisplaySystem.js +49 -52
  21. package/src/engine/graphics/ecs/path/tube/prototypeAnimatedPathMask.js +40 -42
  22. package/src/engine/graphics/particles/ecs/ParticleEmitterSystem.js +43 -25
  23. package/src/engine/graphics/particles/particular/engine/ParticularEngine.js +10 -6
  24. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +37 -41
  25. package/src/engine/graphics/particles/particular/engine/utils/volume/prototypeParticleVolume.js +44 -46
  26. package/src/engine/graphics/render/buffer/buffers/prototypeNormalFrameBuffer.js +24 -26
  27. package/src/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +40 -42
  28. package/src/engine/graphics/render/visibility/hiz/prototypeHiZ.js +36 -38
  29. package/src/engine/graphics/shadows/testShadowMapRendering.js +19 -19
  30. package/src/engine/sound/dB2Volume.js +8 -0
  31. package/src/engine/sound/ecs/emitter/SoundEmitter.js +125 -99
  32. package/src/engine/sound/ecs/emitter/SoundEmitterComponentContext.js +4 -42
  33. package/src/engine/sound/ecs/emitter/SoundEmitterSystem.js +31 -121
  34. package/src/engine/sound/volume2dB.js +8 -0
  35. package/src/generation/theme/ThemeEngine.js +19 -53
  36. package/src/engine/graphics/geometry/bvh/buffered/BVHFromBufferGeometry.js +0 -133
@@ -3,22 +3,24 @@
3
3
  */
4
4
 
5
5
 
6
- import { aabb3_compute_distance_above_plane_max } from "./aabb3_compute_distance_above_plane_max.js";
7
- import { aabb3_compute_plane_side } from "./aabb3_compute_plane_side.js";
6
+ import {assert} from "../../../assert.js";
8
7
  import computeMortonCode from "../morton/Morton.js";
9
- import { aabb3_build_corners } from "./aabb3_build_corners.js";
10
- import { assert } from "../../../assert.js";
11
- import { aabb3_intersects_frustum_degree } from "./aabb3_intersects_frustum_degree.js";
12
- import { aabb3_intersects_line_segment } from "./aabb3_intersects_line_segment.js";
13
- import { aabb3_intersects_ray } from "./aabb3_intersects_ray.js";
14
- import { aabb3_compute_surface_area } from "./aabb3_compute_surface_area.js";
15
- import { aabb3_intersects_frustum_array } from "./aabb3_intersects_frustum_array.js";
16
- import { aabb3_matrix4_project } from "./aabb3_matrix4_project.js";
17
- import { aabb3_signed_distance_sqr_to_point } from "./aabb3_signed_distance_sqr_to_point.js";
18
- import { aabb3_array_intersects_point } from "./aabb3_array_intersects_point.js";
8
+ import {aabb3_array_intersects_point} from "./aabb3_array_intersects_point.js";
9
+ import {aabb3_build_corners} from "./aabb3_build_corners.js";
10
+ import {aabb3_compute_distance_above_plane_max} from "./aabb3_compute_distance_above_plane_max.js";
11
+ import {aabb3_compute_plane_side} from "./aabb3_compute_plane_side.js";
12
+ import {aabb3_compute_surface_area} from "./aabb3_compute_surface_area.js";
13
+ import {aabb3_intersects_frustum_array} from "./aabb3_intersects_frustum_array.js";
14
+ import {aabb3_intersects_frustum_degree} from "./aabb3_intersects_frustum_degree.js";
15
+ import {aabb3_intersects_line_segment} from "./aabb3_intersects_line_segment.js";
16
+ import {aabb3_intersects_ray} from "./aabb3_intersects_ray.js";
17
+ import {aabb3_matrix4_project} from "./aabb3_matrix4_project.js";
18
+ import {aabb3_signed_distance_sqr_to_point} from "./aabb3_signed_distance_sqr_to_point.js";
19
+ import {aabb3_signed_distance_to_aabb3} from "./aabb3_signed_distance_to_aabb3.js";
19
20
 
20
21
  /**
21
22
  * Axis-Aligned bounding box in 3D
23
+ * NOTE: In cases where all you want is raw performance - prefer to use typed arrays instead along with `aabb3_` functions
22
24
  */
23
25
  export class AABB3 {
24
26
  /**
@@ -238,7 +240,12 @@ export class AABB3 {
238
240
  * @returns {boolean}
239
241
  */
240
242
  _equals(x0, y0, z0, x1, y1, z1) {
241
- return this.x0 === x0 && this.y0 === y0 && this.z0 === z0 && this.x1 === x1 && this.y1 === y1 && this.z1 === z1;
243
+ return this.x0 === x0
244
+ && this.y0 === y0
245
+ && this.z0 === z0
246
+ && this.x1 === x1
247
+ && this.y1 === y1
248
+ && this.z1 === z1;
242
249
  }
243
250
 
244
251
  /**
@@ -332,28 +339,10 @@ export class AABB3 {
332
339
  const _y1 = this.y1;
333
340
  const _z1 = this.z1;
334
341
 
335
- //do projection
336
- const xp0 = _x0 - x1;
337
- const xp1 = x0 - _x1;
338
- const yp0 = _y0 - y1;
339
- const yp1 = y0 - _y1;
340
- const zp0 = _z0 - z1;
341
- const zp1 = z0 - _z1;
342
-
343
- //calculate separation in each axis
344
- const dx = Math.max(xp0, xp1);
345
- const dy = Math.max(yp0, yp1);
346
- const dz = Math.max(zp0, zp1);
347
-
348
- //straight-line distance
349
- let distance = Math.sqrt(dx * dx + dy * dy + dz * dz);
350
-
351
- if (dx < 0 && dy < 0 && dz < 0) {
352
- //penetration
353
- return -distance;
354
- } else {
355
- return distance;
356
- }
342
+ return aabb3_signed_distance_to_aabb3(
343
+ _x0, _y0, _z0, _x1, _y1, _z1,
344
+ x0, y0, z0, x1, y1, z1
345
+ );
357
346
  }
358
347
 
359
348
  /**
@@ -778,7 +767,6 @@ export class AABB3 {
778
767
  }
779
768
 
780
769
  /**
781
- *
782
770
  * @param {Plane[]} clippingPlanes
783
771
  * @returns {boolean}
784
772
  */
@@ -0,0 +1,22 @@
1
+ /**
2
+ *
3
+ * @param {number[]} output
4
+ * @param {number} output_offset
5
+ * @param {number} x
6
+ * @param {number} y
7
+ * @param {number} z
8
+ * @param {number} radius
9
+ */
10
+ export function aabb3_array_compute_from_sphere(
11
+ output, output_offset,
12
+ x, y, z, radius
13
+ ) {
14
+
15
+ output[output_offset] = x - radius;
16
+ output[output_offset + 1] = y - radius;
17
+ output[output_offset + 2] = z - radius;
18
+ output[output_offset + 3] = x + radius;
19
+ output[output_offset + 4] = y + radius;
20
+ output[output_offset + 5] = z + radius;
21
+
22
+ }
@@ -0,0 +1,22 @@
1
+ import {aabb3_signed_distance_sqr_to_point} from "./aabb3_signed_distance_sqr_to_point.js";
2
+
3
+ /**
4
+ *
5
+ * @param {number[]} aabb
6
+ * @param {number} x
7
+ * @param {number} y
8
+ * @param {number} z
9
+ * @param {number} radius
10
+ * @returns {boolean}
11
+ */
12
+ export function aabb3_array_intersects_sphere(aabb, x, y, z, radius) {
13
+ const distance_sqr = aabb3_signed_distance_sqr_to_point(
14
+ aabb[0], aabb[1], aabb[2],
15
+ aabb[3], aabb[4], aabb[5],
16
+ x, y, z
17
+ );
18
+
19
+ const radius2 = radius * radius;
20
+
21
+ return distance_sqr <= radius2;
22
+ }
@@ -0,0 +1,11 @@
1
+ import {aabb3_array_intersects_sphere} from "./aabb3_array_intersects_sphere.js";
2
+
3
+ /**
4
+ *
5
+ * @param {number[]|Float32Array} aabb
6
+ * @param {number[]|Float32Array} sphere [x,y,z, radius]
7
+ * @returns {boolean}
8
+ */
9
+ export function aabb3_array_intersects_sphere_array(aabb, sphere) {
10
+ return aabb3_array_intersects_sphere(aabb, sphere[0], sphere[1], sphere[2], sphere[3]);
11
+ }
@@ -0,0 +1,28 @@
1
+ export function aabb3_signed_distance_to_aabb3(
2
+ ax0,ay0,az0,ax1,ay1,az1,
3
+ bx0,by0,bz0, bx1,by1,bz1
4
+ ){
5
+
6
+ //do projection
7
+ const xp0 = bx0 - ax1;
8
+ const xp1 = ax0 - bx1;
9
+ const yp0 = by0 - ay1;
10
+ const yp1 = ay0 - by1;
11
+ const zp0 = bz0 - az1;
12
+ const zp1 = az0 - bz1;
13
+
14
+ //calculate separation in each axis
15
+ const dx = Math.max(xp0, xp1);
16
+ const dy = Math.max(yp0, yp1);
17
+ const dz = Math.max(zp0, zp1);
18
+
19
+ //straight-line distance
20
+ let distance = Math.sqrt(dx * dx + dy * dy + dz * dz);
21
+
22
+ if (dx < 0 && dy < 0 && dz < 0) {
23
+ //penetration
24
+ return -distance;
25
+ } else {
26
+ return distance;
27
+ }
28
+ }
@@ -9,20 +9,29 @@
9
9
  * @param {number} y1
10
10
  * @param {number} z1
11
11
  */
12
- export function serializeAABB3Quantized16Uint(buffer, box, x0, y0, z0, x1, y1, z1) {
12
+ export function serializeAABB3Quantized16Uint(
13
+ buffer, box,
14
+ x0, y0, z0, x1, y1, z1
15
+ ) {
16
+
13
17
  //compute value ranges
14
- const xD = x1 - x0;
15
- const yD = y1 - y0;
16
- const zD = z1 - z0;
18
+ const dx = x1 - x0;
19
+ const dy = y1 - y0;
20
+ const dz = z1 - z0;
21
+
22
+ // scale delta to Uin16 range, and avoid division by 0
23
+ const mx = dx > 0 ? 65535 / dx : 0;
24
+ const my = dy > 0 ? 65535 / dy : 0;
25
+ const mz = dz > 0 ? 65535 / dz : 0;
17
26
 
18
27
  //quantize all values
19
- const _x0 = (((box.x0 - x0) / xD) * 65535) | 0;
20
- const _y0 = (((box.y0 - y0) / yD) * 65535) | 0;
21
- const _z0 = (((box.z0 - z0) / zD) * 65535) | 0;
28
+ const _x0 = Math.floor((box.x0 - x0) * mx);
29
+ const _y0 = Math.floor((box.y0 - y0) * my);
30
+ const _z0 = Math.floor((box.z0 - z0) * mz);
22
31
 
23
- const _x1 = (((box.x1 - x0) / xD) * 65535) | 0;
24
- const _y1 = (((box.y1 - y0) / yD) * 65535) | 0;
25
- const _z1 = (((box.z1 - z0) / zD) * 65535) | 0;
32
+ const _x1 = Math.ceil((box.x1 - x0) * mx);
33
+ const _y1 = Math.ceil((box.y1 - y0) * my);
34
+ const _z1 = Math.ceil((box.z1 - z0) * mz);
26
35
 
27
36
  buffer.writeUint16(_x0);
28
37
  buffer.writeUint16(_y0);
@@ -1,5 +1,8 @@
1
1
  import { assert } from "../../../../assert.js";
2
2
 
3
+ /**
4
+ * Represents cavity or "ball" formed when carving out "triangles" to accommodate inserted point
5
+ */
3
6
  export class Cavity {
4
7
  constructor() {
5
8
  /**
@@ -52,10 +55,6 @@ export class Cavity {
52
55
  this.__boundary_size++;
53
56
  }
54
57
 
55
- update() {
56
- // compute in/out state for each side of each tetra
57
- }
58
-
59
58
  /**
60
59
  *
61
60
  * @param {number} i
@@ -74,6 +74,9 @@ function obtainLayer(layer, cache, assetManager) {
74
74
  }
75
75
  }
76
76
 
77
+ /**
78
+ * @deprecated
79
+ */
77
80
  export class Foliage2System extends System {
78
81
  /**
79
82
  *
@@ -1,7 +1,10 @@
1
1
  import List from "../../../../core/collection/list/List.js";
2
- import { InstancedMeshLayer } from "./InstancedMeshLayer.js";
2
+ import {InstancedMeshLayer} from "./InstancedMeshLayer.js";
3
3
 
4
4
 
5
+ /**
6
+ * @deprecated use {@link ShadedGeometry} instead with instanced rendering
7
+ */
5
8
  export class InstancedMeshComponent {
6
9
  constructor() {
7
10
  /**
@@ -0,0 +1,64 @@
1
+ import {assert} from "../../../../core/assert.js";
2
+ import Mesh from "../../../graphics/ecs/mesh/Mesh.js";
3
+ import Entity from "../../Entity.js";
4
+ import {Transform} from "../../transform/Transform.js";
5
+ import {loadFoliageLayer} from "./Foliage2System.js";
6
+ import {InstancedMeshComponent} from "./InstancedMeshComponent.js";
7
+
8
+ /**
9
+ * Convert all existing instanced mesh components to individual Transform+Mesh pairs
10
+ * @param {EntityComponentDataset} dataset
11
+ * @param assetManager
12
+ */
13
+ export function convertInstancedMeshComponents2Entities(dataset, assetManager) {
14
+ assert.notEqual(dataset, undefined, 'dataset is undefined');
15
+ assert.notEqual(assetManager, undefined, 'assetManager is undefined');
16
+
17
+ const entitiesToStrip = [];
18
+
19
+ /**
20
+ *
21
+ * @param {InstancedMeshComponent} foliage2
22
+ * @param entity
23
+ */
24
+ function visitFoliageEntities(foliage2, entity) {
25
+ foliage2.layers.forEach(function (layer) {
26
+ const modelURL = layer.modelURL.getValue();
27
+
28
+ loadFoliageLayer(layer, assetManager)
29
+ .then(function (instancedFoliage) {
30
+
31
+ const data = instancedFoliage.data;
32
+ const numInstances = data.length;
33
+
34
+ for (let i = 0; i < numInstances; i++) {
35
+ const transform = new Transform();
36
+
37
+ instancedFoliage.read(i, transform.position, transform.rotation, transform.scale);
38
+
39
+ const mesh = new Mesh();
40
+ mesh.url = modelURL;
41
+
42
+ mesh.castShadow = layer.castShadow.getValue();
43
+ mesh.receiveShadow = layer.receiveShadow.getValue();
44
+
45
+ //TODO Consider moving BVH info here also, to make this process faster
46
+
47
+ const entityBuilder = new Entity();
48
+
49
+ entityBuilder.add(transform).add(mesh).build(dataset);
50
+ }
51
+ });
52
+ });
53
+
54
+ entitiesToStrip.push(entity);
55
+ }
56
+
57
+ dataset.traverseEntities([InstancedMeshComponent], visitFoliageEntities);
58
+
59
+ //remove converted foliage components
60
+ entitiesToStrip.forEach(function (entity) {
61
+ dataset.removeComponentFromEntity(entity, InstancedMeshComponent);
62
+ });
63
+ }
64
+
@@ -1,73 +1,14 @@
1
- import Entity from "../../Entity.js";
2
- import { loadFoliageLayer } from "./Foliage2System.js";
3
- import Mesh, { MeshFlags } from "../../../graphics/ecs/mesh/Mesh.js";
4
- import { Transform } from "../../transform/Transform.js";
5
- import { InstancedMeshComponent } from "./InstancedMeshComponent.js";
6
- import { InstancedFoliage } from "../InstancedFoliage.js";
7
- import { buildTreeOptimizationTask } from "../../../../core/bvh2/BVHTasks.js";
1
+ import {buildTreeOptimizationTask} from "../../../../core/bvh2/BVHTasks.js";
8
2
  import Task from "../../../../core/process/task/Task.js";
9
- import { TaskSignal } from "../../../../core/process/task/TaskSignal.js";
10
- import { assert } from "../../../../core/assert.js";
11
- import { InstancedMeshLayer } from "./InstancedMeshLayer.js";
12
- import { countTask } from "../../../../core/process/task/util/countTask.js";
13
- import { promiseTask } from "../../../../core/process/task/util/promiseTask.js";
14
-
15
- /**
16
- * Convert all existing instanced mesh components to individual Transform+Mesh pairs
17
- * @param {EntityComponentDataset} dataset
18
- * @param assetManager
19
- */
20
- export function convertInstancedMeshComponents2Entities(dataset, assetManager) {
21
- assert.notEqual(dataset, undefined, 'dataset is undefined');
22
- assert.notEqual(assetManager, undefined, 'assetManager is undefined');
23
-
24
- const entitiesToStrip = [];
25
-
26
- /**
27
- *
28
- * @param {InstancedMeshComponent} foliage2
29
- * @param entity
30
- */
31
- function visitFoliageEntities(foliage2, entity) {
32
- foliage2.layers.forEach(function (layer) {
33
- const modelURL = layer.modelURL.getValue();
34
-
35
- loadFoliageLayer(layer, assetManager)
36
- .then(function (instancedFoliage) {
37
-
38
- const data = instancedFoliage.data;
39
- const numInstances = data.length;
40
-
41
- for (let i = 0; i < numInstances; i++) {
42
- const transform = new Transform();
43
-
44
- instancedFoliage.read(i, transform.position, transform.rotation, transform.scale);
45
-
46
- const mesh = new Mesh();
47
- mesh.url = modelURL;
48
-
49
- mesh.castShadow = layer.castShadow.getValue();
50
- mesh.receiveShadow = layer.receiveShadow.getValue();
51
-
52
- //TODO Consider moving BVH info here also, to make this process faster
53
-
54
- const entityBuilder = new Entity();
55
-
56
- entityBuilder.add(transform).add(mesh).build(dataset);
57
- }
58
- });
59
- });
60
-
61
- entitiesToStrip.push(entity);
62
- }
63
-
64
- dataset.traverseEntities([InstancedMeshComponent], visitFoliageEntities);
65
-
66
- //remove converted foliage components
67
- entitiesToStrip.forEach(function (entity) {
68
- dataset.removeComponentFromEntity(entity, InstancedMeshComponent);
69
- });
70
- }
3
+ import {TaskSignal} from "../../../../core/process/task/TaskSignal.js";
4
+ import {countTask} from "../../../../core/process/task/util/countTask.js";
5
+ import {promiseTask} from "../../../../core/process/task/util/promiseTask.js";
6
+ import Mesh, {MeshFlags} from "../../../graphics/ecs/mesh/Mesh.js";
7
+ import Entity from "../../Entity.js";
8
+ import {Transform} from "../../transform/Transform.js";
9
+ import {InstancedFoliage} from "../InstancedFoliage.js";
10
+ import {InstancedMeshComponent} from "./InstancedMeshComponent.js";
11
+ import {InstancedMeshLayer} from "./InstancedMeshLayer.js";
71
12
 
72
13
  /**
73
14
  *
@@ -289,4 +230,4 @@ export function optimizeIndividualMeshesEntitiesToInstances(dataset, threshold =
289
230
  main: tBuild,
290
231
  tasks
291
232
  };
292
- }
233
+ }
@@ -1,26 +1,25 @@
1
- import {Frustum, OrthographicCamera} from "three";
1
+ import { Frustum, OrthographicCamera } from "three";
2
2
  import FacingDirectionSystem from "../../../../../model/game/ecs/system/FacingDirectionSystem.js";
3
- import {makeEngineOptionsModel} from "../../../../../model/game/options/makeEngineOptionsModel.js";
4
- import {enableEditor} from "../../../../editor/enableEditor.js";
3
+ import { makeEngineOptionsModel } from "../../../../../model/game/options/makeEngineOptionsModel.js";
4
+ import { enableEditor } from "../../../../editor/enableEditor.js";
5
5
  import {
6
6
  ThreeClippingPlaneComputingBVHVisitor
7
7
  } from "../../../core/bvh2/traversal/ThreeClippingPlaneComputingBVHVisitor.js";
8
- import {RingBuffer} from "../../../core/collection/RingBuffer.js";
9
- import {convex_hull_jarvis_2d} from "../../../core/geom/2d/convex-hull/convex_hull_jarvis_2d.js";
8
+ import { RingBuffer } from "../../../core/collection/RingBuffer.js";
9
+ import { convex_hull_jarvis_2d } from "../../../core/geom/2d/convex-hull/convex_hull_jarvis_2d.js";
10
10
  import Vector2 from "../../../core/geom/Vector2.js";
11
11
  import Vector3 from "../../../core/geom/Vector3.js";
12
- import {computeStatisticalMean} from "../../../core/math/statistics/computeStatisticalMean.js";
13
- import {CanvasView} from "../../../view/elements/CanvasView.js";
12
+ import { computeStatisticalMean } from "../../../core/math/statistics/computeStatisticalMean.js";
13
+ import { CanvasView } from "../../../view/elements/CanvasView.js";
14
14
  import Entity from "../../ecs/Entity.js";
15
- import {Foliage2System} from "../../ecs/foliage/ecs/Foliage2System.js";
16
- import {FogOfWarRevealerSystem} from "../../ecs/fow/FogOfWarRevealerSystem.js";
17
- import {FogOfWarSystem} from "../../ecs/fow/FogOfWarSystem.js";
15
+ import { FogOfWarRevealerSystem } from "../../ecs/fow/FogOfWarRevealerSystem.js";
16
+ import { FogOfWarSystem } from "../../ecs/fow/FogOfWarSystem.js";
18
17
  import GUIElement from "../../ecs/gui/GUIElement.js";
19
18
  import GUIElementSystem from "../../ecs/gui/GUIElementSystem.js";
20
19
  import HeadsUpDisplaySystem from "../../ecs/gui/hud/HeadsUpDisplaySystem.js";
21
20
  import ViewportPosition from "../../ecs/gui/position/ViewportPosition.js";
22
21
  import ViewportPositionSystem from "../../ecs/gui/position/ViewportPositionSystem.js";
23
- import {InverseKinematicsSystem} from "../../ecs/ik/InverseKinematicsSystem.js";
22
+ import { InverseKinematicsSystem } from "../../ecs/ik/InverseKinematicsSystem.js";
24
23
  import AnimationSystem from "../../ecs/systems/AnimationSystem.js";
25
24
  import MotionSystem from "../../ecs/systems/MotionSystem.js";
26
25
  import RenderSystem from "../../ecs/systems/RenderSystem.js";
@@ -30,33 +29,33 @@ import TagSystem from "../../ecs/systems/TagSystem.js";
30
29
  import TimerSystem from "../../ecs/systems/TimerSystem.js";
31
30
  import ClingToTerrainSystem from "../../ecs/terrain/ecs/cling/ClingToTerrainSystem.js";
32
31
  import TerrainSystem from "../../ecs/terrain/ecs/TerrainSystem.js";
33
- import {Transform} from "../../ecs/transform/Transform.js";
34
- import {EngineConfiguration} from "../../EngineConfiguration.js";
35
- import {EngineHarness} from "../../EngineHarness.js";
36
- import {GridPosition2TransformSystem} from "../../grid/grid2transform/GridPosition2TransformSystem.js";
32
+ import { Transform } from "../../ecs/transform/Transform.js";
33
+ import { EngineConfiguration } from "../../EngineConfiguration.js";
34
+ import { EngineHarness } from "../../EngineHarness.js";
35
+ import { GridPosition2TransformSystem } from "../../grid/grid2transform/GridPosition2TransformSystem.js";
37
36
  import GridPositionSystem from "../../grid/position/GridPositionSystem.js";
38
- import {Transform2GridPositionSystem} from "../../grid/transform2grid/Transform2GridPositionSystem.js";
37
+ import { Transform2GridPositionSystem } from "../../grid/transform2grid/Transform2GridPositionSystem.js";
39
38
  import InputControllerSystem from "../../input/ecs/systems/InputControllerSystem.js";
40
- import {InputSystem} from "../../input/ecs/systems/InputSystem.js";
41
- import {BehaviorSystem} from "../../intelligence/behavior/ecs/BehaviorSystem.js";
39
+ import { InputSystem } from "../../input/ecs/systems/InputSystem.js";
40
+ import { BehaviorSystem } from "../../intelligence/behavior/ecs/BehaviorSystem.js";
42
41
  import PathFollowingSystem from "../../navigation/ecs/path_following/PathFollowingSystem.js";
43
- import {SoundEmitterSystem} from "../../sound/ecs/emitter/SoundEmitterSystem.js";
42
+ import { SoundEmitterSystem } from "../../sound/ecs/emitter/SoundEmitterSystem.js";
44
43
  import SoundControllerSystem from "../../sound/ecs/SoundControllerSystem.js";
45
44
  import SoundListenerSystem from "../../sound/ecs/SoundListenerSystem.js";
46
45
  import AnimationControllerSystem from "../ecs/animation/AnimationControllerSystem.js";
47
- import {AnimationGraphSystem} from "../ecs/animation/animator/AnimationGraphSystem.js";
48
- import {CameraSystem} from "../ecs/camera/CameraSystem.js";
49
- import {frustum_from_camera} from "../ecs/camera/frustum_from_camera.js";
46
+ import { AnimationGraphSystem } from "../ecs/animation/animator/AnimationGraphSystem.js";
47
+ import { CameraSystem } from "../ecs/camera/CameraSystem.js";
48
+ import { frustum_from_camera } from "../ecs/camera/frustum_from_camera.js";
50
49
  import TopDownCameraControllerSystem from "../ecs/camera/topdown/TopDownCameraControllerSystem.js";
51
- import {TopDownCameraLanderSystem} from "../ecs/camera/topdown/TopDownCameraLanderSystem.js";
50
+ import { TopDownCameraLanderSystem } from "../ecs/camera/topdown/TopDownCameraLanderSystem.js";
52
51
  import MeshHighlightSystem from "../ecs/highlight/system/MeshHighlightSystem.js";
53
52
  import LightSystem from "../ecs/light/LightSystem.js";
54
53
  import Mesh from "../ecs/mesh/Mesh.js";
55
- import {MeshSystem} from "../ecs/mesh/MeshSystem.js";
56
- import {PathDisplaySystem} from "../ecs/path/PathDisplaySystem.js";
54
+ import { MeshSystem } from "../ecs/mesh/MeshSystem.js";
55
+ import { PathDisplaySystem } from "../ecs/path/PathDisplaySystem.js";
57
56
  import Trail2DSystem from "../ecs/trail2d/Trail2DSystem.js";
58
57
  import WaterSystem from "../ecs/water/WaterSystem.js";
59
- import {computeFrustumCorners} from "../render/forward_plus/computeFrustumCorners.js";
58
+ import { computeFrustumCorners } from "../render/forward_plus/computeFrustumCorners.js";
60
59
 
61
60
  const engineHarness = new EngineHarness();
62
61
 
@@ -97,7 +96,6 @@ function makeConfig(engine) {
97
96
  new TerrainSystem(graphics, assetManager),
98
97
  new WaterSystem(graphics),
99
98
  new Trail2DSystem(engine),
100
- new Foliage2System(assetManager, graphics),
101
99
  new ViewportPositionSystem(graphics.viewport.size),
102
100
  new GridPosition2TransformSystem(),
103
101
  new Transform2GridPositionSystem(),