@woosh/meep-engine 2.33.60 → 2.33.64

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 (89) hide show
  1. package/core/geom/3d/SurfacePoint3.js +44 -5
  2. package/core/geom/Vector2.d.ts +2 -0
  3. package/core/geom/packing/MaxRectangles.js +13 -4
  4. package/core/math/hash/murmur3_32.js +3 -3
  5. package/ecs/grid/pick.js +44 -0
  6. package/editor/actions/concrete/PaintTerrainOverlayAction.js +1 -1
  7. package/editor/process/ObstacleGridDisplayProcess.js +1 -1
  8. package/editor/process/symbolic/makeGridPositionSymbolDisplay.js +1 -1
  9. package/editor/tools/FoliagePaintTool.js +1 -1
  10. package/editor/tools/GridPaintTool.js +2 -2
  11. package/editor/tools/paint/TerrainPaintTool.js +2 -2
  12. package/editor/tools/paint/TerrainTexturePaintTool.js +1 -1
  13. package/editor/view/EditorView.js +1 -1
  14. package/editor/view/GridPickCoordinateView.js +2 -2
  15. package/engine/asset/loaders/material/computeTextureHash.js +7 -13
  16. package/engine/ecs/animation/InverseKinematicsSystem.js +1 -1
  17. package/engine/ecs/attachment/AttachmentSystem.js +9 -56
  18. package/engine/ecs/evaluation/world/ReadTerrainLayerWeightPointFitness.js +1 -1
  19. package/engine/ecs/fow/FogOfWarRevealerSystem.js +2 -2
  20. package/engine/ecs/grid/HeightMap2NormalMap.js +1 -1
  21. package/engine/ecs/grid/NormalMap2AOMap.js +1 -1
  22. package/engine/ecs/gui/position/ViewportPositionSystem.js +5 -5
  23. package/engine/ecs/parent/EntityNode.d.ts +20 -0
  24. package/engine/ecs/parent/EntityNode.js +284 -0
  25. package/engine/ecs/parent/FaceEditor.js +137 -0
  26. package/engine/ecs/parent/testCompositionEntityNode.js +153 -0
  27. package/engine/ecs/parent/testHuDPerf.js +123 -0
  28. package/engine/ecs/team/Team.js +82 -0
  29. package/engine/ecs/terrain/ecs/ClingToTerrainSystem.js +2 -2
  30. package/engine/ecs/terrain/ecs/Terrain.js +14 -5
  31. package/engine/ecs/terrain/util/loadVisibleTerrainTiles.js +112 -0
  32. package/engine/ecs/terrain/util/obtainTerrain.js +23 -0
  33. package/engine/ecs/tooltip/TooltipComponentSystem.js +1 -1
  34. package/engine/graphics/GraphicsEngine.js +1 -2
  35. package/engine/graphics/camera/testClippingPlaneComputation.js +0 -4
  36. package/engine/graphics/ecs/camera/topdown/TopDownCameraLanderSystem.js +1 -1
  37. package/engine/graphics/ecs/light/LightSystem.js +1 -1
  38. package/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +29 -0
  39. package/engine/graphics/ecs/mesh-v2/ShadedGeometrySystem.js +158 -1
  40. package/engine/graphics/ecs/path/testPathDisplaySystem.js +0 -2
  41. package/engine/graphics/ecs/water/WaterSystem.js +1 -1
  42. package/engine/graphics/ecs/water2/shader/testWaterShader.js +1 -1
  43. package/engine/graphics/geometry/AttributeSpec.d.ts +8 -0
  44. package/engine/graphics/geometry/VertexDataSpec.d.ts +15 -0
  45. package/engine/graphics/geometry/buffered/deinterleaveBufferAttribute.js +39 -0
  46. package/engine/graphics/geometry/buffered/deinterleaveBufferGeometry.js +50 -0
  47. package/engine/graphics/geometry/buffered/query/GeometrySpatialQueryAccelerator.js +55 -11
  48. package/engine/graphics/micron/build/buildMicronGeometryFromBufferGeometry.js +10 -7
  49. package/engine/graphics/micron/format/MicronGeometry.d.ts +4 -0
  50. package/engine/graphics/micron/render/v1/MaterialContext.js +1 -0
  51. package/engine/graphics/particles/particular/engine/simulator/SimulationStepFixedPhysics.js +19 -3
  52. package/engine/graphics/particles/particular/engine/utils/volume/prototypeParticleVolume.js +2 -4
  53. package/engine/graphics/render/buffer/buffers/prototypeNormalFrameBuffer.js +0 -2
  54. package/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +2 -4
  55. package/engine/graphics/render/frame_graph/FrameGraphBuilder.js +36 -0
  56. package/engine/graphics/render/frame_graph/IRenderContext.js +8 -0
  57. package/engine/graphics/render/frame_graph/RenderPass.js +32 -0
  58. package/engine/graphics/render/frame_graph/RenderPassFlags.js +6 -0
  59. package/engine/graphics/render/frame_graph/RenderPassResources.js +15 -0
  60. package/engine/graphics/render/frame_graph/Resource.js +21 -0
  61. package/engine/graphics/render/frame_graph/ResourceReference.js +14 -0
  62. package/engine/graphics/render/frame_graph/TextureDescriptor.js +30 -0
  63. package/engine/graphics/render/frame_graph/UsageModeType.js +5 -0
  64. package/engine/graphics/render/frame_graph/sample/deferred/GBufferDrawPass.js +27 -0
  65. package/engine/graphics/render/frame_graph/sample/deferred/PresentPass.js +17 -0
  66. package/engine/graphics/render/visibility/hiz/prototypeHiZ.js +0 -2
  67. package/engine/graphics/render/webgpu/sample/MeshInstance.js +108 -0
  68. package/engine/graphics/render/webgpu/sample/fragmentDeferredRendering.wgsl +71 -0
  69. package/engine/graphics/render/webgpu/sample/fragmentGBuffersDebugView.wgsl +39 -0
  70. package/engine/graphics/render/webgpu/sample/fragmentWriteGBuffers.wgsl +21 -0
  71. package/engine/graphics/render/webgpu/sample/lightUpdate.wgsl +41 -0
  72. package/engine/graphics/render/webgpu/sample/main.js +604 -0
  73. package/engine/graphics/render/webgpu/sample/vertexTextureQuad.wgsl +9 -0
  74. package/engine/graphics/render/webgpu/sample/vertexWriteGBuffers.wgsl +30 -0
  75. package/engine/graphics/shadows/testShadowMapRendering.js +0 -2
  76. package/engine/{ecs/grid → graphics/texture/sampler}/sampler2DToFloat32Texture.js +1 -1
  77. package/engine/graphics/util/modelHitTest.js +63 -0
  78. package/engine/grid/systems/GridPosition2TransformSystem.js +1 -1
  79. package/engine/grid/systems/ViewportGridProjectionSystem.js +1 -1
  80. package/engine/grid/transform2grid/Transform2GridPositionSystem.js +1 -1
  81. package/engine/scene/transitionToScene.js +1 -1
  82. package/generation/grid/actions/ContinuousGridCellActionSetTerrainHeight.js +1 -1
  83. package/generation/markers/actions/placement/MarkerNodeEntityProcessorClingToTerrain.js +1 -1
  84. package/generation/markers/debug/visualizeMarkers.js +1 -1
  85. package/generation/theme/ThemeEngine.js +1 -1
  86. package/package.json +1 -1
  87. package/samples/terrain/main.js +117 -0
  88. package/view/minimap/Minimap.js +1 -1
  89. package/engine/ecs/sockets/AttachmentSocketsSystem.js +0 -10
@@ -0,0 +1,63 @@
1
+ import Vector2 from "../../../core/geom/Vector2.js";
2
+ import Mesh from "../ecs/mesh/Mesh.js";
3
+
4
+ const tempPoint = new Vector2();
5
+
6
+ /**
7
+ *
8
+ * @param {SurfacePoint3} result
9
+ * @param {Array.<Number>} entities
10
+ * @param {EntityComponentDataset} ecd
11
+ * @param {GraphicsEngine} ge
12
+ * @param {Number} x
13
+ * @param {Number} y
14
+ * @returns {Number} entity number or -1 in case of failed test
15
+ */
16
+ function modelHitTest(result, entities, ecd, ge, x, y) {
17
+ tempPoint.set(x, y);
18
+
19
+ ge.normalizeViewportPoint(tempPoint, tempPoint);
20
+
21
+ let i = 0;
22
+ const l = entities.length;
23
+
24
+ for (; i < l; i++) {
25
+
26
+ const entity = entities[i];
27
+
28
+ const model = ecd.getComponent(entity, Mesh);
29
+
30
+ if (model === null) {
31
+ //entity no longer exists most likely
32
+ continue;
33
+ }
34
+
35
+ /**
36
+ *
37
+ * @type {Intersection[]}
38
+ */
39
+ const hits = ge.intersectObjectUnderViewportPoint(tempPoint.x, tempPoint.y, model.mesh, true);
40
+
41
+ // get hit
42
+
43
+
44
+ if (hits.length > 0) {
45
+ /**
46
+ *
47
+ * @type {Intersection}
48
+ */
49
+ const hit = hits[0];
50
+
51
+ result.position.copy(hit.point);
52
+
53
+ //TODO extract normal
54
+
55
+ return entity;
56
+ }
57
+
58
+ }
59
+
60
+ return -1;
61
+ }
62
+
63
+ export { modelHitTest };
@@ -6,8 +6,8 @@ import { Transform } from '../../ecs/transform/Transform.js';
6
6
  import GridPosition from '../components/GridPosition.js';
7
7
  import { GridPosition2Transform } from '../components/GridPosition2Transform.js';
8
8
  import Vector3 from "../../../core/geom/Vector3.js";
9
- import { obtainTerrain } from "../../../../model/game/scenes/SceneUtils.js";
10
9
  import { GridPosition2TransformFlags } from "../components/GridPosition2TransformFlags.js";
10
+ import { obtainTerrain } from "../../ecs/terrain/util/obtainTerrain.js";
11
11
 
12
12
 
13
13
  export class GridPosition2TransformSystem extends System {
@@ -5,9 +5,9 @@ import { System } from '../../ecs/System.js';
5
5
  import GeometryBVH from '../../ecs/components/GeometryBVH.js';
6
6
  import GridPosition from '../components/GridPosition.js';
7
7
  import ViewportGridProjection from '../components/ViewportGridProjection.js';
8
- import { obtainTerrain } from "../../../../model/game/scenes/SceneUtils.js";
9
8
  import Vector2 from "../../../core/geom/Vector2.js";
10
9
  import Vector3 from "../../../core/geom/Vector3.js";
10
+ import { obtainTerrain } from "../../ecs/terrain/util/obtainTerrain.js";
11
11
 
12
12
  class ViewportGridProjectionSystem extends System {
13
13
  constructor(grid, graphicsEngine) {
@@ -2,9 +2,9 @@ import { System } from "../../ecs/System.js";
2
2
  import { Transform2GridPosition } from "./Transform2GridPosition.js";
3
3
  import GridPosition from "../components/GridPosition.js";
4
4
  import { Transform } from "../../ecs/transform/Transform.js";
5
- import { obtainTerrain } from "../../../../model/game/scenes/SceneUtils.js";
6
5
  import Vector2 from "../../../core/geom/Vector2.js";
7
6
  import { Transform2GridPositionMode } from "./Transform2GridPositionMode.js";
7
+ import { obtainTerrain } from "../../ecs/terrain/util/obtainTerrain.js";
8
8
 
9
9
  const v2 = new Vector2();
10
10
 
@@ -1,11 +1,11 @@
1
1
  import { actionTask, delayTask, wrapTaskIgnoreFailure } from "../../core/process/task/TaskUtils.js";
2
- import { loadVisibleTerrainTiles } from "../../../model/game/scenes/SceneUtils.js";
3
2
  import TaskGroup from "../../core/process/task/TaskGroup.js";
4
3
  import Task from "../../core/process/task/Task.js";
5
4
  import TaskState from "../../core/process/task/TaskState.js";
6
5
  import { noop } from "../../core/function/Functions.js";
7
6
  import { compileAllMaterials } from "../graphics/ecs/compileAllMaterials.js";
8
7
  import { createTaskWaitForMeshesToLoad } from "../graphics/ecs/mesh/createTaskWaitForMeshesToLoad.js";
8
+ import { loadVisibleTerrainTiles } from "../ecs/terrain/util/loadVisibleTerrainTiles.js";
9
9
 
10
10
 
11
11
  /**
@@ -2,9 +2,9 @@ import { lerp } from "../../../core/math/lerp.js";
2
2
  import { min2 } from "../../../core/math/min2.js";
3
3
  import { ContinuousGridCellAction } from "./ContinuousGridCellAction.js";
4
4
  import { Sampler2D } from "../../../engine/graphics/texture/sampler/Sampler2D.js";
5
- import { obtainTerrain } from "../../../../model/game/scenes/SceneUtils.js";
6
5
  import { assert } from "../../../core/assert.js";
7
6
  import { CellFilterLiteralFloat } from "../../filtering/numeric/CellFilterLiteralFloat.js";
7
+ import { obtainTerrain } from "../../../engine/ecs/terrain/util/obtainTerrain.js";
8
8
 
9
9
  export class ContinuousGridCellActionSetTerrainHeight extends ContinuousGridCellAction {
10
10
  constructor() {
@@ -1,7 +1,7 @@
1
1
  import { MarkerNodeEntityProcessor } from "./MarkerNodeEntityProcessor.js";
2
- import { obtainTerrain } from "../../../../../model/game/scenes/SceneUtils.js";
3
2
  import { SurfacePoint3 } from "../../../../core/geom/3d/SurfacePoint3.js";
4
3
  import { alignToVector } from "../../../../engine/ecs/terrain/ecs/ClingToTerrainSystem.js";
4
+ import { obtainTerrain } from "../../../../engine/ecs/terrain/util/obtainTerrain.js";
5
5
 
6
6
  const p = new SurfacePoint3();
7
7
 
@@ -11,13 +11,13 @@ import {
11
11
  import EntityBuilder from "../../../engine/ecs/EntityBuilder.js";
12
12
  import Renderable from "../../../engine/ecs/components/Renderable.js";
13
13
  import { Transform } from "../../../engine/ecs/transform/Transform.js";
14
- import { obtainTerrain } from "../../../../model/game/scenes/SceneUtils.js";
15
14
  import LabelView from "../../../view/common/LabelView.js";
16
15
  import GUIElement from "../../../engine/ecs/gui/GUIElement.js";
17
16
  import ViewportPosition from "../../../engine/ecs/gui/position/ViewportPosition.js";
18
17
  import HeadsUpDisplay from "../../../engine/ecs/gui/hud/HeadsUpDisplay.js";
19
18
  import Vector3 from "../../../core/geom/Vector3.js";
20
19
  import { MarkerNodeMatcherAny } from "../matcher/MarkerNodeMatcherAny.js";
20
+ import { obtainTerrain } from "../../../engine/ecs/terrain/util/obtainTerrain.js";
21
21
 
22
22
  function formatValue(v) {
23
23
 
@@ -1,6 +1,5 @@
1
1
  import { QuadTreeNode } from "../../core/geom/2d/quad-tree/QuadTreeNode.js";
2
2
  import { assert } from "../../core/assert.js";
3
- import { obtainTerrain } from "../../../model/game/scenes/SceneUtils.js";
4
3
  import { seededRandom } from "../../core/math/random/seededRandom.js";
5
4
  import { TerrainLayerRuleAggregator } from "./TerrainLayerRuleAggregator.js";
6
5
  import { actionTask, countTask, emptyTask, futureTask } from "../../core/process/task/TaskUtils.js";
@@ -17,6 +16,7 @@ import { TerrainLayer } from "../../engine/ecs/terrain/ecs/layers/TerrainLayer.j
17
16
  import { TerrainFlags } from "../../engine/ecs/terrain/ecs/TerrainFlags.js";
18
17
  import { binarySearchLowIndex } from "../../core/collection/array/binarySearchLowIndex.js";
19
18
  import { randomFloatBetween } from "../../core/math/random/randomFloatBetween.js";
19
+ import { obtainTerrain } from "../../engine/ecs/terrain/util/obtainTerrain.js";
20
20
 
21
21
  /**
22
22
  *
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "productName": "Meep",
6
6
  "description": "production-ready JavaScript game engine based on Entity Component System Architecture",
7
7
  "author": "Alexander Goldring",
8
- "version": "2.33.60",
8
+ "version": "2.33.64",
9
9
  "dependencies": {
10
10
  "gl-matrix": "3.4.3",
11
11
  "fast-levenshtein": "2.0.6",
@@ -0,0 +1,117 @@
1
+ import { EngineConfiguration } from "../../engine/EngineConfiguration.js";
2
+ import { EngineHarness } from "../../engine/EngineHarness.js";
3
+ import { GameAssetType } from "../../engine/asset/GameAssetType.js";
4
+ import { TextureAssetLoader } from "../../engine/asset/loaders/texture/TextureAssetLoader.js";
5
+ import { ImprovedNoise } from "three/examples/jsm/math/ImprovedNoise.js";
6
+ import { lerp } from "../../core/math/lerp.js";
7
+ import Vector2 from "../../core/geom/Vector2.js";
8
+ import Vector3 from "../../core/geom/Vector3.js";
9
+ import { obtainTerrain } from "../../engine/ecs/terrain/util/obtainTerrain.js";
10
+
11
+ const eh = new EngineHarness();
12
+
13
+ /**
14
+ *
15
+ * @param {Engine} engine
16
+ * @return {EngineConfiguration}
17
+ */
18
+ function makeConfig(engine) {
19
+ const r = new EngineConfiguration();
20
+
21
+ // configure engine here, add systems, loaders etc.
22
+ r.addLoader(GameAssetType.Texture, new TextureAssetLoader());
23
+
24
+ return r;
25
+ }
26
+
27
+ /**
28
+ *
29
+ * @param {Terrain} terrain
30
+ * @param {number} resolution
31
+ * @param {number} heightMin
32
+ * @param {number} heightMax
33
+ */
34
+ async function buildRandomTerrainHeights({
35
+ terrain,
36
+ resolution = 64,
37
+ heightMin = -5,
38
+ heightMax = 20
39
+ }) {
40
+
41
+ const terrain_height = terrain.samplerHeight;
42
+
43
+ terrain_height.resize(resolution, resolution);
44
+
45
+ const noise = new ImprovedNoise();
46
+
47
+ let x, y;
48
+
49
+ for (y = 0; y < resolution; y++) {
50
+ for (x = 0; x < resolution; x++) {
51
+
52
+ const u = x / (resolution - 1);
53
+ const v = y / (resolution - 1);
54
+
55
+ const noise_value = noise.noise(u * 13.456, v * 13.456, 0) * noise.noise(u * 3.71, v * 3.71, 0.8);
56
+
57
+ const height_value = lerp(heightMin, heightMax, noise_value);
58
+
59
+ terrain_height.set(x, y, [height_value]);
60
+ }
61
+ }
62
+
63
+ await terrain.updateWorkerHeights();
64
+ terrain.updateHeightTexture();
65
+ terrain.buildLightMap();
66
+
67
+ terrain.tiles.rebuild();
68
+ }
69
+
70
+ /**
71
+ *
72
+ * @param {Engine} engine
73
+ */
74
+ async function main(engine) {
75
+
76
+
77
+ await EngineHarness.buildBasics({
78
+ engine,
79
+ enableWater: false,
80
+ terrainResolution: 4,
81
+ terrainSize: new Vector2(64, 64),
82
+ focus: new Vector3(64, 0, 54),
83
+ yaw: 0,
84
+ pitch: 0.909,
85
+ distance: 169
86
+ });
87
+
88
+ /**
89
+ *
90
+ * @type {EntityComponentDataset}
91
+ */
92
+ const ecd = engine.entityManager.dataset;
93
+
94
+ /**
95
+ *
96
+ * @type {Terrain|null}
97
+ */
98
+ const terrain = obtainTerrain(ecd);
99
+
100
+ buildRandomTerrainHeights({ terrain: terrain });
101
+ }
102
+
103
+ /**
104
+ *
105
+ * @param {EngineHarness} harness
106
+ */
107
+ async function init(harness) {
108
+ const engine = eh.engine;
109
+
110
+ await makeConfig(engine).apply(engine);
111
+
112
+ await eh.initialize();
113
+
114
+ main(engine);
115
+ }
116
+
117
+ init(eh);
@@ -19,7 +19,7 @@ import { MinimapWorldGL } from "./gl/MinimapWorldGL.js";
19
19
  import { MinimapCameraView } from "./dom/MinimapCameraView.js";
20
20
  import { MinimapFogOfWar } from "./gl/MinimapFogOfWar.js";
21
21
  import { MinimapTerrainGL } from "./gl/MinimapTerrainGL.js";
22
- import { obtainTerrain } from "../../../model/game/scenes/SceneUtils.js";
22
+ import { obtainTerrain } from "../../engine/ecs/terrain/util/obtainTerrain.js";
23
23
 
24
24
 
25
25
  class MinimapView extends View {
@@ -1,10 +0,0 @@
1
- import { System } from "../System.js";
2
- import { AttachmentSockets } from "./AttachmentSockets.js";
3
-
4
- export class AttachmentSocketsSystem extends System {
5
- constructor() {
6
- super();
7
-
8
- this.dependencies = [AttachmentSockets];
9
- }
10
- }